Ask Google a set of real buyer questions, one at a time. Keep the ones where Google returned an AI Overview. Read the list of source links attached to each of those answers, and count how many name your domain. That fraction is your AI visibility, and it is the only number in this field you can compute from evidence rather than infer from a vendor dashboard.
It costs $0.0015 a question at list price. Nine questions is a cent and a half. The whole method fits in an afternoon. The rest of this post is the method, its failure modes, and the numbers from a scan we ran on 15 August 2026.
The short answer
- The metric is: of the questions Google answered with an AI Overview, how many cited you.
- A question with no AI Overview is not a miss. It is not in the denominator at all.
- Search Console cannot answer this. Google's own docs explain why.
- One question costs $0.0015 through Bright Data's SERP API, which returns the AI Overview plus the real citation URLs.
- Everything here is Google AI Overviews. Not ChatGPT, not Perplexity, not Claude.
The metric: of the questions AI answers, how many name you
Write it as a fraction and the argument becomes obvious.
citation rate = answers that cited your domain
---------------------------------
questions that returned an AI Overview
The numerator is easy and nobody disagrees about it. The denominator is where every AI visibility score quietly makes a choice, and most of them make the wrong one.
Three denominators are on offer. All the questions you asked. All the questions that returned an AI Overview. All the questions where any competitor was cited. Only the second one measures citation. The first one measures citation and AI Overview trigger rate blended into a single number that moves for two unrelated reasons. The third one measures your position in a field you did not define.
Why a question with no AI Overview is not a miss
This is the part worth being stubborn about, because it changes the number a lot.
Google's own documentation is explicit that overviews do not always appear: "AI Overviews are only shown when our systems determine that it is additive to classic Search, and as such, often don't trigger" (Google Search Central, AI features and your website, last updated 10 December 2025).
So when you ask a question and get no AI Overview, nothing has gone wrong and you have not lost anything. There was no answer, so there was no citation list, so there was nothing to be named in. Scoring that as a miss means your visibility number falls every time Google decides a query does not need an AI answer. You would be punished for Google's product decisions.
Trigger rate is worth tracking too, and it is a genuinely different measurement: how often does a question in my category get an AI answer at all. Track both. Never add them.
Search Console will not tell you this
The first instinct is to go looking in Search Console, and the second is to assume you have missed a filter somewhere. You have not. Google has documented why the report cannot answer this question.
Sites appearing in AI features are "included in the overall search traffic in Search Console" and reported "within the 'Web' search type". There is no AI Overview breakout. On top of that, Google's methodology page for the Performance report states two things that make the data unusable for citation counting (Google, Search Console performance report methodology, Help Center article 7042828 on support.google.com):
- Position. "An AI Overview occupies a single position in search results, and all links in the AI Overview are assigned that same position."
- Impression. "Standard impression rules apply. To be counted as an impression, the link must be scrolled or expanded into view."
Read those together. Every citation in a given AI Overview shares one position number with every other citation in it, and none of them register at all unless the user scrolled far enough. You cannot separate an AI Overview citation from an ordinary blue link, and the impressions you do see are conditional on user behaviour you cannot observe.
That is not a gap somebody will patch next quarter. It follows from Google treating AI features as part of Search rather than as a separate surface. If you want the citation number, you have to go and get it.
Step 1: write the question set
The question set decides the answer. Get this wrong and everything downstream is noise.
Our first version of this was wrong in an instructive way. It stored keyword permutations, so a scan of "seo tools" produced strings like seo tools ai, free seo tools ai, seo ai tools list. Nobody types those into anything. They are what a keyword tool emits, not what a person asks when they are about to choose something.
The replacement is a set of buyer-intent templates, ordered by how close they sit to a purchase:
| # | Template | Why it is in the set |
|---|---|---|
| 1 | best {topic} |
The single highest-volume shape of a category question |
| 2 | what is the best {topic} |
The conversational form of the same question |
| 3 | best {topic} for small business |
Segment qualifier, where a small vendor can realistically be named |
| 4 | how to choose {topic} |
Criteria question, usually cites explainers rather than listicles |
| 5 | top {topic} compared |
Comparison intent |
| 6 | which {topic} should i use |
First person, the shape people actually type |
| 7 | best {topic} for beginners |
Segment qualifier again |
| 8 | cheapest {topic} |
Price intent |
| 9 | is {topic} worth it |
Objection, and often the most revealing answer |
Nine questions is a small sample, and a repeatable probe is all it is meant to be. The value comes from asking the same nine every week and watching the citation list change, rather than from the absolute number on any one day.
Step 2: ask Google and read the references
We use Bright Data's SERP API, which fetches a live Google result and returns it as JSON. Two query parameters do the work:
https://www.google.com/search
?q=how+to+choose+rank+tracking+tool
&gl=us&hl=en
&brd_json=1 # give me parsed JSON, not HTML
&brd_ai_overview=2 # try harder to obtain the AI Overview
What comes back has an ai_overview object next to the ordinary organic array. Trimmed to the parts that matter:
{
"organic": [ { "link": "https://zapier.com/blog/best-ai-visibility-tool/" } ],
"ai_overview": {
"rank": 1,
"texts": [
{
"type": "paragraph",
"snippet": "The best AI visibility and Generative Engine Optimization ...",
"links": [ { "text": "Profound", "link": "https://www.tryprofound.com/blog/..." } ]
}
],
"references": [
{ "index": 0, "href": "https://zapier.com/blog/best-ai-visibility-tool/",
"title": "The 8 best AI visibility tools in 2026 - Zapier" }
]
}
}
references[] is the whole point. Those are the real URLs Google attached to the answer, not a model's recollection of who is popular. Two details are worth knowing before you write a parser against it. The prose lives in texts[].snippet, not texts[].text, and it can come back empty even when references[] is fully populated. And each title carries localised interface text appended to it, like "Opens in new tab", which you have to cut off.
If the ai_overview key is absent, the question produced no overview. That is the case you exclude, per the section above.
Step 3: count
For each question that returned an overview, take the set of distinct domains in references[] and check whether yours is in it. Record the position too, since being the first source cited is not the same as being the eleventh.
That is the entire calculation. There is no model, no weighting and no proprietary score. If a tool will not show you which URLs were in the citation list, it is asking you to trust a number it will not source. That is the thing this method exists to avoid.
What we measured: 8 questions, 70 citations, one topic
On 15 August 2026 we ran the nine templates above against the topic "rank tracking tool", Google US in English. Eight of the nine calls completed. One failed at the transport layer, which is a network outcome and not a "no overview" result, so it is excluded rather than counted as either.
Every one of the eight questions that completed returned an AI Overview.
Across those eight answers Google attached 70 citation slots, an average of 8.75 sources per answer, drawn from 40 distinct domains. The spread matters more than the average: best X and top X compared cited six domains each, while best X for beginners cited fourteen. A wider citation list is more room, and the questions with the most room were not the ones with the most obvious commercial intent.
Our earlier reference point holds up next to this. A nine-question scan of stripe.com cost $0.0135 and found stripe.com cited in 44% of the answered questions. Nine questions is nine questions, and we are not going to describe that as a benchmark.
The presence rate we did not expect
Eight of eight is a 100% AI Overview presence rate on this question set. Provider documentation had us expecting something closer to 15 to 20 percent, and that gap is the most useful thing we have measured.
We do not think Google changed. We think the query set explains it. Every template in the list is a commercial, buyer-intent question: best X, what is the best X, best X for small business, how to choose X. These are exactly the queries where a synthesised answer is additive to ten blue links, which is Google's own stated trigger condition. Ask factual, navigational or news questions and the rate will fall.
Two caveats, stated in the same breath as the finding. This is one topic, on one day, from one country and language, with a sample of eight. And "presence" here means the API returned an ai_overview object, which is one provider's rendering of one Google response, not a census of every user's SERP.
The practical consequence is not "AI Overviews are everywhere". It is narrower. On the queries where somebody is choosing what to buy, assume there is an AI answer, and that you are either in it or not.
What this costs
Both of the paths we have paid for, at the providers' own list prices:
| Method | What it does | List price |
|---|---|---|
| Bright Data SERP API | Asks Google live, returns the AI Overview and its citation URLs | $1.50 per 1,000 requests, so $0.0015 a question |
| DataForSEO LLM Mentions | Scans a pre-collected mentions index | $0.10 per request plus $0.001 per row |
We ran on the second for a while and moved to the first. Roughly 67 times cheaper is the headline. The reason we switched was the data: asking Google live returns the real citation URLs from the real answer, while an index scan returns what the index happened to hold. Bright Data also lists a free tier of 5,000 requests a month, which is more scans than most single-site owners will ever run.
In planning terms, a weekly nine-question scan is 468 questions a year, or $0.70. The cost of this measurement is not the reason nobody does it.
What the method cannot see
Stated here rather than in a footnote, because a method's limits belong next to the method.
- It is Google AI Overviews and nothing else. Not ChatGPT, not Perplexity, not Claude, not Gemini's app. Those are separate products with separate retrieval, and asking Google tells you nothing about them. Anyone selling you one number across all of them owes you an explanation of how it was obtained.
- It is one point in time. AI Overviews are regenerated per query and vary. A single scan is a photograph. The trend across weeks is the finding.
- It is one country and language.
glandhlare parameters, so this is a choice you make, not a property of the data. - It is not personalised. A logged-in user in a specific city may see a different answer than an anonymous request from a datacentre IP.
- A citation is not a click. Google reports that clicks from AI Overview pages are "higher quality", meaning users spend more time on the site. Being cited and being visited are still different events, and only one of them is in this measurement.
Doing this continuously is the part that is actually hard
Running this once is a script and an afternoon. The chore is running it every week for a year. You have to store each scan so you can diff the citation list, notice when a competitor enters, and keep the question set stable so the comparison still means something. That is a small data pipeline, and small data pipelines are where good intentions go to die.
That is the job SEOBuilder, our own product, does: it runs the scan on a schedule, keeps the citation URLs, and shows what changed. It asks seven answer engines rather than the one this method covers, because the engines disagree with each other constantly and one of them is not a reading of the others.
If you would rather not pay anybody, the method above is complete. That is deliberate.
What to do next
- Write your nine questions. Use the templates. Do not use keyword permutations.
- Run them once and read the citation lists by hand before you automate anything. You learn more from the first eight answers than from the next eighty.
- Check whether your page is even eligible. Google's rule is short. To be a supporting link, "a page must be indexed and eligible to be shown in Google Search with a snippet". If a
nosnippetdirective sits on that template, nothing else you do matters. Our free answer readiness checker and agent readiness checker run against a URL without a signup. - Read what an extractor sees on your page, not what your browser renders, with the AI content extractor.
- Stop optimising for things that are not signals. Google states that no special markup is needed for AI features, which is worth reading before you spend a sprint on it. We covered what llms.txt actually is and who reads it and which structured data still earns something separately.
- Get the vocabulary straight if you are being sold a package, in SEO vs AEO vs GEO, and check the market in our review of the AI visibility tools.
- Do not touch your robots.txt on the theory that it controls this. It does not work the way most people assume, which we tested in does blocking GPTBot remove you from ChatGPT.
The number you end up with will probably be lower than you hoped. It will also be the first number in this field you can defend when someone asks where it came from.