Google AI Mode Scraper: real udm=50 answers + citations · Apify
Google AI Mode Scraper avatar

Google AI Mode Scraper

Pricing

from $1.80 / 1,000 ai mode search completeds

Go to Apify Store
Google AI Mode Scraper

Google AI Mode Scraper

Real Google AI Mode answers (udm=50 tab) rendered in Android Chrome, for any country and language: full answer, structured blocks, resolved source URLs and per-paragraph citations. From $0.0018 per answer ($0.003 on Free/Starter). Uncited answers are flagged; failed and empty queries are free.

Pricing

from $1.80 / 1,000 ai mode search completeds

Rating

0.0

(0)

Developer

subimpact

subimpact

Maintained by Community

Actor stats

0

Bookmarked

59

Total users

43

Monthly active users

3 days ago

Last modified

Features

Limited permissions

Share

Get real Google AI Mode answers (the udm=50 AI Mode tab), with resolved source URLs, per-paragraph citations and structured blocks, as clean JSON. $0.003 per answer, less on higher Apify plans.

  • The real AI Mode tab. Each query is rendered on Google's AI Mode tab (udm=50) in a real Android Chrome browser. You get the answer Google streams to users, not a classic AI Overview and not a cached snippet.
  • Full answer + structure: answer_text (the whole answer), plus text_blocks (paragraphs, headings, lists, tables).
  • Citations that mean something:
    • references: every source card, with its title, real destination URL (Google /goto links already resolved), snippet and source name.
    • inline_citations: the sources Google pinned inside the answer.
    • Per-block citations: which source backs which paragraph.
  • Never pay for garbage. Every full AI Mode answer is charged (Ok). Stub or absent answers (Empty), answers that left the AI Mode tab (Partial), Google interstitials (Blocked) and errors (Failed) are free.
  • Uncited answers are labelled. For some questions Google writes a full answer but shows no sources at all. You still get that answer (charged as Ok), with search_metadata.ungrounded: true and a warning, so you can filter to cited answers only.
  • Billed as you go. Each Ok row is charged when it is delivered, so a run that times out keeps everything it already returned.
  • Speed. Typically ~10s per answer. Several queries run in parallel and rows stream into the dataset as they complete. Batches of up to 1,000 queries per run.

Use cases

  • Brand monitoring / GEO: does Google's AI Mode mention your brand, and does it cite your site? Which paragraph cites you? (AI Mode and classic AI Overviews cite the same URLs only ~13.7% of the time, so this captures a different slice of the web.)
  • LLM-visibility tracking: what Google's generative answers say about your products and your competitors, over time.
  • AEO/GEO content research: which domains AI Mode trusts in your niche (Reddit? YouTube? vendor blogs?) and what the answers actually say.

Input

{
"queries": ["best crm for startups", "notion vs obsidian"]
}
  • queries (required): the questions to get AI Mode answers for.
  • gl (default us): the country whose AI Mode answers you want, e.g. ae, my, sg, id, au.
  • hl (default en): the language, e.g. en, ar, ms, id, th, zh-CN, zh-TW. Write your queries in the same language.
  • location (optional): a Google canonical location name, e.g. Dubai,Dubai,United Arab Emirates. If you leave it empty, the main city of the country is used (Dubai, Kuala Lumpur, Singapore, Jakarta, Sydney and others). Type none to send no location.
  • skipCache (default false): a question asked again for the same country, language and location within about an hour may be answered from our cache. Cached rows are marked (see cached below). Set skipCache: true to always fetch a fresh answer from Google, for example when you track how answers change from one run to the next.
  • backend (default android): android is the real AI Mode tab. http is the legacy browserless SERP fetch, which only returns AI answers that Google embeds in the classic results page. The udm50, retryDeferred* and captureRawHtml options apply to http only.
  • concurrency: queries in parallel. On android it is capped automatically to the size of the browser pool.
  • failOnNoCapacity (default false): only for pipelines that prefer a FAILED run so they can retry it automatically. When our browser pool briefly runs out of capacity, runs normally wait up to 3 minutes if capacity is about to return and otherwise return free Blocked rows (see below); with this option on, such a run fails immediately instead.

Country and language targeting

Each run fetches the answers that a user in the chosen country and language sees. Country (gl), language (hl) and city (location) are all sent to Google. One run covers one market, so run once per market.

{ "queries": ["أفضل بطاقة ائتمان استرداد نقدي"], "gl": "ae", "hl": "ar" }
{ "queries": ["insurans kesihatan terbaik untuk keluarga"], "gl": "my", "hl": "ms" }
{ "queries": ["best health insurance for families"], "gl": "au" }

What we measured (October 2026):

  • UAE, Singapore and Australia in English, and Malaysia in English with the default Kuala Lumpur location, all return local answers with local sources (for example emiratesislamic.ae, moneysmart.sg, canstar.com.au, ringgitplus.com).
  • Arabic (UAE), Malay, Indonesian, Thai and Chinese queries return answers in that language with local sources.
  • On 28 October 2026 we also tested Japanese (Japan), German, French, Spanish, Brazilian Portuguese, Korean, Italian, Vietnamese, Hindi (India) and Russian: all 10 returned a full answer in that language, with sources.
  • In Indonesia and Thailand, use the local language. English queries there often get generic or US answers.
  • The city setting matters: Arabic in the UAE without a city sometimes leaned towards Saudi banks, and with the Dubai location it returned UAE banks.

