Google now answers many queries itself. Between “AI Overviews” on the classic results page and the deeper, conversational “AI Mode”, the most valuable information is increasingly inside AI-generated responses.

That content was never designed for programmatic access, which is the gap this launch closes.
What the HasData API Gives You
The HasData API for Google AI Mode returns an AI Mode response as structured JSON from one GET request.
- The full response, in blocks. The complete AI-generated text plus the elements around it, cited web sources, comparison tables, and local packs for location-based queries.
- A stable schema. Every query returns the same documented object, the one in the field table below, so a parser written against Google’s markup stops being something you maintain.
- One credential for a run of any size. The same API key answers a handful of brand keywords and a large query set, with no per-query setup between them.
AI Mode vs AI Overview
These are two different surfaces, and they produce different data. An AI Overview is the summary Google places on top of the classic results page for some queries, a few paragraphs with citations, while the rest of the SERP stays visible under it. AI Mode is a separate conversational surface (the udm=50 URL in the response metadata) that replaces the results page entirely, answers at length, holds follow-up questions, and builds its own elements like comparison tables and local packs. Tracking one tells you little about the other. Which queries even get an Overview, and who it cites, is its own dataset, the one our AI Overview study measures by search intent, and HasData ships a separate AI Overview endpoint for that surface. This API covers the AI Mode side.
How It Works
One GET request reaches AI Mode and returns the answer as structured JSON.

The response below came from a comparison question, “What are the key differences between Google’s Gemini 1.5 Pro and OpenAI’s GPT-4o?”, which is the shape of query that produces the most block types at once.
Step 1. The Request
All you need to do is send your query to our endpoint. Here is an example using cURL:
curl --request GET \
--url 'https://api.hasdata.com/scrape/google/ai-mode?q=what+are+the+key+differences+between+Google+Gemini+1.5+Pro+and+OpenAI+GPT-4o' \
--header 'Content-Type: application/json' \
--header 'x-api-key: YOUR-API-KEY'
The query travels URL-encoded in q, and the key goes in the x-api-key header.
Step 2. The Response
The API returns a structured JSON object. The core content is in the textBlocks array, which segments the AI’s answer into logical paragraphs.
{
"requestMetadata": {
"id": "72f82c5f-1ddd-4ecb-b4c7-54cb563cab84",
"status": "ok",
"html": "https://files.hasdata.com/.../page.html",
"json": "https://files.hasdata.com/.../page.json",
"preview": "https://files.hasdata.com/.../preview.jpeg",
"url": "https://www.google.com/search?q=what+are+the+key+differences+between+Google+Gemini+1.5+Pro+and+OpenAI+GPT-4o&udm=50"
},
"textBlocks": [
{
"type": "paragraph",
"snippet": "The key differences between Google Gemini 1.5 Pro and OpenAI GPT-4o are:"
},
{
"type": "paragraph",
"snippet": "Context Window:",
"snippetHighlightedWords": ["Context Window:"]
},
{
"type": "list",
"list": [
{"snippet": "Gemini 1.5 Pro: Supports up to 1 million tokens, allowing it to process large amounts of data."},
{"snippet": "GPT-4o: Has a context window of 128,000 tokens."}
]
},
{
"type": "paragraph",
"snippet": "Performance and Multimodality:",
"snippetHighlightedWords": ["Performance and Multimodality:"]
},
{
"type": "list",
"list": [
{"snippet": "Gemini 1.5 Pro: Excels in complex reasoning, creative writing, and coding, and handles text, code, images, video, and audio."},
{"snippet": "GPT-4o: Performs well in multilingual tasks and multimodal comprehension, especially with vision and audio. It often outperforms Gemini 1.5 Pro on various benchmarks."}
]
},
{
"type": "paragraph",
"snippet": "Cost:",
"snippetHighlightedWords": ["Cost:"]
},
{
"type": "list",
"list": [
{"snippet": "Gemini 1.5 Pro: Has a tiered pricing structure that is more affordable for smaller inputs (under 128k tokens)."},
{"snippet": "GPT-4o: Provides cost-effectiveness, especially for larger volumes."}
]
}
],
"references": [
{
"link": "https://www.promptlayer.com/blog/gemini-1-5-pro-vs-chatgpt-4o-choosing-the-right-model#:~:text=Performance:%20GPT%2D4o%20beats%20Gemini,suited%20for%20extremely%20long%20inputs.",
"title": "Gemini 1.5 Pro vs ChatGPT 4o: Choosing the right model",
"snippet": "Nov 1, 2024 — Choosing Between Gemini 1.5 Pro and GPT-4o. OpenAI and Google have been releasing better and better frontier large language models (LLMs) in 2024. The newest ve...",
"source": "PromptLayer",
"index": 1
},
{
"link": "https://www.appaca.ai/resources/llm-comparison/gpt-4o-vs-gemini-15-pro#:~:text=In%20summary,%2D4o%20(October%202023).",
"title": "GPT-4o vs Gemini 1.5 Pro: Which AI Model Is Right for You? - Appaca",
"snippet": "GPT-4o: Strengths and Advantages. GPT-4o is OpenAI's high-intelligence flagship model, designed for complex, multi-step tasks. It offers advanced capabilities a...",
"source": "Appaca",
"index": 3
}
]
}The shape stays the same for every query, so a parser written against these fields covers all of it:
| Field | Type | What it holds |
|---|---|---|
requestMetadata | object | id, status, and the exact google.com URL that was answered, where udm=50 is the AI Mode surface, plus stored copies of the raw html, json and a preview image |
textBlocks | array | the AI answer split into blocks, in reading order |
textBlocks[].type | string | paragraph, heading, list, table, or localResults |
textBlocks[].snippet | string | the text of a paragraph or heading block |
textBlocks[].snippetHighlightedWords | array | the fragments Google bolded inside the snippet |
textBlocks[].list | array | items of a list block, each with its own snippet |
textBlocks[].rows | array | rows of a table block, first row is the header |
textBlocks[].localResults | array | places in a local pack, with title, address, rating, reviews, and openState |
references | array | the cited sources, each with index, title, source and a thumbnail. A link is present on most entries but not all, and some carry a snippet instead, so read both with a default rather than by subscript |
Which block types actually appear depends on the query. A comparison question tends to produce table blocks, a local intent produces localResults, and a plain informational question can come back as headings and paragraphs only.
Google presents part of its answers in non-text formats, and the API captures those too. For a comparative query like “best laptops for students”, Google’s AI often generates a summary table.

