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.
Maximum charge per run, measured on the platform after the price was set (run oVVWCFForOLEufQ6k, room for 2 keywords, 5 requested):
2 keywords were delivered and exactly 2 keyword-checked events were charged; the 0.1.5 fix left no extra charge.
Apify then ended the run ("reached its maximum cost"), so that run's change history and run report were not saved.
The 0.1.5 note "the run report counts them" does not hold on the platform. The README now says what happens.
0.1.5 — 2026-09-30
Fixes from an independent review of the README and the code (every claim checked against the test runs).
Maximum charge per run: checked keywords are pushed one at a time, and none once the limit is reached. Before, a keyword that finished after the limit could still be pushed and charged one event over it. The Apify SDK does this on purpose so that the platform ends the run, and an ended run saves neither the change history nor the run report. Such keywords are now not delivered and not billed; the run report counts them (notCheckedChargeLimit, keyword status charge_limit) and the log says so.
targetCitedInLastRuns covers at most historyDepth checks, this one included (it covered historyDepth + 1).
"The Google search failed" no longer says "after a retry": only timeouts, network errors, 429 and 5xx answers are retried.
The run log treats the 10 markets tested so far as measured (it named 3).
README corrections: URLs "where Google links a page"; the changeStatus values not_tracked and not_checked; keywordIndex is 0-based after de-duplication; what "the same URL listed twice" covers; measured numbers updated.
0.1.4 — 2026-09-30
Fixes from the platform test runs of 0.1.3 (337 keywords, including one run of 250 US keywords).
New source field type:page, video, product (a Google Shopping product card: domain google.com, no page URL) or item (an entry of a list in the answer, such as "Dried fruit" from instagram.com). Product cards and list entries were marked isVideo: true before (32 product cards in the 250-keyword run); isVideo is now true for videos only. List entries have an empty siteName (the card repeats the entry's name where the site name would be).
Sources listed twice: a card that one list prefixes ("0.6.7") and another does not ("7") is one source (3 rows of the 250-keyword run showed sources twice with the same rank). A source listed twice under the same URL (a video in the video group and again among the web results) is merged once the URL is known (25 repeats in 19 rows of the 250-keyword run); panel and citation ranks are renumbered without gaps. A video linked once at a moment (&t=…) and once as a whole stays listed twice (12 such videos in that run).
Change tracking: a source whose URL could not be resolved in one of two runs is no longer reported as a gained or lost URL. Two unchanged AI Overviews had been reported changed for this reason. (Histories written before 0.1.4 lack the data for this; the first comparison after the update works as before.)
Google's own sites as sources: a card of developers.google.com, support.google.com … that carries its page URL instead of a redirect token now keeps that URL; before, such cards had none (1 of 5 Google-site cards in the 250-keyword run; 1 in the 20-keyword US test).
"absent" with an empty placeholder: when the page has an empty slot for content Google loads later but no AI Overview heading, the row stays absent and its note says so.
Keywords Google is still generating: the end-of-run retry fetches once instead of twice (the second quick fetch read 1 of 16 such keywords). A keyword that could not get its end-of-run retry now gets its failed row too.
Long runs: no new keyword is started shortly before the run's timeout, so that there is time to save the results, the change history and the run report; SOURCE_REPORT.keywords.notCheckedTimeLimit counts the keywords left out.
Memory: at least 1 GB (a 250-keyword run peaked at 661 MiB).
0.1.3 — 2026-09-30
Fixes from the first platform test runs of 0.1.2 (US, Turkey, Germany; 42 keywords).
Citation rank: on some pages the source panel numbers its sources "0.6.2" while the citation chips say "2". These pages had no rank at all (2 of 19 US rows, 2 of 10 Turkish rows); ids are now compared by their last part.
AI Overviews Google is still generating (served after the page): 3 of 42 keywords were unreadable on two quick fetches. All 3 were readable about 15 minutes later. Such keywords are now checked again at the end of the run, at least a minute after their first fetch; if still not ready they stay failed (not billed) with a plain reason. The run report counts them (keywords.overviewStillGeneratingRetried / …Recovered).
Source URLs: a 403, 429, 5xx or block answer to a redirect token is retried once through another residential IP (2 of 77 tokens got 403 and were not retried).
0.1.2 — 2026-09-30
Source URLs: a Google redirect that points to another Google address (google.com/url?q=…) is read from its parameter, and a "redirect notice" page from its outside link. The platform prefill run of 0.1.1 left 1 of 9 tokens unresolved; its cause could not be reproduced (the AI Overview had changed), so the run report now counts the reasons (sourceUrls.failReasons).
QA/support: an undocumented _debugSaveHtml input stores the pages a run saw in its key-value store.
0.1 — 2026-09-30
First version (private; platform test runs pending).
Google AI Overview per keyword, through the Apify Google SERP proxy in the chosen country and language: overviewState (present, present_no_sources, absent) with a note, the full answer as text and Markdown (the parts Google appends at the end of the page are read too: 29–70% of the answer text in tests), answerHash.
Sources of the source panel: title, site name, domain, snippet, video flag, and the full page URL. Google's redirect tokens (/goto?url=…, /url?…) are resolved with one short request each through a residential proxy (resolveSourceUrls, on by default); the cited page is never visited.
Citation rank: rank (order of first citation in the answer text, "+N" chip companions included), panelRank (source panel order as served), namedInText (the chip names the source).
Your domain and competitors: targetState (cited, competitor_cited, not_cited, no_overview, overview_no_sources), ranks and cited URLs; per competitor cited, citedUrls, rank, panelRank, namedInText. Subdomains match their domain.
Change tracking (trackChanges, on by default): history in the named key-value store google-ai-overview-tracker of the user's account under trackingId (default derived from keywords, country and language); changeStatus (baseline / unchanged / changed), gained and lost domains and URLs, answerChanged, overviewChange, targetChange, targetCitedInLastRuns.
No organic rankings: an includeOrganicResults option was built and removed before release. The page-1 organic list changed almost completely between two fetches of the same query in 9 of 15 measured cases (0–1 of 8 results in common), 8 of them with an identical AI Overview, so a single check's organic position is not a reliable rank. No output field carries organic data.
Batch keywords with de-duplication (case and spacing, locale-aware), maxKeywords (default 100), 5 keywords in parallel, one re-fetch when Google answers with an unreadable page.
Billing: one keyword-checked event per keyword with a definitive result (including "no AI Overview"); failed checks, duplicates and the run report are free. Batch and Standby modes use the same event.