Output

One dataset item per query:

  • query: the query.
  • status:
    • Ok: charged. Includes answers Google served without any sources; those carry search_metadata.ungrounded: true and a warning.
    • Partial: Google moved the query off the AI Mode tab, not charged.
    • Empty: no answer, not charged.
    • Blocked: Google interstitial, not charged. Also used when our own browser capacity is temporarily exhausted (Google rate-limits our browsers): the row carries search_metadata.capacity_blocked: true and search_metadata.retry_after_s (seconds), is free, and the run still succeeds — retry those queries later.
    • Failed: error, not charged.
  • ai_mode: true for AI Mode answers.
  • cached: true if this answer was served from our cache (same question, country, language and location answered within about an hour). search_metadata.cached_at holds the time Google produced it, and search_metadata.cache_source is local or shared. Use skipCache to always get a fresh answer.
  • ai_overview is the answer object:
    • answer_text: the full answer as plain text.
    • text_blocks: paragraph / heading / list / table blocks. A block may carry citations (source, link, and author for video or forum citations such as a YouTube channel or a subreddit).
    • references: source cards (title, link, snippet, source, index). unresolved: true marks a card whose destination URL could not be resolved.
    • inline_citations: sources pinned inside the answer (source, link).
    • answer_links: hyperlinked phrases Google wove into the answer prose (for example a company or product name linked to its website). Each one carries the phrase (text), the real URL behind the link (link, already resolved; null if it could not be resolved), the matching reference (source_index, omitted when absent) and the first answer block that contains the phrase (block_index, omitted when absent). Answer links are not citations, so they never change ungrounded or the charge: an answer with links but no sources stays ungrounded: true. null means the answer came from before link capture (older backend or cache).
    • resolved_by: android.
    • sponsored (only when present): the ad Google showed under the answer (a "Sponsored" block). It is kept here and never mixed into answer_text.

answer_text is an authentic copy of the answer Google showed, word for word and in every language: it keeps Google's "AI can make mistakes" disclaimer and its "Learn more" link text, the names on citation chips (with their "+N"), and everything written on place cards. Only on-screen buttons (Copy text, Good/Bad response, Share, Show all, Call / Directions / Website), the source side panel (delivered as references) and ads (delivered as sponsored) are left out. text_blocks is the structured view of the same answer: there, citation chips are attached to their block as citations instead of appearing as lines. This applies to the default android backend; the legacy http backend is unchanged.

  • search_metadata:
    • backend: android-chromium.
    • total_time_ms.
    • first_answer_s.
    • final_url_has_udm50: confirms the answer came from the AI Mode tab.
    • citations_missing.
  • warning / error: why a row was not Ok.

Example (trimmed):

{
"query": "best crm for startups",
"status": "Ok",
"ai_mode": true,
"ai_overview": {
"answer_text": "The best CRM for your startup depends heavily on your go-to-market motion...",
"text_blocks": [{ "type": "paragraph", "snippet": "...", "citations": [{ "source": "Salesflare Blog", "link": "https://blog.salesflare.com/best-crm-for-startups" }] }],
"references": [{ "title": "9 Best CRMs for Startups in 2026", "link": "https://blog.salesflare.com/best-crm-for-startups", "source": "Salesflare Blog", "index": 0 }],
"answer_links": [{ "text": "HubSpot CRM", "link": "https://www.hubspot.com/products/crm/startups", "source_index": 0, "block_index": 2 }],
"resolved_by": "android"
}
}

Pricing

  • Price per Ok answer depends on your Apify plan:
    • Free and Starter: $0.003 ($3.00 / 1,000)
    • Scale: $0.0025 ($2.50 / 1,000)
    • Business and above: $0.0018 ($1.80 / 1,000)
  • Platform usage is included in the price (about $0.0001 per query on the default 256 MB; runs peak around 50 MB).
  • Rows that are not Ok are free.

Changelog

  • 11 November 2026: Runs no longer fail when our browser capacity is briefly exhausted: queries come back as free Blocked rows with a retry hint (or wait up to 3 minutes when capacity is about to return). New input failOnNoCapacity restores the old fail-fast behaviour.
  • 28 October 2026: answer_text is now an authentic, word-for-word copy of Google's answer in every language. It keeps Google's "AI can make mistakes" disclaimer (and its "Learn more" text) as the last line, and the citation chip names (with "+N") where Google shows them. Before this, the disclaimer was removed in some languages but not others, and chip names were removed. If you parse answer_text, expect these extra lines. text_blocks, references, inline_citations, pricing and which rows are charged are unchanged. Answers cached in the hour before the change may still show the old format; use skipCache: true to force a fresh answer.