Sample every tracked query at least five times before you record a number. Across 30 identical AI Overview requests, only 32 of 56 cited publishers (57%) appeared in every repeat, 9 appeared in exactly one, and 4 of the 30 requests returned no AI Overview at all. Scavio's POST /api/v2/google returns the citation list as ai_overview.references[] for 1 credit, so the repeat that turns a guess into a measurement costs a cent.
This matters because almost every AI visibility product takes one reading per query per day and reports the result as a fact. If a third of the citation set is going to move anyway, a chart of that number is partly a chart of the sampling.
What we ran
Six commercial queries, the kind a brand would actually put in a tracker:
best ai visibility toolsbest crm for small businessbest project management softwarehow to track brand mentions in chatgptbest web scraping apibest email marketing platform
Each was sent five times to POST /api/v2/google, same country, same language, minutes apart, with the cache explicitly bypassed. Thirty requests, 30 credits, $0.30.
curl -X POST https://api.scavio.dev/api/v2/google \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "best web scraping api",
"country": "us",
"language": "en",
"resolve_ai_overview": true,
"no_cache": true
}'The no_cache flag is not optional for this kind of work, and it is the first thing to get wrong. Without it the second request comes back off our own result cache with "cached": true, identical to the first by construction. You would measure zero variance and conclude AI Overviews are perfectly stable. That is an artefact of our storage layer, not a finding about Google.
The response carries the citation list directly:
{
"ai_overview": {
"state": "complete",
"references": [
{
"title": "ScrapingBee - The Best Web Scraping API",
"link": "https://www.scrapingbee.com/",
"snippet": "ScrapingBee is the best web scraping API that handles proxies and headless browsers for you...",
"source": "ScrapingBee"
},
{
"title": "The Best AI Web Scraper in 2026? I Tested 3",
"link": "https://www.youtube.com/watch?v=RMDJ23u1FZc&t=65",
"snippet": "Jun 17, 2026 - and I will let the numbers tell the story also full disclosure Thunderbit is sponsoring...",
"source": "YouTube"
}
]
},
"credits_used": 1
}For each query we recorded which publishers the AI Overview cited, then counted how many of the identical repeats cited each one.
Most of the citation set does not survive a repeat
Across all six queries, 56 distinct publishers were cited at least once. Thirty-two of them appeared in every repeat. Fifteen appeared in some. Nine appeared in exactly one of the repeats and were absent from all the others.
If you are the publisher in that last group, a daily tracker will show you flickering in and out of the citation list without anything on your site having changed.
Stability is a property of the query, not of AI Overviews
The averages hide the thing that actually matters for planning a tracker. Look at the two ends of the chart.
best ai visibility tools returned the same seven publishers, in the same order, all five times. Five identical requests produced exactly one distinct citation set. For that query, a single daily reading is genuinely representative.
best web scraping api produced five different citation sets from five identical requests. Thirteen publishers appeared at least once; only four of them showed up in every repeat, and four appeared exactly once. No two readings agreed. For that query, a single daily reading is close to meaningless, and a week of them would look like a story.
Both queries are commercially identical in character. Nothing about the phrasing predicts which one you are dealing with. The only way to know is to sample and look, which means the sample size has to be a per-query decision rather than a setting.
One request in eight had no AI Overview at all
Four of the 30 requests returned no AI Overview block whatsoever, for queries that had one on the other repeats. best email marketing platform produced one on three requests out of five. best crm for small business and best web scraping api each missed once.
This is the failure mode most likely to corrupt a report, because it does not look like noise. It looks like a finding. A tracker that samples once and records "no AI Overview for this query today" is telling you something dramatic and, roughly one time in eight, wrong.
We cannot fully separate Google's own behaviour from upstream fetch variance here, and we are not going to claim otherwise. What we can say is that the absence was not sticky: the same query, re-asked minutes later with nothing changed, produced an AI Overview again.
The instrument breaks too, and ours did
Two of the 30 responses came back with the citation links unresolved. Instead of publisher URLs, every link was a https://www.google.com/goto?url=... redirect token.
It failed wholesale rather than partially. On best project management software all 11 references were unresolved; on how to track brand mentions in chatgpt, 13 of 15. The source field was still correct in both cases, naming Reddit, Zapier, G2, Asana and the rest.
That distinction decides your numbers. Derive the publisher from link and those two runs report google.com cited eleven times and nobody else cited at all. Rerun our stability analysis that way and two of the six queries drop to zero stable publishers, where reading source shows six and eight. The overall figure falls from 57% to 34%. Most of that collapse is our resolution step failing, not Google changing its mind.
This is a defect on our side and it is on the fix list. Until it ships, the mitigation is three lines: if a reference's link resolves to google.com, fall back to source for identity, and re-request if you need the URL. Our own internal AEO monitor prefers link over source and would have recorded those runs wrong, which is how we found it.
What this does not show
Six queries, five repeats, one afternoon, US desktop. That is enough to demonstrate that single-sample tracking carries real error and enough to size it roughly. It is not enough to publish a churn rate for AI Overviews in general, and we are not doing that.
We also did not isolate the cause. Run-to-run variance could be Google's own rollout and datacenter behaviour, the exit node a request happens to land on, or generation-time nondeterminism in the answer itself. Our data cannot tell those apart, and anyone quoting a single explanation with this kind of sample is guessing.
Publisher identity here is the source display name, so two different URLs from the same publisher collapse into one entry. That biases our stability number upward — the real URL-level churn is at least as high as what we measured, not lower.
How to sample properly
The recipe is short:
- Repeat each query at least five times per measurement window, with
no_cache: true. Anything less and you cannot distinguish a change from a draw. - Store every run, not the aggregate. The distribution is the finding; a mean throws it away.
- Treat "no AI Overview" as a value that needs its own repeat before you believe it.
- If a reference's
linkhost isgoogle.com, usesourcefor identity and re-request for the URL. - Measure each query's churn once, then set that query's sample size from its own volatility rather than a global default.
Five repeats a day across 50 tracked queries is 250 calls, or $2.50 a day.
For the mechanics of the endpoint itself, see the AI Overview API comparison. AI Mode is a separate surface with its own citation list and its own numbers, covered in our AI Mode local business citation study. Full parameters are in the API docs.
What you now own, and what you can hand over
You have just read that a credible AI citation tracker is not one request per query. It is five or more, with no_cache set, every run stored rather than averaged, a re-request whenever the block goes missing, and a fallback path for the days the citation links come back as redirect tokens. Then it runs every day, forever, and when Google changes the shape of the block it is your Saturday.
Scavio absorbs the part you should not be building. Fetching the SERP, resolving the AI Overview, the proxy and exit-node layer, and honouring no_cache when you genuinely need a fresh draw all happen on our side. You send a query and read ai_overview.references[]. When Google changes something, it is our on-call.
It costs 1 credit per call, $0.01 per credit, no monthly commitment. The full study above — six queries, five repeats each — cost 30 credits, or 30 cents. Tracking 50 queries at five repeats a day is 7,500 calls a month, or $75.
Start with 50 free credits, no card required — enough to run one of your own queries ten times and see its churn before you decide whether a tracker's number means anything.