Google AI Overview Tracker: Citations, Rank & Changes avatar

Google AI Overview Tracker: Citations, Rank & Changes

Pricing

from $8.00 / 1,000 keyword checkeds

Go to Apify Store
Google AI Overview Tracker: Citations, Rank & Changes

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

Berkan Kaplan

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

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:

GroupFields
Keyword & marketkeyword, keywordIndex (0-based position in your list after duplicates are removed), country, language, checkedAt, searchUrl
AI OverviewoverviewState (present, present_no_sources, absent), overviewNote, answerText, answerMarkdown (headings and bullets kept), answerHash, answerChars
Your domaintargetState (cited, competitor_cited, not_cited, no_overview, overview_no_sources), targetRank, targetPanelRank, targetNamedInText, targetCitedUrls
CompetitorscompetitorsCited, competitors[] (per domain: cited, citedUrls, rank, panelRank, namedInText)
SourcessourcesCount, 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 runchangeStatus (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
StatuscheckStatus (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

  1. One Google search per keyword through Apify's Google SERP proxy, from the country you choose (gl and hl set to your country and language). Five keywords run in parallel.
  2. 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.
  3. 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=…). With resolveSourceUrls on, 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", domain google.com) but link to no page, so they have no URL.
  4. Your domain and competitors match by domain, subdomains included: semrush.com matches www.semrush.com and blog.semrush.com.
  5. 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).
  6. 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 as checkStatus: "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_REPORT in 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. null means 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 every rank is null.
  • 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: true when the source is the one a chip shows by name; false otherwise (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-tracker of your Apify account, one record per trackingId (record key tracking-<trackingId>). Named key-value stores are kept until you delete them. Delete the record to start over.
  • Leave trackingId empty 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 own trackingId (for example acme-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 unchanged or changed with the domains and URLs gained and lost, answerChanged, overviewChange (appeared / disappeared), targetChange, and targetCitedInLastRuns over the last historyDepth checks (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 targetCitedInLastRuns rather 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

FieldDefaultDescription
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.
countryusWhich country's Google to search (50 countries in the list).
languagecountry's main languageGoogle's interface language.
trackChangestrueCompare with the previous run of the same tracking ID.
trackingIdderivedHistory name, for example a client or project.
historyDepth10Checks kept per keyword (2–30).
resolveSourceUrlstrueResolve Google's redirect tokens to full source URLs.
maxKeywords100Upper 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_cited rows are the keywords where Google answers with someone else's page.
  • Change alerts: filter targetChange = "lost" or changeStatus = "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_REPORT say 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.
  • changeStatus is always baseline: the tracking ID changed between runs (the keyword list changed and no trackingId was set), or the history store was deleted.
  • 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 (siteName is 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.