Monitor Google AI Overviews
Google AI Overviews sit above the results your SEO program spent years earning — when they appear. That conditional is the whole discipline: an overview shows for some queries, in some countries, on some days, and any monitoring that ignores the appearing part produces numbers that lie. Monitoring AI Overviews properly means tracking two things separately: whether an overview appeared for the query at all, and how your brand fared inside the ones that did. AgentGEO returns each attempt as a record — including the absences — so both denominators come from the same run.
Read this page with an AI
The deliverable is a weekly table per market: presence rate over your query set, mention rate among present overviews, and citation rate among overviews that carried references — with the raw records behind each cell.
Get a free AI-visibility audit → · Read the docs → — No card, no account.
Get my free auditHow AI Overviews monitoring works
- Fetch with the two parameters this surface actually reads.
google_ai_overviewhonourscountryandlanguage— the same query can produce an overview inUSand none inDE, so pin both per market instead of averaging across them. - Record absences as rows, not errors. "No overview appeared" is half your data. Store it with the same date and query as a hit, flagged
present: false. - Compute with two denominators. Presence rate = overviews ÷ queries. Mention and citation rates divide by present overviews only. Blending them turns "Google stopped showing overviews here" into a phantom visibility crash.
import requests
BRAND = "Acme"
QUERIES = ["best crm for small business", "crm with invoicing", "simple crm for freelancers"]
present, mentioned = 0, 0
for query in QUERIES:
resp = requests.post(
"https://api.agentgeo.org/v1/fetches",
json={
"query": query,
"surfaces": ["google_ai_overview"],
"country": "US",
"language": "en",
},
headers={"Authorization": "Bearer ag_live_your_key_here"},
timeout=200,
)
resp.raise_for_status()
for answer in resp.json()["answers"]:
text = answer.get("answerText") or ""
if text.strip():
present += 1
if BRAND.lower() in text.lower():
mentioned += 1
print(f"presence rate: {present}/{len(QUERIES)}")
print(f"mention rate among present: {mentioned}/{present if present else 1}")Never report "brand visible in 12% of AI Overviews" without saying which denominator. 12% of all queries and 12% of appearing overviews are different claims, and the gap between them is usually the interesting finding.
Google is also rolling out AI Mode as a separate, fuller answer surface — same monitoring logic, separate surface key. Add google_ai_mode to the run and keep its rows apart from the overview rows; the two surfaces answer differently for the same query, and that difference is worth seeing.
Let your agent run it
Over MCP, the geo-monitor skill — shipped in agentgeo-mcp — runs a saved query set on demand, keeps the two denominators straight and reports the diff against the previous run. Recurring runs can also live server-side as console schedules, so the records accumulate without a laptop awake.
claude mcp add agentgeo -- npx -y agentgeo-mcp --key ag_live_...Alternatives
Rank trackers have started bolting on AI Overview presence checks — convenient if you already pay for one and country-level presence is all you need. Their gap is usually the record itself: you get a presence flag, not the overview's text and references to analyze. Scraping Google's SERP yourself is the hardest DIY target of the six surfaces — the overview renders conditionally, late, and differently per region.
More use cases
Overview citations feed the same pipeline as AI citation tracking, and presence-aware mention rates roll up into share-of-voice monitoring — see all use cases.
Get your presence and mention baseline per market: Get a free AI-visibility audit →
Get my free audit