Get an AI Visibility Report
Read the full structured AI Visibility Report — brand identity, both visibility scores, LLM analysis, persona archetypes, category prompts.
Authentication: Required
Read the structured AI Visibility Report by uuid (returned from Trigger an AI Visibility Report) or by public slug. Returns the full row contents — brand identity, both visibility scores, the LLM analysis (summary + observations + recommendations), persona archetypes, category prompts with per-platform mention estimates, and post ideas — surfaced as expanded JSON so an outreach-email template can pluck whichever fields it needs without us having to redesign the response shape per template change.
Poll this endpoint every 5–15 seconds after triggering until status is "complete" (or "failed").
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
uuid | string | One of uuid or slug | UUID returned from the trigger endpoint. Resolves any scan you own (or any public scan). |
slug | string | One of uuid or slug | Public brand slug (e.g. acme). Only resolves public, completed reports. |
Authorization: non-admin callers can read scans they own or any public scan. Admin keys see anything.
Example
Response — status: complete
Field guide
| Field | What it is | Use it for |
|---|---|---|
brand.name | LLM-inferred brand name from the seed URL | Subject lines, salutations |
brand.competitorNames | 5–10 real competing brands in this space | Competitor-comparison hooks |
scores.overallScore (0–100) | Overall AI visibility across category queries | The headline number for outreach |
scores.visibilityLevel | excellent/good/moderate/low/invisible | Plain-English score band |
scores.knowledgeScore (0–100) | How well AI agents know this brand by name | Direct-brand awareness signal |
scores.knowledgeLevel | strong/partial/thin/unknown | Plain-English knowledge band |
analysis.summary | 2–3 sentence narrative (the most interesting finding) | Email body lede |
analysis.observations | 3–6 specific findings | Bullet points |
analysis.recommendations | 3–5 prioritized content recommendations | The "what to do about it" pitch |
brandDirectSentiment.notableFacts | Things AI agents would surface about the brand | Personalization hooks |
brandDirectSentiment.riskFlags | Things AI agents might be getting wrong | "Here's what's wrong" angles |
metaAnalysis.scoreSlideHeadline | LLM-generated headline for this brand's score | Reusable outreach copy |
personas[] | Persona archetypes the brand's customers map to | Audience segmentation |
prompts[] | Real category prompts customers ask AI, with per-platform (ChatGPT/Claude/Gemini/AIOverviews) mention estimates | "We tested these prompts and you're invisible" angle |
postIdeas[] | LLM-generated content stubs (pitch, blog title, first sentence, hero image) | Content-strategy upsell |
Response — status: pending or analyzing
The same shape, with brand/scores/analysis populated as the LLM streams in. failureMessage is null. Poll every 5–15 seconds.
Response — status: failed
Most failures happen because the seed URL doesn't represent a real, active business (parked domain, error page, login wall). Re-trigger with a different URL.
Response — not found / forbidden
If the UUID doesn't exist, or it's a private scan owned by another user, you'll get a 404: