Google AI Overview Tracker: Citations, Rank & Changes
Pricing
from $8.00 / 1,000 keyword checkeds
Google AI Overview Tracker: Citations, Rank & Changes
Track if Google's AI Overview cites your domain or your competitors for your keywords, by country and language: the full answer, every source with its full URL, citation rank, and the citations gained or lost since your last run. Batch keywords, no Google account.
Pricing
from $8.00 / 1,000 keyword checkeds
Rating
0.0
(0)
Developer
Berkan Kaplan
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Share
Track Google's AI Overview for your keywords: whether it appears, the full answer, every cited source with its full URL (where Google links a page), whether it cites your domain or your competitors and at which citation rank, and what changed since your last run (citations gained and lost, "cited in 3 of the last 5 runs").
Built for SEO and GEO agencies, in-house SEO and content teams, and tools that report AI search visibility. One row per keyword, 50 countries and 26 interface languages, batch keyword lists. No Google account, no API key, no browser: searches go through Apify's Google SERP proxy.
Quick start (API)
curl -X POST "https://api.apify.com/v2/acts/foxlabs~google-ai-overview-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"keywords": ["how to do keyword research", "best seo tools for small business"], "targetDomains": ["semrush.com"], "competitorDomains": ["ahrefs.com", "moz.com"], "country": "us", "trackingId": "seo-tools-us"}'
Run the same input again later (daily or weekly, for example with an Apify schedule) and every checked keyword tells you what changed since the previous run.
What you get
One row per keyword:
| Group | Fields |
|---|---|
| Keyword & market | keyword, keywordIndex (0-based position in your list after duplicates are removed), country, language, checkedAt, searchUrl |
| AI Overview | overviewState (present, present_no_sources, absent), overviewNote, answerText, answerMarkdown (headings and bullets kept), answerHash, answerChars |
| Your domain | targetState (cited, competitor_cited, not_cited, no_overview, overview_no_sources), targetRank, targetPanelRank, targetNamedInText, targetCitedUrls |
| Competitors | competitorsCited, competitors[] (per domain: cited, citedUrls, rank, panelRank, namedInText) |
| Sources | sourcesCount, sourceDomains, sources[] (per source: rank, panelRank, namedInText, title, siteName, channel (video channel), domain, url, urlSource (page = link was on the page, goto / url-redirect = resolved from a Google redirect, empty = not resolved), origin (the site's home address), snippet, type (page, video, product = a Google Shopping product card, which has no page URL, item = an entry of a list in the answer, linked to its source page), isVideo, matches = target / competitor) |
| Changes vs last run | changeStatus (baseline, unchanged, changed; not_tracked when trackChanges is off, not_checked on failed rows), targetChange (gained, lost, still_cited, still_not_cited), targetCitedInLastRuns ("3/5"), gainedDomainsText, lostDomainsText, changes (gained and lost domains and URLs, answerChanged, overviewChange, previousCheckedAt), trackingId |
| Status | checkStatus (ok or failed), error |
...Text fields repeat a list as one comma-separated cell for CSV and Excel.
Sample output
A real row from a test run on 2026-09-30 (how to stop snoring, US, target mayoclinic.org, competitors clevelandclinic.org and webmd.com, second run of the same tracking ID; trimmed: 3 of 10 sources shown, some source fields left out, answer shortened):
{"keyword": "how to stop snoring","country": "us","language": "en","checkStatus": "ok","overviewState": "present","targetDomains": ["mayoclinic.org"],"targetState": "cited","targetRank": 7,"targetPanelRank": 1,"targetNamedInText": true,"targetCitedUrls": ["https://www.mayoclinic.org/diseases-conditions/snoring/diagnosis-treatment/drc-20377701"],"competitorsCited": ["clevelandclinic.org", "webmd.com"],"competitors": [{ "domain": "clevelandclinic.org", "cited": true, "citedUrls": ["https://my.clevelandclinic.org/health/diseases/15580-snoring"], "rank": 1, "panelRank": 3, "namedInText": true },{ "domain": "webmd.com", "cited": true, "citedUrls": ["https://www.webmd.com/sleep-disorders/understanding-snoring-prevention"], "rank": 4, "panelRank": 6, "namedInText": false }],"sourcesCount": 10,"sourceDomainsText": "mayoclinic.org, sleepbetterillinois.com, my.clevelandclinic.org, es.cvs.com, stanfordhealthcare.org, webmd.com, youtube.com, gpdentalteam.com","sources": [{ "rank": 7, "panelRank": 1, "namedInText": true, "title": "Snoring - Diagnosis and treatment - Mayo Clinic", "siteName": "Mayo Clinic", "domain": "mayoclinic.org", "url": "https://www.mayoclinic.org/diseases-conditions/snoring/diagnosis-treatment/drc-20377701", "urlSource": "page", "type": "page", "isVideo": false, "matches": "target" },{ "rank": 4, "panelRank": 6, "namedInText": false, "title": "How To Prevent Snoring While You Sleep", "siteName": "WebMD", "domain": "webmd.com", "url": "https://www.webmd.com/sleep-disorders/understanding-snoring-prevention", "urlSource": "goto", "type": "page", "isVideo": false, "matches": "competitor" },{ "rank": 3, "panelRank": 10, "namedInText": false, "title": "Silence the Roar: 10 Game-Changing Tips to Tackle Snoring", "siteName": "YouTube", "channel": "Medical Centric Podcast", "domain": "youtube.com", "url": "https://www.youtube.com/watch?v=IU4TNTyJ6lo&t=14", "urlSource": "page", "type": "video", "isVideo": true, "matches": null }],"answerText": "To stop snoring, change your sleep position, avoid alcohol before bed, and treat nasal congestion.\nSleep Adjustments\n- Sleep on your side instead of your back to keep your airway open.\n…","answerHash": "0fa06f8b405a8a76","changeStatus": "unchanged","targetChange": "still_cited","targetCitedInLastRuns": "2/2","trackingId": "qa-verify-014","checkedAt": "2026-09-30T21:49:58.748Z"}
How it works
- One Google search per keyword through Apify's Google SERP proxy, from the country you choose (
glandhlset to your country and language). Five keywords run in parallel. - The AI Overview is read in full. Google puts a large part of the answer at the end of the page and moves it into place with JavaScript. On 58 of 58 pages saved from our platform test runs, 14–79% of the answer text sat there (median 53%). The Actor reads those parts too; a parser that skips them loses about half of the answer.
- Sources are the cards of the AI Overview's source panel, with title, site name, domain and snippet. Google links most of them through redirect tokens (
/goto?url=…). WithresolveSourceUrlson, each token is turned into the real page URL with one short request through a residential proxy. The source page itself is never visited. When Google lists the same URL twice (a video in the video group and again among the web results), it becomes one source once the URL is known; a video can still appear twice when one card links a moment of it (&t=…) and the other the whole video. Google Shopping product cards are sources too (type: "product", domaingoogle.com) but link to no page, so they have no URL. - Your domain and competitors match by domain, subdomains included:
semrush.commatcheswww.semrush.comandblog.semrush.com. - Change tracking keeps the last checks of every keyword in your own Apify account and compares each check with the previous one (see Change tracking).
- Nothing is dropped silently. A keyword with no AI Overview comes back as
overviewState: "absent"with a note. Sometimes Google is still generating the AI Overview when the page is served and loads it later; such a keyword is fetched again right away and, if needed, once more at the end of the run (at least a minute later). A keyword that still could not be checked (the search failed, Google answered with a page that cannot be read, or the answer was still being generated) comes back ascheckStatus: "failed"with the reason, and is not billed. In our 250-keyword test this was 6% of the keywords (see Performance). If the run gets close to its timeout, it stops starting new keywords so that there is time to save the results, the change history and the report. If your maximum charge per run is reached, Apify ends the run right away: the keywords delivered until then are kept and billed, but that run's change history and run report are not saved. The run report (SOURCE_REPORTin the run's key-value store) lists every keyword's status, duplicates skipped and request counts.
Citation rank: rank, panelRank, namedInText
rank: the order in which the answer text first cites a source (1 = first cited). Google shows citations as chips after the sentences they support ("Mailchimp +3"); the chip names one source and hides the others behind "+N". Both count, in the order they appear.nullmeans the source is listed in the source panel but no sentence cites it: in our 250-keyword test that was 7% of the sources, mostly videos at the end of the panel, and on 58 saved pages none of the 79 such sources appeared in any citation of the answer. Some answers have no citations at all; then everyrankisnull.panelRank: the source's position in the source panel as Google served it for this check (counted after a URL listed twice is merged).namedInText:truewhen the source is the one a chip shows by name;falseotherwise (only among the "+N" sources, or not cited).
Why two ranks: when we fetched the same AI Overview with two different browser identities, the answer and the 7 sources were identical, but the panel order changed (5 of 7 sources moved). The text order stayed the same. rank follows the answer; panelRank follows the page layout. Ranks compare only within the same answer (answerHash): when Google rewrites the answer, the order starts over.
Change tracking
- The history lives in the key-value store
google-ai-overview-trackerof your Apify account, one record pertrackingId(record keytracking-<trackingId>). Named key-value stores are kept until you delete them. Delete the record to start over. - Leave
trackingIdempty and the Actor derives one from the keyword list, country and language (shown in every row and in the run report). Adding or removing a keyword then starts a new history, so set your owntrackingId(for exampleacme-us) for long-term tracking. Keywords are stored per country and language, so one ID can hold several markets. - The first run of a keyword returns
changeStatus: "baseline"with a note that there is no previous run yet. - Later runs return
unchangedorchangedwith the domains and URLs gained and lost,answerChanged,overviewChange(appeared/disappeared),targetChange, andtargetCitedInLastRunsover the lasthistoryDepthchecks (default 10). - One check is one sample. When we ran the same 39 keywords twice, 16 to 28 minutes apart (US, Turkey, Germany), 8 answers had been rewritten and 1 AI Overview had disappeared. Watch
targetCitedInLastRunsrather than a single change. - A source whose URL could not be resolved in one of the two runs is not reported as a gained or lost URL.
Input
| Field | Default | Description |
|---|---|---|
keywords | — | One search per line. Duplicates (case and spacing ignored) are skipped and listed in the run report. |
targetDomains | — | Your site(s). Leave empty to only collect AI Overviews. |
competitorDomains | — | Competitors to check on the same keywords. |
country | us | Which country's Google to search (50 countries in the list). |
language | country's main language | Google's interface language. |
trackChanges | true | Compare with the previous run of the same tracking ID. |
trackingId | derived | History name, for example a client or project. |
historyDepth | 10 | Checks kept per keyword (2–30). |
resolveSourceUrls | true | Resolve Google's redirect tokens to full source URLs. |
maxKeywords | 100 | Upper limit of keywords per run. |
Example inputs (copy & paste)
Weekly client report, US:
{ "keywords": ["best crm for small business", "crm pricing comparison", "how to choose a crm"], "targetDomains": ["hubspot.com"], "competitorDomains": ["salesforce.com", "zoho.com", "pipedrive.com"], "country": "us", "trackingId": "crm-client-us" }
A Turkish market (one run per country; the same trackingId can hold both):
{ "keywords": ["diş eti çekilmesi neden olur", "implant tedavisi ne kadar sürer"], "country": "tr", "targetDomains": ["medipol.com.tr"], "competitorDomains": ["memorial.com.tr", "acibadem.com.tr"], "trackingId": "dental-tr" }
One-off look at who Google cites, no history:
{ "keywords": ["what is generative engine optimization"], "trackChanges": false }
Use cases
- AI Overview visibility reports: per keyword, are you cited, where, with which page, and which competitors are cited instead.
- Content gaps:
competitor_citedrows are the keywords where Google answers with someone else's page. - Change alerts: filter
targetChange = "lost"orchangeStatus = "changed"after each scheduled run. - Source research: which domains and pages Google trusts for a topic, in each country and language.
Performance & coverage
Measured on the Apify platform on 2026-09-30, mainly in one run of 250 US keywords (questions about health, money, home, tech, travel, cooking, business, careers, products and science, plus 5 brand names such as "gmail"):
- AI Overview found: 231 of the 235 keywords that could be read had an AI Overview (1 of them without sources); 4 had none, 2 of them brand names. Brand searches are mixed: of 16 checks across our tests ("facebook login", "amazon", "gmail", "youtube" …), 7 had an AI Overview, 3 were still being generated and 6 had none (all 5 checks of "youtube").
- Still being generated: 25 of 250 keywords came back with an AI Overview Google was still generating. 10 were read when fetched again (6 right away, 4 at the end of the run); 15 (6%) stayed unreadable and came back as
failed, not billed. Run those keywords again later. - Speed: the 250 keywords took 24 minutes (5 in parallel; one Google search took 7 s at the median). Runs of 10 to 20 keywords took 54 to 140 seconds.
- Full source URLs: 1,979 of the 1,984 sources that link to a page (99.7%); the other 32 sources were Google Shopping products, which have no page URL.
- Source details: title, domain and snippet for 2,016 of 2,016 sources.
- Citation rank (
rank): 93% of the sources were cited in the answer text; the others are listed only in the source panel. - The source counts of this run were taken before sources listed twice under the same URL were merged (25 such repeats).
- Answer text: in a sample of 29 answers, all 337 sentences were found in the page Google served (9 of them are table rows, whose cells were found one by one).
- Countries tested: United States, United Kingdom, India, Japan, Brazil, France, Spain, Germany and Turkey, each with an AI Overview. Google shows AI Overviews only in some countries and languages; elsewhere the result is
absent.
Pricing
Pay per event. Each keyword checked with a definitive result (AI Overview present, present without sources, or no AI Overview) is one keyword-checked event; "no AI Overview" is tracking data too. Keywords that could not be checked (checkStatus: "failed"), duplicates and the run report are free, and full source URLs and change tracking are included. The price per event is on the Actor's Pricing tab. When your maximum charge per run is reached, Apify ends the run: the keywords delivered until then are billed and nothing more is charged (in our test with room for 2 keywords, 2 were delivered and 2 billed). That run's change history and run report are not saved, so set the maximum charge above what the keyword list needs.
FAQ
Does it work in my country? Any country in the list can be selected. We have tested the United States, the United Kingdom, India, Japan, Brazil, France, Spain, Germany and Turkey. If Google does not show AI Overviews in a market, the keywords come back as absent.
Why does the AI Overview in my browser look different? Google rewrites AI Overviews often (see Change tracking). This Actor searches without a Google account from an IP in the chosen country; your browser may be signed in or in another location.
Why is rank null for a source? The source is in the source panel, but no sentence of the answer cites it.
How do I keep my history when I edit the keyword list? Set trackingId yourself.
Does it report organic rankings? No. We measured it: when the same query was fetched twice, the page-1 organic list changed almost completely in 9 of 15 cases (0 or 1 of 8 results in common), and in 8 of those 9 the AI Overview was identical. A single check's organic position is not a reliable ranking, so this Actor reports the AI Overview only. Use a rank tracker for organic rankings.
Does it cover Google AI Mode? No. AI Mode needs a real browser and fails often on proxy IPs; in our tests it cost several times the market price per answer, so it is not offered.
Troubleshooting
checkStatus: "failed"with "The Google search failed": a network, proxy or Google error (timeouts, network errors, rate limits and server errors are retried once). Run the keyword again.checkStatus: "failed"with "Google was still generating this AI Overview": Google builds some AI Overviews after the page is served, and this Actor reads the page as served. In our 250-keyword test 6% of the keywords stayed in this state through the run, even when they were fetched again up to 20 minutes later; these rows are not billed. Run them again later.overviewState: "absent"with a note about an empty placeholder: the page had a slot for content Google loads after the page, but no AI Overview heading. We saw this for "youtube".- A run with a long keyword list ends before the last keywords: it stopped near its timeout to save the results and the history (the log and
SOURCE_REPORTsay how many were not checked). Raise the timeout or split the list. - Every row
absent: Google may not show AI Overviews in that country or language, or for those keywords. changeStatusis alwaysbaseline: the tracking ID changed between runs (the keyword list changed and notrackingIdwas set), or the history store was deleted.
Notes, limits & legal
- The Actor reads Google's public search results page. It does not log in and does not visit the cited pages.
- AI Overviews change often; one check is one sample.
- Google Shopping product cards have no page URL; list entries in the answer have no site name (
siteNameis empty), only their domain. - A Standby (real-time API) mode is built into the code (
GET /check) and described in the OpenAPI file; this listing runs in batch mode. - You are responsible for how you use the data, in line with the terms of the sites involved and applicable law.
Support
Open an issue on the Issues tab with the run ID and the input, or write to info@foxlabs.com.tr.
Changelog
See ./CHANGELOG.md.