Our API identifies and parses this element directly. Instead of just getting a block of text, you receive a structured table object:
{
"type": "table",
"rows": [
[
"Feature",
"Apple MacBook Air (M3, 2024)",
"Asus Zenbook 14 OLED",
"Microsoft Surface Pro 11th Edition (2024)",
"Acer Swift Go 14 (2024)",
"Lenovo ThinkPad X1 Carbon Gen 12",
"Acer Aspire Go 15"
],
[
"Best For",
"Overall, Creative students",
"Overall, Performance/Display",
"Note-takers, 2-in-1 users",
"Mid-Range, Value",
"Business, Portability",
"Budget"
],
[
"CPU",
"Apple M3",
"Intel Core Ultra 7 155H",
"Qualcomm Snapdragon X Elite",
"Intel Core Ultra 5/7",
"Intel Core Ultra 7 155H",
"Intel Core i3"
],
[
"GPU",
"Integrated (10-core)",
"Integrated (Intel Arc)",
"Integrated (Qualcomm Adreno)",
"Integrated (Intel Arc/Iris Xe)",
"Integrated (Intel Arc)",
"Integrated"
],
[
"Display",
"13.5-inch Liquid Retina",
"14-inch OLED touchscreen",
"13-inch OLED PixelSense Flow",
"14-inch IPS/OLED",
"14-inch OLED (120Hz)",
"15.6-inch Full HD"
],
[
"Battery Life",
"Excellent (15+ hours)",
"Good (approx. 16 hours)",
"Long (e.g., 10 hours)",
"Decent (approx. 11 hours)",
"Middling (with OLED)",
"Approx. 12 hours"
],
[
"Weight",
"2.7 pounds (13-inch)",
"2.82 pounds",
"1.97 pounds (without keyboard)",
"3.1 pounds",
"2.42 pounds",
"Not specified"
],
[
"Starting Price",
"$1,099",
"$849 (at Walmart)",
"$999.99 (currently discounted)",
"Around $700 (with OLED)",
"$1,424.25 (discounted)",
"$299"
]
]
}For a location-based query like “italian restaurants near me”, the API extracts the businesses listed in the AI-driven local pack.

You get a clean localResults object containing actionable data:
{
"type": "localResults",
"localResults": [
{
"position": 1,
"title": "Siragusa's Taste of Italy",
"thumbnail": "https://lh3.googleusercontent.com/p/AF1QipMs4Qt83-h19YB6S6jX7-AK4wXsGYHI01P8Orfo=w300-h224-n-k-no",
"address": "4115 S Redwood Rd",
"openState": "Open",
"reviews": 2200,
"rating": 4.4,
"type": "Italian"
},
{
"position": 2,
"title": "La Dolce Vita Ristorante Italiano",
"thumbnail": "https://lh3.googleusercontent.com/p/AF1QipPxB7aSGdakj5B9uuvWJYdhVGJlDiBpqmDrxNKH=w300-h225-n-k-no",
"address": "61 N 100 E",
"openState": "Open",
"reviews": 1200,
"rating": 4.2,
"type": "Italian"
},
{
"position": 3,
"title": "Stoneground Italian Kitchen",
"thumbnail": "https://lh3.googleusercontent.com/gps-cs-s/AC9h4nqj_8cV66BCLW346c6zDsVQHSz-wrdvxTA1fdpsnVSmh4T_1sMhr2FecC515OYBIQOiMYermmQHX2srRdDCiimpzlZpAL7TaSgk5W3Shs9_oiw6VYOsGZ_PeXANV0IW7IXr02P8Xg=w300-h400-n-k-no",
"address": "249 E 400 S",
"openState": "Open",
"reviews": 1100,
"rating": 4.5,
"type": "Italian"
},
{
"position": 4,
"title": "Bartolo's Sugar House",
"thumbnail": "https://lh3.googleusercontent.com/p/AF1QipP2-JdihMmXB1zaiPIsNc29DWUrNeEBrcKvWYYR=w300-h168-n-k-no",
"address": "1270 S 1100 E",
"openState": "Open",
"reviews": 610,
"rating": 4.4,
"type": "Italian"
}
]
}Ratings, review counts, and addresses arrive ready for a spreadsheet, with no Maps scraping involved.
Practical Use Cases
The jobs that come up most often with this data:
- Brand monitoring reads how Google’s AI describes your brand and products in its direct answers.
- Competitive intelligence reads how it positions you against competitors on strengths, weaknesses and features.
- Content briefs come out of querying AI Mode for a topic summary and its cited sources.
- RAG pipelines take the summarized answer as context for your own models.
Get Started
Three steps get a first response back.
- Get an API key by signing up.
- Read the quickstart for the parameters.
- Send the cURL request above with your key in place of the placeholder.


