AI Overview tracker: how often Google shows one, and how to track yours
How often does Google show an AI Overview? We checked 40 searches: every how-to and product query, none of the local ones. Plus Python to track citations.
CrawlerData teamPublished 8 min read
Contents
If you track rankings, you also need to know what sits above them. For many searches that is now an AI Overview: a generated answer with a handful of cited sources. Whether yours is among them is something no ranking report tells you.
Most pages about “AI Overview trackers” are product pages or lists of tools. This one gives you two things we could not find elsewhere: data on how often an AI Overview actually appears, from 40 searches we ran ourselves, and working code that tracks whether Google cites your domain.
How we ran the test
We picked 40 searches in five groups, ran each once through the Google Search API with country set to us and device set to desktop, and recorded which features came back. It cost 40 credits. The test was on 16 October 2026.
Please read the numbers as what they are: 40 searches we chose, checked once, in one country on one device. They show how the features behave for different kinds of search. They are not an estimate of how often Google shows an AI Overview across all searches, and a different list would give different percentages.
How often an AI Overview appeared
| Type of search | Searches | AI Overview | People Also Ask | Local pack | Knowledge panel | Top stories |
|---|---|---|---|---|---|---|
| How-to and informational | 10 | 10 | 9 | 0 | 0 | 0 |
| Product and comparison | 10 | 10 | 7 | 0 | 0 | 0 |
| Local business | 8 | 0 | 8 | 8 | 0 | 0 |
| Brand and navigational | 6 | 3 | 1 | 0 | 3 | 0 |
| News and entities | 6 | 2 | 4 | 0 | 4 | 3 |
| All 40 | 40 | 25 (62%) | 29 (72%) | 8 (20%) | 7 (18%) | 3 (8%) |
The searches we used:
- How-to and informational: how to tie a tie, how to boil eggs, how to lower blood pressure, what is inflation, why is the sky blue, how to change a tire, how does a vpn work, what causes headaches, how to learn python, how to start a podcast.
- Product and comparison: best running shoes, best laptop 2026, iphone 16 pro price, best crm software, best vpn, noise cancelling headphones, standing desk, project management software, cheap flights to london, best credit card.
- Local business: pizza in brooklyn ny, dentist in austin tx, plumber in phoenix az, coffee shops in seattle wa, gym in chicago il, car repair in denver co, best sushi in los angeles, hair salon in miami fl.
- Brand and navigational: facebook login, nike, amazon, youtube, weather, gmail.
- News and entities: nvidia stock, taylor swift, bitcoin price, premier league table, openai news, tesla.
What stands out:
- Every how-to and every product search had an AI Overview. That is 20 of 20. If you publish guides or compare products, this is the part of the page your content competes for.
- No local search had one. All 8 returned a local pack and People Also Ask instead. Searches that Google answers with a map are a different game.
- Brand and news searches were mixed.
facebook login,amazonandgmailhad an overview.nike,youtubeandweatherdid not.nvidia stockandbitcoin pricedid, whiletaylor swift,openai news,premier league tableandtesladid not. - The number of cited sources varied a lot. When an overview appeared, it cited an average of 8.6 sources for how-to searches and 5.5 for product searches.
how to learn pythonandcheap flights to londoncited 1 source each, andhow to start a podcastcited 19. - You never get 10 organic results. The count ranged from 4 to 9, with a median of 8, because the features above take space on the page.
An AI Overview is not stable
If you check once and write “we are cited” or “we are not”, you may be recording noise. To see how much the overview moves, we ran 8 of the searches that had one, twice each, about a minute apart:
| Search | Same text both times | Cited domains in both runs |
|---|---|---|
| how does a vpn work | yes | 11 of 11 |
| what is inflation | yes | 9 of 9 |
| best vpn | yes | 13 of 13 |
| how to lower blood pressure | yes | 5 of 5 |
| how to tie a tie | no | 1 of 4 in common |
| best running shoes | no | 1 of 3 in common |
| best crm software | no | 2 of 8 in common |
| iphone 16 pro price | no | 2 of 3 in common |
Four overviews came back word for word the same, and four came back as different text with a different mix of sources. One minute apart.
The consequence is how you should measure. A tracker should check each search several times and report a citation rate, such as “cited in 6 of the last 10 checks”, instead of a single yes or no.
What a tracker has to record
For each search, country and device, on each check:
- Whether an AI Overview appeared.
- Whether your domain was one of its cited sources, and which URL.
- How many sources it cited.
- A fingerprint of the text, so you can see when it changed.
The code
The ai_overview field in the response is null when Google shows no overview, and otherwise holds text and a list of sources, each with a title and link. Put your key in an environment variable:
export CRAWLERDATA_API_KEY="YOUR_API_KEY"
import hashlib
import os
import sqlite3
from datetime import datetime, timezone
from urllib.parse import urlparse
import requests
API_URL = "https://api.crawlerdata.com/v1/jobs"
HEADERS = {"Authorization": f"Bearer {os.environ['CRAWLERDATA_API_KEY']}"}
def google_search(query, country="us", device="desktop"):
body = {
"endpoint": "google-search",
"params": {"query": query, "country": country, "device": device},
"queue": "live",
}
resp = requests.post(API_URL, json=body, headers=HEADERS, timeout=180)
resp.raise_for_status()
data = resp.json()
if data["job"]["status"] != "completed":
raise RuntimeError(data["job"]["error"])
return data["result"]
def host(link):
return (urlparse(link).hostname or "").removeprefix("www.")
def check_ai_overview(query, domain, country="us", device="desktop"):
"""Does Google show an AI Overview for this query, and does it cite `domain`?"""
aio = google_search(query, country, device)["ai_overview"]
if not aio:
return {"has_overview": False, "cited": False, "sources": 0, "cited_urls": [], "text_hash": None}
cited_urls = [s["link"] for s in aio["sources"]
if host(s["link"]) == domain or host(s["link"]).endswith("." + domain)]
return {
"has_overview": True,
"cited": bool(cited_urls),
"sources": len(aio["sources"]),
"cited_urls": cited_urls,
"text_hash": hashlib.sha256(aio["text"].encode()).hexdigest()[:12],
}
Store every check, and compute the rate over the last N:
def init_db(path="aio.db"):
db = sqlite3.connect(path)
db.execute(
"""CREATE TABLE IF NOT EXISTS checks (
checked_at TEXT, query TEXT, country TEXT, device TEXT, domain TEXT,
has_overview INTEGER, cited INTEGER, sources INTEGER, text_hash TEXT)"""
)
return db
def record(db, query, domain, country="us", device="desktop"):
r = check_ai_overview(query, domain, country, device)
db.execute(
"INSERT INTO checks VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)",
(datetime.now(timezone.utc).isoformat(timespec="seconds"), query, country, device, domain,
int(r["has_overview"]), int(r["cited"]), r["sources"], r["text_hash"]),
)
db.commit()
return r
def citation_rate(db, query, domain, last=10):
"""Share of the last N checks where an AI Overview showed AND cited the domain."""
rows = db.execute(
"""SELECT has_overview, cited FROM checks
WHERE query = ? AND domain = ? ORDER BY checked_at DESC LIMIT ?""",
(query, domain, last),
).fetchall()
if not rows:
return None
return {"checks": len(rows), "overview_shown": sum(r[0] for r in rows), "cited": sum(r[1] for r in rows)}
We ran it twice over three searches, each paired with a well-known site on that topic that we guessed might be cited. This is what it printed:
what is inflation | investopedia.com | has_overview True, cited False, 10 sources
how to lower blood pressure | mayoclinic.org | has_overview True, cited True, 7 sources
cited URL: https://www.mayoclinic.org/diseases-conditions/high-blood-pressure/in-depth/high-blood-pressure/art-20046974
pizza in brooklyn ny | yelp.com | has_overview False, cited False, 0 sources
citation_rate: what is inflation -> {'checks': 2, 'overview_shown': 2, 'cited': 0}
citation_rate: blood pressure -> {'checks': 2, 'overview_shown': 2, 'cited': 2}
citation_rate: pizza in brooklyn -> {'checks': 2, 'overview_shown': 0, 'cited': 0}
Those three results show the three outcomes a tracker has to tell apart: an overview that cites you, an overview that does not, and no overview at all. They need different responses. Being left out of an overview is a content question. No overview at all means there is nothing to win for that search.
For your own site, replace the pairs with your queries and your domain, and run record() on a schedule. Tracking subdomains works the same way, because the match accepts the domain and any subdomain of it.
How often to check, and what it costs
Because the overview moves, run each important search several times a day and read the rate over a week or two. Each check is 1 credit, on every queue and for desktop or mobile. Starter is $1.00 per 1,000 requests and the largest pack $0.30 per 1,000, see pricing.
| What you track | Checks a month | Credits | At $1.00 per 1,000 | At $0.30 per 1,000 |
|---|---|---|---|---|
| 50 queries, 3 checks a day | 4,500 | 4,500 | $4.50 | $1.35 |
| 200 queries, 3 checks a day | 18,000 | 18,000 | $18.00 | $5.40 |
| 200 queries, 3 checks a day, desktop and mobile | 36,000 | 36,000 | $36.00 | $10.80 |
Failed requests are not charged. For large lists, send the jobs to the fast or regular queue and collect them later. The batch code is in Get Google search results as JSON with Python.
Check one search for free
If you want to look at a single search before building anything, our free AI Overview checker runs one check without an account and shows the overview and its sources for the country and device you pick.
Next steps
You have the numbers on where AI Overviews appear, a reason to track a rate instead of a snapshot, and code that records both. Pair it with rank tracking to see your position and your citations for the same keywords, and see SEO rank tracking for how teams run this for clients. The Google Search API page lists every parameter with a full example response.
Frequently asked questions
- What is an AI Overview tracker?
- A tool that checks Google searches on a schedule and records whether an AI Overview appears, which pages it cites and whether your domain is among them. Because the overview changes between checks, a tracker records many checks and reports a rate, not a single yes or no.
- How often does Google show an AI Overview?
- It depends on the type of search. In our October 2026 test of 40 US desktop searches, an AI Overview appeared for 25 (62%): all 10 how-to searches, all 10 product and comparison searches, 3 of 6 brand searches, 2 of 6 news and entity searches, and none of the 8 local searches. It is a small, hand-picked sample, not a measure of Google as a whole.
- Why does the AI Overview change between checks?
- Google generates it on demand. In our test, 8 queries checked twice about a minute apart gave identical overviews for 4 and different text for the other 4. For that reason, track a rate over many checks instead of trusting one.
- How can I check whether my domain is cited in an AI Overview?
- Request the search with the CrawlerData Google Search API and read ai_overview.sources. Each source has a title and link, so you match the link's host against your domain. The code in this guide does that and stores every check.
- Does the AI Overview differ by device and country?
- It can. Set device and country on each request and store them with every check, so you compare like with like. Both cost 1 credit.
- How much does AI Overview tracking cost?
- 1 credit per check. Tracking 50 queries three times a day is 50 × 3 × 30 = 4,500 credits a month: $4.50 at the Starter rate of $1.00 per 1,000 requests, and less on larger packs.
- AI Overview tracker
- AI Overviews
- SERP features
- SEO
- Python
- Data