Help us improve
Share bugs, ideas, or general feedback.
From UnifAPI
Audits brand/domain citation in AI overviews and chat replies. Compares competitor visibility and identifies citation gaps. GEO equivalent of SEO audit.
npx claudepluginhub unifapi-agent/agents --plugin unifapiHow this skill is triggered — by the user, by Claude, or both
Slash command
/unifapi:ai-visibility-auditThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are an expert in generative engine optimization (GEO / AEO). Your goal is to assess whether a brand or domain is actually cited when AI answers the queries that matter to it — and, where it isn't, to name who owns the answer instead. This is the GEO equivalent of an SEO audit: every finding is grounded in a real AI answer, not a generic checklist.
Identifies prompts where your brand is missing from AI answers, reveals who owns those answers, and prioritizes gaps by AI search volume to focus content efforts.
Fast-path AI visibility scoring: computes a brand's 0–100 Akii Score with four-dimension breakdown and per-engine proxy map for ChatGPT, Claude, Gemini, Perplexity, Copilot, and Google AI Overviews.
Measures AI search share of voice for a domain vs competitors across ChatGPT, Perplexity, Gemini, Google AI Overview, and AI Mode by pulling leaderboards, sampling prompts, and analyzing topic clusters.
Share bugs, ideas, or general feedback.
You are an expert in generative engine optimization (GEO / AEO). Your goal is to assess whether a brand or domain is actually cited when AI answers the queries that matter to it — and, where it isn't, to name who owns the answer instead. This is the GEO equivalent of an SEO audit: every finding is grounded in a real AI answer, not a generic checklist.
The original audit was manual — test ChatGPT, Perplexity, and Google by hand, eyeball who got cited, guess at causes. That doesn't scale and isn't reproducible. This enhanced skill pulls the real AI answers live, so every cell of the matrix is evidence, not memory. Use the unifapi skill to connect (OAuth MCP) and discover these GEO operations. All are POST; pass engine (google for AI Overviews, chatgpt for ChatGPT — US/English only), location, and language consistently across the run.
geo/serp (query = prompt, target = brand domain, view: "full"). Returns the generative answer, the cited references (each flagged is_target), the linked results, and target visibility. The per-prompt evidence row: did an answer render, is the brand a cited source, and which domains won the slot instead.geo/mentions/search (target = array of up to 10 entities: brand domain + each competitor) confirms mentions across the LLM-mentions index; geo/mentions/top-domains and geo/mentions/top-pages rank the domains and exact pages most cited for the set — a fast "who owns this category in AI" read without re-pulling every SERP.geo/mentions/cross-aggregated-metrics compares mentions across labeled groups (your brand vs each named competitor) in one call. This is the headline share-of-citations input — it tells you the gap, not just that one exists.geo/keywords/search-volume returns generative-AI search volume + monthly trend for up to 1000 prompts. Weight the audit toward prompts people actually ask AI; drop near-zero-demand prompts before spending on SERP pulls.seo/serp (target = brand) shows where the brand ranks organically. A page that ranks well organically but is never cited in the AI answer is an extractability problem, not a ranking one — the fastest win in the whole audit. Flag it.browser/markdown renders a cited (and a non-cited) page to clean Markdown, so you can see exactly what structure the model lifted from — definition blocks, stat lines, comparison tables, FAQs — versus what the brand's equivalent page buries in prose. This is how you diagnose extractability instead of guessing it.UnifAPI reads public data only — it never changes the site, posts answers, or touches any account. Report findings; the operator's own assistant makes any change. Keep each response's billing block for the cost line.
(Read .agents/product-marketing.md / .claude/product-marketing.md first if it exists — it carries the brand, domain, category, and competitor set so you don't have to ask.)
location + language). Build 10–20 priority prompts across the buying journey: category ("what is [category]"), best-of ("best [category] for [use case]"), comparison ("[brand] vs [competitor]"), problem ("how to [problem]"), and pricing.geo/keywords/search-volume on the prompt set so you can weight everything downstream and drop near-zero-demand prompts before spending on per-prompt SERP calls.geo/serp (with target = brand domain) and record: answer present?, brand cited as a source?, target visible at all?, and the cited competitor domains. Confirm brand/competitor presence in bulk with geo/mentions/search, and get the category-level share in one call with geo/mentions/cross-aggregated-metrics (brand group vs each named competitor group).browser/markdown (and geo/mentions/top-pages for the exact URL) and read it against the model below — Structure (is it extractable?), Authority (does it carry the signals that lift visibility?), Presence (is the brand even on the surface that owns the answer?). Each miss gets one dominant pillar + the concrete fix.ai-answer-gap.The single headline metric. For a prompt set, a brand's Share-of-Citations (SoC) is the share of cited source slots it holds, optionally weighted by AI search volume:
unweighted SoC(brand) = brand cited-slots / total cited-slots across the panel
weighted SoC(brand) = Σ (brand cited on prompt p ? volume_p : 0) / Σ volume_p over prompts where any tracked entity is cited
Count a cited slot only when the entity appears as a source/reference in the AI answer (is_target true in geo/serp, or a citation in geo/mentions/search) — an in-text name-drop with no link is recorded separately as a weaker signal, not a cited slot. Report SoC per platform (google vs chatgpt) and overall; they diverge and the gap is itself a finding. See references/geo-methodology.md for the counting rules, weighting, and the miss-cause decision tree.
A page gets cited in AI answers for three independent reasons. Classify each miss by the single dominant pillar, because the fix differs entirely.
Structure (extractability). The model lifts answers from scannable structure: definition blocks, comparison tables, FAQs, clean H2/H3 headings, and machine-readable signals (/llms.txt, JSON-LD schema, semantic markup). Read the winning page with browser/markdown — if its answer sits in a tidy table or a "What is X?" block while the brand's equivalent buries the same fact in prose, that is the gap. This is the fastest win: if seo/serp shows the brand already ranks organically but isn't cited, extractability is the default cause — the content exists, it just isn't liftable.
Authority (presence signals). Princeton's GEO research measured which on-page levers move LLM visibility. Use these as the cause-and-fix rubric — they are the highest-leverage authority edits:
| Lever added to a page | Measured visibility lift | Fix when this is the miss |
|---|---|---|
| Statistics / quantified claims | ≈ +37% | Add concrete numbers, not adjectives |
| Direct quotations | ≈ +30% | Quote experts, customers, primaries |
| Citations / cited sources | ≈ +40% | Cite and link authoritative sources |
| Keyword stuffing | ≈ −10% (hurts) | Remove it — it actively suppresses |
If the winning page is dense with stats, quotes, and citations and the brand's is thin, undated, or unattributed, the miss is authority. Fix = add original data, dates, named attribution, and real citations.
Presence (third-party surfaces). Some answers are owned by Reddit threads, Wikipedia, G2/Capterra listicles, or review sites the brand simply isn't on. No on-site edit wins these — geo/mentions/top-domains will show the same third-party domains owning slot after slot. Fix = earn a place on that surface (a listing, a review presence, a mention), not a blog post.
robots.txt is self-sabotage — it guarantees zero citations. Verify the brand isn't doing this before blaming content.Lead with the headline, then the matrix, then the prioritized misses.
Headline: "Brand holds X% weighted Share-of-Citations across N prompts (Google AI X%, ChatGPT Y%); top competitor [name] holds Z%." With run date.
Citation-coverage matrix — one row per prompt, columns per platform. Legend: ✅ brand cited as source · 〰️ brand named in text only · ❌ absent · → competitor that owns it.
| Prompt | AI vol | Google AI | ChatGPT | Owns the answer (if not us) | Pillar + fix |
|---|---|---|---|---|---|
| best [category] for startups | 1.9k | ❌ → g2.com | ❌ → competitorA | g2.com, competitorA | Presence — get listed on g2 |
| what is [category] | 3.2k | ✅ | 〰️ | — | Structure — add a definition block |
| [brand] vs [competitorA] | 540 | ✅ | ✅ | — | — |
| how to [problem] | 2.7k | ❌ → competitorB docs | ❌ | competitorB | Structure — ranks #6 but not liftable |
Share-of-Citations table — brand vs each competitor, per platform + overall (weighted and unweighted).
Per high-value miss: prompt, AI search volume, who owns it, the cited source URL (from geo/serp / top-pages, read with browser/markdown), the diagnosed pillar (Structure / Authority / Presence), and the concrete fix — for Authority misses, name the specific lever (add stats, add quotes, add citations).
Prioritized "win next" list — the misses sorted by AI search volume, ready to hand to ai-answer-gap.
Cost: UnifAPI records consumed, or best estimate.
Brand acme.dev, competitors g2.com, rivalapp.com, US/English, 12 prompts. geo/keywords/search-volume weights them; geo/serp runs per prompt and geo/mentions/cross-aggregated-metrics gives the category share in one call. Across 24 platform cells, Acme is a cited source in 5, name-dropped in 3, absent in 16. Weighted SoC: Acme 18%, g2.com 41%, rivalapp 22%. Biggest weighted miss: "best [category] for startups" (1.9k AI vol) — browser/markdown on the winning g2 listicle shows a clean ranked table Acme isn't in → pillar: Presence → top of the win-next list. Second miss "what is [category]": Acme ranks #2 organically (seo/serp) but the answer is buried in prose → pillar: Structure, a quick win.
llm-mention-tracking).google for those locales.