API reference
AI Overview & SERP features
Beyond the ten blue links: capture Google’s AI Overview with its cited sources, plus the rich SERP-feature blocks.
AI Overview
When Google shows an AI Overview for a keyword, the crawler captures it on the page-one load and returns the body as both flat summary lines and structured blocks (paragraphs, headings, lists, tables), a ready-to-render markdown string, and the cited sources ranked in display order with a title and description. This is on by default on every search. It fetches no extra result page, but it is not free: the crawler holds the page open for a render wait, and on a fast-absent AI Overview it reloads the SERP once to re-roll it. Pass capture_aio false to skip both for a faster crawl.
The job metadata reports an aio_status and a citation count:
| Field | Type | Description |
|---|---|---|
| present | aio_status | An AI Overview was shown and captured. |
| absent | aio_status | No AI Overview appeared for this keyword. |
| failed | aio_status | An AI Overview was detected but could not be captured. |
| skipped | aio_status | Capture did not run, because capture_aio was false on the request or off fleet-wide. Not the same as absent — nothing was looked for. |
| aio_citations | integer | Count of distinct cited sources in the AI Overview. |
The ai_overview body fields (native json):
| Field | Type | Description |
|---|---|---|
| summary | string[] | Flat plain-text blocks (paragraphs + list items). Back-compat; use text_blocks/markdown for structure. |
| markdown | string | The AI Overview body rendered as Markdown (headings, bullet lists, tables). |
| text_blocks | array | Ordered structured blocks, each { type: paragraph | heading | list | table, ... }. |
| citations | array | Cited sources in display order: { rank, title, url, domain, snippet }. |
"ai_overview": {
"summary": [
"Road running shoes prioritize cushioning and a smooth heel-to-toe transition.",
"Control carbohydrate intake and use complex carbs over refined sugars."
],
"markdown": "Road running shoes prioritize cushioning...\n\n- Control carbohydrate intake...\n- Engage in regular exercise...",
"text_blocks": [
{ "type": "paragraph", "text": "Road running shoes prioritize cushioning..." },
{ "type": "list", "items": ["Control carbohydrate intake...", "Engage in regular exercise..."] }
],
"citations": [
{ "rank": 1, "title": "Running Shoe Guide", "url": "https://example.com/guide", "domain": "example.com", "snippet": "A practical guide to choosing road shoes." },
{ "rank": 2, "title": "How to Choose", "url": "https://other.com/choose", "domain": "other.com", "snippet": null }
]
}The serpapi output maps these to text_blocks (SerpApi-stylesnippet/list shapes) and references (each with a 1-based index, link, source and snippet).
Page-one only
SERP features
When capture_features is on (the default, reusing the same page-one load as the AI Overview, so there is no extra request), the parser extracts the rich blocks that sit around the organic results.
| Field | Type | Description |
|---|---|---|
| featured_snippet | object | The answer box at the top of results. serpapi: answer_box. |
| people_also_ask | array | Expandable related questions. serpapi: related_questions. |
| related_searches | array | Suggested follow-up queries. |
| local_pack | array | The map/local business pack. serpapi: local_results. |
| knowledge_panel | object | The entity knowledge panel. serpapi: knowledge_graph. |
| inline_images | array | The inline image carousel. |
| inline_videos | array | The inline video block. |
| top_stories | array | The news / top-stories block. |
| shopping_results | array | The shopping / product block. |
| sitelinks | array | Sitelinks under a result. In serpapi output, nested under the first organic result as sitelinks.inline[]. |
Empty features are omitted
serp_features contains only what actually appeared on the page.Per-result enrichment
In the native JSON, each organic result also carries dependency-free enrichment computed from its URL: domain_info (registrable domain, subdomain), a classification (e.g. commercial, informational), and a favicon. This lets you segment results without a second lookup.