Google AI Overview Scraper - AI Overview Tracker & Citations
Pricing
from $9.99 / 1,000 ai overviews
Google AI Overview Scraper - AI Overview Tracker & Citations
Get Google's AI Overview for any search query as JSON: the full answer text, the answer split into headings and lists with per-block citations, and every source page it cites. Track which sites Google quotes for SEO, AEO and brand monitoring. Pay only for queries that return an overview.
Google AI Overview Scraper: the AI answer above the search results
This google ai overview scraper returns the AI-generated summary Google now places above the blue links, as structured JSON. For every query you get the full answer text, the same answer broken into headings, paragraphs and lists with the citations attached per block, and every source page Google grounded the answer on.
Google can return the overview in the search page or load it separately. This actor reads both forms and returns the finished answer, one dataset row per query. Use it from the Apify Store with one click, or as a Google AI Overview API from your own code through the Apify API.
What you get
- The complete answer text as one plain string (
answer_text), ready for a spreadsheet cell, a prompt, or a diff against last week's run. - The answer with its structure intact (
answer_blocks): headings stay headings, bullet lists stay lists, and each block carries the citations that belong to it. This is what lets you attribute a specific claim to a specific source instead of guessing. - Every cited source page (
sources) with the site name, domain, page title, the snippet Google pulled, the source homepage URL, a favicon and a thumbnail where one exists. - The distinct domains (
source_domains) and their count, so a visibility query is a single field lookup rather than a parse. - Products the answer pointed at (
products) with title, URL, image and Google's own product identifiers, on shopping-shaped queries. - Links inside the answer body (
links) with Google's redirect already resolved to the real destination. - An honest present/absent flag (
answered,ai_overview_present). Google does not write an overview for every query. Those rows come back marked rather than silently empty, and you are not billed for them.
Why scrape Google AI Overviews
The overview sits above the first organic result and answers the question in place. When it does, the click that used to go to the page that ranked first often does not happen at all. Rank tracking still reports position one while the traffic behind it drops, and nothing in a rank report explains the gap. The only way to see it is to read the overview itself and check whether your domain is among the sources it cites.
That check has become its own discipline. Being cited by the AI answer is now a distinct outcome from ranking, with its own winners: pages that answer a question cleanly and get quoted, rather than pages that merely rank. The overview also draws on sources that do not rank on page one at all, which means a competitor invisible in your rank report can be the one Google is quoting.
Tracking it needs the answer and its sources together. A screenshot tells you an overview exists; it does not let you count how often a domain appears across five hundred queries, or notice that the answer's wording changed while the source list stayed the same. Structured output turns both into a query.
How to use the Google AI Overview Scraper
- Open the actor in the Apify Store and click Try for free.
- Paste your search queries into Search queries, one per line. Questions and comparisons ("is X worth buying", "X vs Y") draw an overview most reliably.
- Pick the Country and Language of the market you want to see.
- Start the run. Each query becomes one dataset row; download it as JSON, CSV or Excel, or read it from the dataset API.
- To track AI Overview citations over time, save the input as a task and put it on a schedule. Every run adds a fresh snapshot of the answer and its sources.
To call it as an API, start a run with the same input fields through the Apify
API (POST /v2/acts/s-r~google-ai-overview-scraper/run-sync-get-dataset-items)
and the rows come back in the response.
Input
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
queries | array of strings | yes | — | One search query per line. |
country | string | no | us | Two-letter country code. Sets the market the answer is written for. |
language | string | no | en | Two-letter language code for the answer. |
retries | integer | no | 3 | Extra rounds to spend when a query comes back without an overview. Range 0 to 5. |
Questions and comparisons draw an overview most reliably. A bare brand or
product name often does not get one at all; that is reported as
answered: false rather than retried indefinitely.
Output
One row per query. This field selection comes from an actual response captured on 2 October 2026; the complete row also includes blocks, sources, links, products and citations.
{"query": "is the lego 10313 worth buying","country": "us","language": "en","answered": true,"ai_overview_present": true,"answer_text": "Yes, the LEGO Icons Wildflower Bouquet 10313 is widely considered worth buying, earning praise from reviewers and fans as one of the best botanical sets LEGO has released.\n\nWhy It Is Worth Buying\n\nIf you're considering buying it, let me know:\n\n- Are you planning to display it on its own or combine it with set 10280?\n- Do you already have a vase picked out?\n\nI can share tips on the best ways to arrange and display them!","answer_block_count": 5,"source_domains": ["bestbuy.com","brickingaround.com","brickset.com","rebrickable.com","reddit.com","target.com","youtube.com"],"source_count": 10,"attempts": 1,"error": null,"fetched_at": "2026-10-02T03:35:01Z","duration_seconds": 8.56,"response_bytes": 482451}
The new citations list contains URL, title, domain and position. Existing
sources[].url values retain the source homepage; sources[].page_url adds a
page destination when Google supplies a readable URL. If the redirect cannot
be decoded, citations[].url falls back to the source URL. The original redirect
remains available in answer_blocks[].citations[].goto_url.
Answer blocks and their citations
answer_blocks is an array of objects in answer order. Each block has a type
and a citations array, which can be empty. Text and heading level appear only
on the block types that use them; list entries are strings in items.
| Field | JSON type | Meaning |
|---|---|---|
answer_blocks[].type | string | paragraph, heading or list. |
answer_blocks[].text | string | Paragraph or heading text, with citation chips removed. Present on paragraphs and headings. |
answer_blocks[].level | integer | Heading level, defaulting to 3 when Google omits it. Present only on headings. |
answer_blocks[].items | array of strings | List entries in their original order. Present only on lists. |
answer_blocks[].citations | array of objects | Citation chips attached to this block. |
answer_blocks[].citations[].uuid | string | Google's identifier for the citation chip. |
answer_blocks[].citations[].site_name | string | The chip label or the name of its first matching source card. |
answer_blocks[].citations[].goto_url | string | The absolute Google redirect URL carried by the chip. |
answer_blocks[].citations[].domains | array of strings | Sorted source domains matched to this chip. |
Source cards
sources is an array of source-card objects. The original fields below are
always strings, including an empty string when Google does not supply a value.
The additional page_url field is optional.
| Field | JSON type | Meaning |
|---|---|---|
sources[].site_name | string | The source's displayed site name. |
sources[].domain | string | The source domain without the URL scheme or leading www.. |
sources[].title | string | The title displayed on the source card. |
sources[].snippet | string | The excerpt displayed on the source card. |
sources[].url | string | The source homepage URL, falling back to the card URL when no homepage is supplied. |
sources[].favicon | string | The site's favicon URL. |
sources[].thumbnail | string | The card's thumbnail URL, or an empty string. |
sources[].citation_id | string | The matching citation chip's identifier, or an empty string. |
sources[].page_url | string | The cited page's destination URL, present when it can be read. |
Links inside the answer
links is an array of objects, deduplicated by link text and URL.
| Field | JSON type | Meaning |
|---|---|---|
links[].text | string | The link text in the answer. |
links[].url | string | The destination URL or Google shopping link. A Google redirect remains when its destination cannot be read. |
links[].kind | string | site for a source link or product for a shopping link. |
Products mentioned in the answer
products is an array of objects combining shopping links and product cards
by catalogue identifier. Every field is a string; identifiers stay strings
even when they contain only digits. Missing values are empty strings.
| Field | JSON type | Meaning |
|---|---|---|
products[].title | string | The displayed product name. |
products[].url | string | The Google shopping destination for the product. |
products[].image | string | The product-card image URL, or an empty string. |
products[].catalog_id | string | Google's catalogue identifier from the shopping link. |
products[].product_id | string | Google's product document identifier. |
products[].merchant_id | string | Google's merchant identifier. |
products[].cluster_id | string | Google's product cluster identifier. |
Citations across the answer
The row-level citations array provides source destinations in order of
appearance. It complements the source cards and the per-block citation chips.
| Field | JSON type | Meaning |
|---|---|---|
citations[].url | string | The cited page URL, decoded from Google's redirect when possible, otherwise the source URL. |
citations[].title | string | The cited source title. |
citations[].domain | string | The cited source domain. |
citations[].position | integer | Position in the citation list, starting at 1. |
When a query returns no answer, answer_blocks, sources, links, products
and citations are empty arrays. The row is still returned with
answered: false; missing answers do not change these fields to null.
Use it as an AI Overview tracker
AI Overview tracking comes down to one question asked on repeat: for my
queries, does Google's answer cite my site, and who does it cite instead? Keep
a fixed list of queries, run it on an Apify schedule (daily or weekly), and
store each run's rows. Compare source_domains between runs to see when a
domain enters or leaves the answer, and use answered to see how many of your
queries show an overview at all. Because rows without an overview are free,
a tracker that covers queries where Google sometimes shows no answer costs
only what it actually returned.
Use cases
Answer engine optimisation. Feed in the queries you care about and record
which domains the overview cites for each one. Run it weekly and the citation
set becomes a time series: you can see the week a competitor entered the answer,
the week you dropped out, and whether a rewrite moved you back in. source_domains
is the field that carries the whole analysis.
Explaining a traffic drop that rank tracking cannot. When impressions hold and clicks fall, pull the overview for the affected queries. If your page is cited, the answer is satisfying the intent in place. If it is not cited but a competitor is, that is a different problem with a different fix. Either way you have the evidence in an afternoon rather than a quarter.
Competitive and category monitoring. Run the head terms for a category and count domain frequency across the whole set. The domains that appear again and again are the ones Google treats as authoritative for that category, which is a more useful target list than a rank report, because it includes sites that never appear on page one.
Content research. answer_blocks shows the shape Google chose for an
answer: which subheadings it used, what it put in a list, what it led with.
That is a direct read on how the question is best structured, taken from the
system that decides what a good answer looks like.
Google AI Overview Scraper compared
| This actor | Typical alternative | |
|---|---|---|
| Answer structure | Headings, paragraphs and lists preserved, with per-block citations | Answer as one flat string |
| Sources | Full card per source: name, domain, title, snippet, URL, favicon, thumbnail | Domain list, or URLs only |
| Products | Google's product identifiers exposed on shopping queries | Not returned |
| No-overview queries | Returned and marked, not billed | Often a failed run |
| Start fee | $0.002 at the default memory setting | Depends on the listing |
Pricing
$0.00999 per AI Overview returned, plus a $0.002 actor start fee per run. The start fee shown applies to the default 1 GB memory setting. Queries that come back without an overview are returned in the dataset and are not charged. All pricing is pay-per-event, so you only pay for results you receive. There are no per-compute-unit charges.
Limits and gotchas
- Not every query has an AI Overview. Informational and comparison queries
usually do; navigational and bare-brand queries usually do not. withanswered: false
error: "no_ai_overview"means Google offered none, not that the run failed. - The overview is regenerated per request, so wording varies slightly between
runs even for the same query. The cited source set is far more stable than the
prose; build tracking on
source_domains, not on string equality of the text. - Set
countryandlanguagetogether. An English answer for the Dutch market is a different answer from a Dutch one, and mixing them produces results that match neither. - Queries run a few at a time. Large lists need a sufficient actor timeout; if the run runs out of time, the summary reports the partial result.
- Free Apify plans are capped at 10 rows per run. Split larger lists across runs or upgrade to remove the cap.
- For compatibility,
retries: 0has the same behavior asretries: 3. - An unrelated or nonsense query may still get an AI answer from Google; that answer is returned and billed under the same rule.
productsis populated only on shopping-shaped queries. It is empty for informational ones, which is expected rather than a miss.
FAQ
Can I scrape Google AI Overviews without an API key? Yes. Run the actor from the Apify Store or call it through the Apify API. No Google account, key or quota is involved.
How do I know which sites Google cites in its AI Overview?
Read source_domains for the distinct list, or sources for the full card per
cited page including its title and the snippet Google used.
Why did some of my queries return no AI Overview?
Google does not write one for every query. Those rows are returned with
answered: false and are not billed, so a mixed query list costs only what it
returned.
Is the AI Overview different from Google AI Mode? Yes, they are separate surfaces with different answers. The overview sits above the ordinary results; AI Mode is the conversational tab. For AI Mode use the Google AI Mode Scraper below.
Can I track AI Overview citations for my domain over time?
Yes. Run the same query list on a schedule and store source_domains per run.
The presence or absence of your domain across runs is the metric.
Can I call the Google AI Overview Scraper as an API? Yes. Every Apify actor is also an API endpoint. Start a run with your Apify token and the same input fields, and read the rows from the dataset, or use the synchronous endpoint to get them back in one call.
Does it work for other countries and languages?
Yes. Set country and language to the market you want, for example de
and de for Germany. Google does not show AI Overviews in every market or for
every query, and rows without one are not billed.
Related Actors
- Google AI Mode Scraper for the conversational AI tab.
- Google AI Product Answers for AI answers about a specific product, from a barcode or model number.
- Google Search Results Scraper for the ordinary organic results behind the overview.