---
title: "Get statistics for a brand report"
method: GET
path: "/v1/reports/brand/{reportId}/stats"
tags: ["Brand Reports"]
---

# Get statistics for a brand report

`GET /v1/reports/brand/{reportId}/stats`

## Request

- Base URL: `https://data.otterly.ai`
- URL: `https://data.otterly.ai/v1/reports/brand/{reportId}/stats`
- Auth: HTTP bearer

## Path parameters

- `reportId` string, required: Brand report identifier.

## Query parameters

- `startDate` string, required: Start date for the stats window (inclusive).
- `endDate` string, required: End date for the stats window (inclusive).
- `country` string, required: Country code to filter stats by. Lowercase ISO 3166-1 alpha-2; use `uk` for the United Kingdom.
- `frequency` 'daily' | 'weekly': Optional. `weekly` buckets the periods by ISO week (a weekly run lands on its week's Monday; the current, unfinished week is left out). Defaults to `weekly` for a workspace monitored weekly, otherwise `daily`.
- `engines` union: Optional. AI engine(s) to filter by. Repeat the param or pass a single value.
  - 'chatgpt' | 'google' | 'perplexity' | 'copilot' | 'google_ai_mode' | 'gemini' | 'claude': AI engine identifier.
  - string[]
- `tagId` string: Optional. Filter stats by tag id.

## Response `200`

Statistics for the brand report.

- PublicApiBrandReportStats: Brand report stats payload: meta, the tracked brand info, summary metrics, detected source brands, and per-analysis aggregates (all detected brands vs configured competitors).
  - `id` string, required
  - `status` string, required
  - `isRecalculating` boolean, required
  - `totalPrompts` integer, required
  - `brand` object, required
    - `brand` string, required
    - `brandDomain` string, required
    - `brandDomainWildcard` boolean
  - `summary` object, required
    - `averageRank` number, nullable, required
    - `averagePosition` number, nullable, required
    - `totalMentions` integer, required
    - `totalSources` integer, required
    - `shareOfVoice` number, required
    - `brandCoverage` number, required
    - `domainCoverage` number, required
  - `detectedBrands` object[], required
    - `name` string, required
    - `mentions` number, required
  - `allBrandsAnalysis` object, required
    - `brandMentions` object[], required
      - `brand` string, required
      - `isMainBrand` boolean, required
      - `rank` number, required
      - `mentions` number, required
      - `shareOfVoice` number, required
      - `brandCoverage` number, required
    - `brandRankHistory` object[], required
      - `date` string, required
      - `brands` object[], required
        - `brand` string, required
        - `isMainBrand` boolean, required
        - `rank` number, required
    - `brandCoverageHistory` object[], required
      - `date` string, required
      - `brands` object[], required
        - `brand` string, required
        - `isMainBrand` boolean, required
        - `logoUrl` string, required
        - `coverage` number, required
    - `brandPositionHistory` object[], required
      - `date` string, required
      - `brands` object[], required
        - `brand` string, required
        - `isMainBrand` boolean, required
        - `position` number, required
    - `brandVisibilityIndex` object[], required
      - `date` string, required
      - `brands` object[], required
        - `brand` string, required
        - `isMainBrand` boolean, required
        - `visibilityScore` number, required
        - `brandCoverage` number, required
        - `likelihoodToBuy` number, required
    - `domainCoverageHistory` object[], required
      - `date` string, required
      - `domains` object[], required
        - `domain` string, required
        - `isMainBrand` boolean, required
        - `logoUrl` string, required
        - `coverage` number, required
  - `competitorBrandsAnalysis` object, required
    - `brandMentions` object[], required
      - `brand` string, required
      - `domain` string, required
      - `logoUrl` string, required
      - `isMainBrand` boolean, required
      - `mentions` number, required
      - `shareOfVoice` number, required
      - `brandCoverage` number, required
      - `domainCoverage` number, required
      - `domainCitations` number, required
      - `averageRank` number, nullable, required
      - `averagePosition` number, nullable, required
      - `visibilityScore` number, required
      - `likelihoodToBuy` number, nullable, required
      - `sentiment` object, nullable, required
        - `positive` number, required
        - `neutral` number, required
        - `negative` number, required
        - `nss` number, required
    - `brandCoverageHistory` object[], required
      - `date` string, required
      - `brands` object[], required
        - `brand` string, required
        - `isMainBrand` boolean, required
        - `logoUrl` string, required
        - `coverage` number, required
    - `domainCoverageHistory` object[], required
      - `date` string, required
      - `domains` object[], required
        - `domain` string, required
        - `isMainBrand` boolean, required
        - `logoUrl` string, required
        - `coverage` number, required
    - `brandVisibilityIndex` object[], required
      - `date` string, required
      - `brands` object[], required
        - `brand` string, required
        - `isMainBrand` boolean, required
        - `visibilityScore` number, required
        - `brandCoverage` number, required
        - `likelihoodToBuy` number, required

## Other responses

- `400`: Validation failed.
- `401`: Unauthorized.
- `403`: Forbidden.
- `404`: Report not found.

## Changes

- **2026-11-05** `333e3100f0b4`: 1 info
  - added the new optional `query` request parameter `frequency`

[Operation history](https://skmtc.dev/otterly/apis/otterly-public-api/changes/v1/reports/brand/:reportId/stats/get.md)

---

[API](https://skmtc.dev/otterly/apis/otterly-public-api.md) - [All operations](https://skmtc.dev/otterly/apis/otterly-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/otterly/apis/otterly-public-api/revisions/333e3100f0b4?raw)
