> ## Documentation Index
> Fetch the complete documentation index at: https://snowseo.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Brands Overview

> Get the organization-wide 'All Brands' portfolio overview — per-brand health plus org KPIs.

Retrieve the **All Brands** portfolio overview for one of the organizations the authenticated user belongs to. It returns a per-brand snapshot (AI visibility, domain rating, open next steps, tracked prompts/keywords, and Search/Traffic) alongside a few organization-level KPIs.

The response is read from the persisted daily snapshot (`brandDailyStats`), so it is fast and does not trigger live provider fan-out. To force a fresh recompute, call `POST /v3/organization/portfolio/refresh`.

### Query parameters

| Parameter        | Type   | Description                                                                                                                                   |
| ---------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `organizationId` | String | The organization to report on. Optional when the user belongs to a single organization; required to disambiguate when they belong to several. |
| `start`          | String | Window start date (`YYYY-MM-DD`, UTC). Defaults to 30 days before `end`. Clamped so the window never exceeds 366 days.                        |
| `end`            | String | Window end date (`YYYY-MM-DD`, UTC). Defaults to today; never in the future.                                                                  |

### Deltas & sparklines

* **Point metrics** (AI visibility): `delta` is the absolute change of the latest in-window value vs. the prior equal-length window.
* **Count metrics** (search clicks, traffic visits): `delta` is the percentage change of the window sums.
* **Sparklines** are the daily series across the selected window.

### Top-level fields

| Field      | Type              | Description                                                                             |
| ---------- | ----------------- | --------------------------------------------------------------------------------------- |
| `asOf`     | String (nullable) | ISO timestamp of the most recent snapshot row used; `null` when no snapshot exists yet. |
| `isAgency` | Boolean           | Whether the organization is configured as an agency (controls the `reports` KPI).       |
| `kpis`     | Object            | Organization-level totals for the window (see below).                                   |
| `brands`   | Array             | Per-brand rows (see below).                                                             |

### `kpis`

| Field             | Type              | Description                                                                               |
| ----------------- | ----------------- | ----------------------------------------------------------------------------------------- |
| `timeSavedHours`  | Number            | Estimated hours saved from generated content (\~1000 words ≈ 1 hour), to 1 decimal place. |
| `articlesWritten` | Number            | Articles created in the window — the set the `timeSavedHours` estimate is derived from.   |
| `reports`         | Number (nullable) | Reports created in the window; `null` when the org is not an agency.                      |
| `activeBrands`    | Number            | Count of active brands the user can see in this org.                                      |

### `brands[]`

| Field             | Type              | Description                                                                                       |
| ----------------- | ----------------- | ------------------------------------------------------------------------------------------------- |
| `teamId`          | String            | The brand/team identifier.                                                                        |
| `name`            | String            | Brand display name.                                                                               |
| `domain`          | String            | Brand website domain.                                                                             |
| `logoUrl`         | String (nullable) | Brand logo URL.                                                                                   |
| `status`          | String            | Health indicator: `green`, `amber`, or `red` (derived from AI visibility value and delta).        |
| `aiVisibility`    | Object            | `{ value, delta, sparkline[] }` — latest AI visibility score, absolute change, and daily series.  |
| `domainRating`    | Number (nullable) | Ahrefs Domain Rating for the brand's root domain; `null` when not yet fetched.                    |
| `todos`           | Object            | `{ count, now }` — open next steps, and how many are priority `now`.                              |
| `trackedPrompts`  | Object            | `{ count, delta }` — enabled tracked prompts, and how many were added in the window.              |
| `trackedKeywords` | Object            | `{ count, delta }` — active tracked keywords, and how many were added in the window.              |
| `search`          | Object (nullable) | `{ clicks, delta, sparkline[] }` from Search Console; `null` when Search Console isn't connected. |
| `traffic`         | Object (nullable) | `{ visits, delta, sparkline[] }` from analytics; `null` when analytics isn't connected.           |

<Note>
  Metrics come from the persisted daily snapshot. If a brand has no data yet for the window (no audit, no AI visibility runs, or a disconnected integration), the relevant metric returns `null` (`search`, `traffic`, `domainRating`) or `0` (counts), and sparklines return empty or partial series.
</Note>

<Tip>
  Omit `organizationId` for single-org users. For multi-org users, resolve the organization from any of your teams first (each team carries its `organizationId`).
</Tip>

<RequestExample>
  ```bash cURL theme={null}
  curl -X GET 'https://api.snowseo.com/v3/organization/portfolio?organizationId=org_67890&start=2026-06-01&end=2026-06-30' \
    -H 'Authorization: Bearer <your_api_key>'
  ```
</RequestExample>

<ResponseExample>
  ```json Success (200) theme={null}
  {
    "asOf": "2026-06-30T09:12:00.000Z",
    "isAgency": true,
    "kpis": {
      "timeSavedHours": 42.5,
      "articlesWritten": 8,
      "reports": 3,
      "activeBrands": 4
    },
    "brands": [
      {
        "teamId": "team_12345",
        "name": "Acme Marketing",
        "domain": "acme.com",
        "logoUrl": "https://assets.snowseo.com/logos/acme-logo.png",
        "status": "green",
        "aiVisibility": {
          "value": 78,
          "delta": 5,
          "sparkline": [72, 73, 75, 78]
        },
        "domainRating": 64,
        "todos": { "count": 6, "now": 2 },
        "trackedPrompts": { "count": 35, "delta": 4 },
        "trackedKeywords": { "count": 150, "delta": 12 },
        "search": {
          "clicks": 4210,
          "delta": 9,
          "sparkline": [120, 138, 145, 160]
        },
        "traffic": {
          "visits": 9800,
          "delta": -3,
          "sparkline": [300, 290, 275, 260]
        }
      }
    ]
  }
  ```
</ResponseExample>


## OpenAPI

````yaml GET /v3/organization/portfolio
openapi: 3.0.0
info:
  title: SnowSEO API
  description: API documentation for SnowSEO
  version: 1.0.0
servers:
  - url: https://api.snowseo.com
    description: Production server
security: []
tags:
  - name: Keywords
    description: Keyword research and suggestion end-points
  - name: Onboarding
    description: Brand onboarding and strategy end-points
  - name: Brands
    description: Brand management end-points
  - name: Organizations
    description: Organization and member end-points
  - name: Integrations
    description: Google Search Console and other integrations
  - name: Utilities
    description: Common utility end-points like screenshots and uploads
externalDocs:
  url: https://snowseo.com/docs
  description: Find more info here
paths:
  /v3/organization/portfolio:
    get:
      tags:
        - Organization
      summary: Organization brands overview
      description: >-
        Per-brand portfolio overview for one of the user's organizations: AI
        visibility (value, delta, sparkline), domain rating, open next-steps
        count, tracked prompts and keywords, and Search/Traffic — plus org KPIs
        (time saved, articles created, reports sent, active brands). Reads the
        persisted daily snapshot. Pass organizationId (from list_teams) to
        target a specific org; omit it when the user belongs to a single org.
      parameters:
        - schema:
            type: string
          in: query
          name: organizationId
          required: false
          description: >-
            Organization ID (from list_teams). Optional when the user belongs to
            a single org.
        - schema:
            type: string
          in: query
          name: start
          required: false
          description: Window start date (YYYY-MM-DD, UTC). Defaults to 30 days before end.
        - schema:
            type: string
          in: query
          name: end
          required: false
          description: Window end date (YYYY-MM-DD, UTC). Defaults to today.
      responses:
        '200':
          description: Default Response

````