Tracking AI visibility
Agent skill
aeo-visibility-tracking · source on GitHub · install with /plugin install aeo-toolkit --marketplace Advance-Labs/aeo-toolkit (all install options)
An agent loads it when: Measure whether AI answer engines actually cite a site, and whether that changes over time. Use when someone asks “are we showing up in AI answers”, “is ChatGPT/Perplexity citing us”, “did our AEO fixes work”, “track our AI visibility”, “which prompts should we track”, or “how do we compare to competitors in AI search”. Covers choosing a prompt set, a baseline, re-measure cadence, answer variance, competitor share, and tying movement to shipped fixes. Requires the aeo-toolkit aeo-visibility MCP server and the user’s own Perplexity API key.
Fixing a site for AI engines (crawler access, rendering, content shape) is the input. Visibility tracking is the only way to see the output: does an answer engine cite this site for the questions its customers ask, and is that moving? Done carelessly it produces confident-looking numbers from a handful of noisy samples. Done well it gives a baseline, a trend, and an honest “we can’t tell yet”.
When this matters / when it doesn’t
- Worth doing once the site is crawlable and indexable. Measuring a site that blocks AI
crawlers just confirms the block; fix that first (see
aeo-ai-crawler-access). - Not worth it for a site with no stable prompts to track (a brand-new site, or one with no defined customers or topics). Define the audience first.
- Not a substitute for traffic data. Citation is not a click. Pair with
aeo-ai-referral-analytics.
What the tools actually measure
Read this before quoting any number. Per the tool definitions:
check_ai_visibility,get_visibility_report,compare_competitor_visibilityand the live-test step ofdiscover_ranking_promptsall query one engine: Perplexity Sonar, using the user’s own key (passed per call, never stored). They do not query ChatGPT, Claude, Gemini, Copilot or Google AI Overviews. A result is “cited by Perplexity”, not “cited by AI”.- “Cited” means a URL on the same host appears in Sonar’s returned citation list. Any page
on the host counts, so a homepage citation and a deep-link citation both read as cited.
citationRankis the position in the citation list, not prominence in the answer text. - One call is one sample. There is no repeat-sampling built in.
Steps
- Confirm the key and scope. Ask for the Perplexity key and the exact URL (host) to track. Ask which competitors matter. Do not invent either.
- Build the prompt set. Start from the customer, not the tool.
- Ask the user for real questions: sales calls, support tickets, search queries
(
gsc_top_queriesifaeo-searchis connected, filtered to question-shaped queries). - Add candidates with
discover_ranking_prompts(url,topic,testCount: 0 to 10, default 3). These are model-generated guesses at what people ask. Treat them as suggestions to review, not ground truth. UsetestCount: 0to just get the list. - Mix intents deliberately: problem/how-to, comparison (“X vs Y”), category (“best X for Y”), and a few branded prompts. Report branded and unbranded rates separately. Branded prompts are cited almost by construction and will inflate a blended rate.
- A set of 15 to 30 prompts is a reasonable starting size. Say so as a judgement, not a rule. Fewer than ~10 makes one flipped prompt a large swing in the rate.
- Write the final list down with the date. Freeze it. Changing prompts between runs breaks comparison; add new prompts as a new set, don’t edit the old one.
- Ask the user for real questions: sales calls, support tickets, search queries
(
- Take the baseline. Run the frozen set with
get_visibility_report(url,prompts,perplexityApiKey). It also runs an AEO crawl (up to 10 pages), which is useful context but slower; if only citation data is wanted, loopcheck_ai_visibilityinstead. Record, per prompt: cited yes/no,citationRank, and which other domains were cited. - Repeat the baseline once or twice the same week before any fixes. The gap between those runs is your noise floor. If the same prompt flips cited/not-cited between identical runs, that prompt is unstable and single results on it mean little.
- Competitor share. For prompts that matter, call
compare_competitor_visibility(prompt,urls: two or more, include the user’s own). It makes one Sonar call and matches all URLs against that one answer, so the comparison is internally consistent. Compare share of prompts where each domain is cited across the set, not a single prompt. - Re-measure on a cadence matched to how fast things change. Weekly or fortnightly is typical; daily adds cost and noise, not information. Always the same frozen set, same engine.
- Tie movement to shipped changes. Keep a dated log of fixes (e.g. “unblocked OAI-SearchBot”, “added FAQ schema to /pricing”). Compare the window before and after against the noise floor from step 4.
How to read the result
- Signal: a citation rate that moves by more than the run-to-run noise, in the same direction across several consecutive re-measures, concentrated on the prompts the fix was aimed at.
- Noise: one prompt flipping; a rate that wobbles within the baseline spread; a change that appears on prompts unrelated to any fix.
- Report as counts with the denominator (“cited in 9 of 24 prompts, was 6 of 24”), not just a percentage. With small sets a percentage implies precision that isn’t there.
- If a re-measure differs from baseline by less than the baseline-to-baseline gap, say “no detectable change yet”, not “it worked” or “it failed”.
What it cannot tell you
- How ChatGPT, Claude, Gemini, Copilot or Google AI Overviews behave. Perplexity is one engine with its own retrieval; it is a proxy, not the market.
- Whether an answer recommends the site. A citation is a source link, not an endorsement.
- Real user prompts. The set is a model of what people ask.
- Causality. A rise after a fix is consistent with the fix, and also with a model update, a competitor losing a page, or chance.
- Personalisation, location and conversation history, none of which an API call reproduces.
Pitfalls
- Quoting “AI visibility” when only Perplexity was queried.
- Blending branded and unbranded prompts into one headline number.
- Editing the prompt set between runs.
- Judging a fix from a single before/after pair.
- Letting
discover_ranking_promptsoutput stand in for real customer questions. - Putting the API key in a file or commit. It is a per-call argument; don’t persist it.
Sources
Tool behaviour from the aeo-visibility MCP tool definitions and AEO Toolkit docs/VISIBILITY-TRACKING.md
(verified 2026-11-13). Perplexity Sonar is the engine the tools call as of that date; recheck
if the server changes.
AEO Toolkit is an open-source instrument by Advance Labs.