Deep dive
google
serp
parsing

How Google SERP features map to JSON fields

A tour of the blocks a Google results page can contain and where each one lands in the API response.

William Brach William Brach

Published · 3 min read

Placeholder cover with the post title on a blue background

A Google results page is a stack of blocks. Ten organic results are the constant, and around them Google places whatever it decides the query deserves: a knowledge panel, a featured answer, a map with local businesses, a row of videos, People also ask. The Google engine turns each block into a top-level key of the JSON response. This post walks through the mapping.

The keys you always get

Whatever the query, a successful search carries these keys:

  • search_metadata: the request id, status and timings, plus html_url and json_url. The HTML link opens the exact page that was parsed, which is the first place to look when a field is missing.
  • search_parameters: the parameters as they were applied, with defaults filled in.
  • search_information: what Google reported about the query, such as the number of results.
  • organic_results: the classic blue links, in order. Each item has position, title, link, domain, displayed_link, snippet and favicon, with snippet_highlighted_words and sitelinks when Google shows them.
  • pagination: the links for the following pages.
{
  "search_metadata": {
    "id": "search_XXXXXXXXXXXX",
    "status": "Success",
    "html_url": "https://www.searchapi.io/api/v1/searches/search_XXXXXXXXXXXX.html",
    "json_url": "https://www.searchapi.io/api/v1/searches/search_XXXXXXXXXXXX"
  },
  "organic_results": [
    {
      "position": 1,
      "title": "...",
      "link": "https://...",
      "domain": "...",
      "snippet": "..."
    }
  ]
}

Blocks that come and go

Everything else is a SERP feature, and a feature is only in the response when it is on the page. The key is named after the block:

On the page In the response
Knowledge panel knowledge_graph
Featured answer, calculator, weather, open hours answer_box
AI Overview ai_overview
People also ask related_questions
Local pack local_results and local_map
Text ads, shopping ads, local ads ads, shopping_ads, local_ads
Shopping carousel inline_shopping
Videos inline_videos
Images inline_images
Discussions and forums discussions_and_forums
Jobs jobs
Related searches related_searches

Because a key can be absent, code that reads a feature should check for it first rather than assume it:

data = response.json()

if "answer_box" in data:
    print(data["answer_box"])

for question in data.get("related_questions", []):
    print(question["question"])

The Google Search API documentation has a full example response for each block, from knowledge graph variants to showtimes and scholarly articles.

Some links on a Google page are encrypted redirects of the form https://www.google.com/goto?url=.... They appear in AI Overview and People also ask references, sitelinks, perspectives, knowledge graph profiles and video key moments. Organic result links are recovered from the page where possible. The rest are returned as-is by default (link=raw). Setting link=resolved follows each one to its destination; resolving is best-effort and adds latency, and a redirect that cannot be resolved stays as the redirect URL.

Reading a response you have not seen before

When a query returns a key you did not expect, open search_metadata.html_url. The block will be there on the page, and its position relative to the organic results tells you how Google weighted it for that query. Comparing the same query across a few days, locations or devices shows how much these blocks move, which is a topic for its own post.

Keep reading

Get started with SearchApi today

No credit card required. No commitment. Cancel anytime.