---
title: "Get industry benchmark"
method: GET
path: "/ai-visibility/industry-benchmark"
tags: ["AI Visibility"]
---

# Get industry benchmark

`GET /ai-visibility/industry-benchmark`

## Request

- Base URL: `https://next.frase.io/api/v1`
- URL: `https://next.frase.io/api/v1/ai-visibility/industry-benchmark`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-KEY`

Compare your site or organization against industry benchmarks for the resolved vertical across AI search platforms. Returns citation rates, Geo score, and share-of-voice with industry medians. Filters to a site when site_id is provided (silently ignored if site_id is not in your organization); otherwise returns the org-level aggregate. Set include_org=false for an industry-only view. Cookie/session auth is intentionally not supported.

## Query parameters

- `site_id` string, uuid
- `include_org` 'true' | 'false'

## Response `200`

Composite industry-benchmark payload

- IndustryBenchmarkPayload: Composite industry-benchmark payload. Methodology fields (contributingOrgs, sampleSize, sampleWeightSum, outlierSuppressed) are intentionally absent from the wire shape and stripped at the route's stitch boundary regardless of helper-return drift. The `meta` field is additive and not required — older API pods during a rolling deploy may omit it; consumers must tolerate its absence.
  - `context` object, required
    - `vertical` string, nullable, required: Resolved industry vertical, or null when no vertical can be resolved for the org.
    - `siteId` string, uuid, nullable, required: Echoed site_id; null when site_id was omitted OR silently dropped by the ownership gate.
    - `weekStart` string, date, nullable, required: ISO YYYY-MM-DD week start for the underlying benchmark snapshot.
  - `platforms` object[], required: Per-platform citation rates merged from the org overlay (when include_org=true) and the industry baseline.
    - `platform` string, required: Canonical platform identifier (e.g. chatgpt, perplexity).
    - `orgRate` number, nullable, required: Org-aggregate citation rate. Null when include_org=false or no org data.
    - `p50` number, required: Industry-median citation rate.
    - `p25` number, required: Industry 25th-percentile citation rate.
    - `p75` number, required: Industry 75th-percentile citation rate.
  - `geo` object, nullable, required: Geo score comparison. Null when the industry distribution is unavailable or below the k-anon floor.
    - `orgP50` number, nullable, required
    - `articleCount` integer, nullable, required
    - `industryP50` number, required
  - `shareOfVoice` object, nullable, required: Share-of-voice. Null when the industry-side k-anon gate dropped all rows.
    - `orgPct` number, nullable, required
    - `topDomain` string, required
    - `topPct` number, required
  - `meta` object: Authoritative readiness signal for cross-surface consumers (UI strip, dashboard hoist, MCP get_industry_benchmark). All three surfaces gate identically on `ready`. `transient: true` means the reason clears as data accrues; `transient: false` is terminal (user action required).
    - `ready` boolean, required: True when every readiness predicate clears.
    - `reason` 'vertical_not_resolved' | 'card_1_no_share_of_voice' | 'card_2_insufficient_articles' | 'card_3_no_medians', nullable, required: Highest-priority failing predicate, or null when ready=true.
    - `transient` boolean, required: True when the reason clears as data accrues (no user action required).

## Other responses

- `400`: Validation failed
- `401`: Authentication failed
- `403`: Forbidden - action not allowed on this resource
- `429`: Rate limit exceeded

---

[API](https://skmtc.dev/frase/apis/frase-api.md) · [All operations](https://skmtc.dev/frase/apis/frase-api/llms.txt) · [OpenAPI document](https://skmtc.dev/frase/apis/frase-api/revisions/7fb75d89f7a4?raw)
