Skip to content
CrawlerData
Menu
Guides

What is a SERP API? A real response, field by field

A SERP API returns Google results as JSON. See real responses for five queries, which fields appear when, and what to check before you pick one.

CrawlerData teamPublished 7 min read

Contents

A SERP API takes a search query and returns the Google results page as structured data. Instead of fetching a page, dodging blocks and writing a parser that breaks every few months, you make one HTTP request and read JSON.

Most explanations stop at that definition and a table of field names. This one shows real responses. We ran five searches against the Google Search API in October 2026 and kept what came back, so you can see which fields appear for which kinds of query, and what the data does that surprises people.

What a request looks like

You send a query, a country and optionally a device, and say whether you want the answer in the same response. With curl:

curl -X POST https://api.crawlerdata.com/v1/jobs \
  -H "Authorization: Bearer $CRAWLERDATA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "endpoint": "google-search",
    "params": { "query": "best running shoes", "country": "us", "device": "desktop" },
    "queue": "live"
  }'

The response has two parts. job says what happened: status, credits used, how long it took. result holds the search results. A full Python walkthrough, with pagination and batches, is in Get Google search results as JSON with Python. Here we look at the result itself.

The shape of a response

Every response has the same keys. A feature that Google did not show comes back as an empty list or null, so your code does not have to check whether a key exists:

search_information   total_results
organic_results      position, title, link, displayed_link, snippet
ads                  paid results, when shown
ai_overview          text and sources, or null
people_also_ask      question
local_pack           title, rating, reviews, address
top_stories          news stories, when shown
knowledge_panel      title, type, description, or null
related_searches     query
search_parameters    the query, country, language, device and page used

Here are real excerpts. An organic result:

{
  "position": 1,
  "title": "7 Best Running Shoes in 2026",
  "link": "https://runrepeat.com/guides/best-running-shoes",
  "displayed_link": "https://runrepeat.com › guides › best-running-shoes",
  "snippet": "Sep 12, 2026 — The New Balance 1080 v15 stands out in the all-rounder game, ..."
}

A knowledge panel, from nvidia stock:

{
  "title": "NVIDIA Corp",
  "type": "NASDAQ: NVDA",
  "description": "Nvidia Corporation is an American multinational technology company headquartered in Santa Clara, California."
}

Two local pack entries, from pizza near me:

[
  { "title": "Happy's Pizza & Savvy Sliders", "rating": 3.3, "reviews": 701, "address": "Cincinnati, OH" },
  { "title": "Chameleon", "rating": 4.4, "reviews": 712, "address": "Cincinnati, OH" }
]

And the AI Overview, from the same nvidia stock search. text is the overview and sources lists the pages it cites. This one had six, the first being:

{ "title": "CNBC Quotes", "link": "https://www.cnbc.com/quotes/NVDA" }

Which features show up for which queries

Not every search has every feature. This small helper counts what came back:

def summarize(result):
    """One line per search: how many of each SERP feature came back."""
    aio = result.get("ai_overview")
    return {
        "organic": len(result["organic_results"]),
        "ads": len(result["ads"]),
        "ai_overview": bool(aio),
        "ai_sources": len(aio["sources"]) if aio else 0,
        "people_also_ask": len(result["people_also_ask"]),
        "local_pack": len(result["local_pack"]),
        "knowledge_panel": result["knowledge_panel"] is not None,
        "related": len(result["related_searches"]),
    }

Run on our five searches, it gave:

Query Organic AI Overview (sources) People Also Ask Local pack Knowledge panel Related
how to tie a tie 6 yes (8) 0 0 no 8
best running shoes 9 yes (3) 0 0 no 8
pizza near me 9 no 4 3 no 8
nvidia stock 6 yes (6) 4 0 yes 8
iphone 16 pro price 9 yes (5) 4 0 no 8

Four things follow from this small sample:

  • The page is a different shape for every query. The same API call gave a local pack for a restaurant search, a knowledge panel for a stock and an AI Overview for four of the five. If you track rankings, you are tracking all of this, not just ten blue links.
  • You rarely get 10 organic results. We got 6 or 9, because features take space on the page. Don’t hard-code 10.
  • No ads came back for any of these five queries. Ads depend on the query, the country and the day, so don’t assume a field will be empty or full.
  • related_searches held 8 in all five. Handy as a source of follow-up queries.

Things that surprise people

total_results is not a count you can rely on. It is whatever number Google shows. For best running shoes it was 195, for nvidia stock 326,000 and for pizza near me 1,040,000,000. Use it as a rough signal, not a metric, and note that it can be null on mobile.

Location is a country unless you set a city. The request takes country and language, and an optional location. Without it, pizza near me has nothing to resolve “near” against, and our response contained businesses in Cincinnati. Pass a Google location name and the local pack follows:

{ "query": "pizza near me", "country": "us", "location": "Austin,Texas,United States" }

With Austin,Texas,United States the local pack was Home Slice Pizza, The Onion and Hoboken Pie, all on Austin streets. With Brooklyn,New York,United States it was Brooklyn Pizza Crew, Rocco Pizza III and La Flor Pizza. A location name that is not valid is rejected with a 400, and you can look names up with the public GET https://api.crawlerdata.com/public/locations?q=austin, which needs no key. You can also put the place in the query, such as pizza in brooklyn ny. The Google Local API is built for that kind of search.

Speed varies. Four of our five requests finished in about 5 to 8 seconds. The first, how to tie a tie, took 68 seconds. A live request holds the connection open until the search finishes, so set a generous timeout and use the fast or regular queue for large batches instead.

How a SERP API works

Under the hood, the service loads the Google results page for the country and device you ask for, reads the page and turns what it finds into the fields above. That is the part that is hard to do yourself: pages change layout, features move, and Google varies what it shows by country and device. A SERP API’s job is to keep the output stable while the page underneath changes.

Google does not offer a results-page API of its own that you can sign up for. Its Custom Search JSON API is, per Google’s overview page checked in October 2026, closed to new customers, and existing customers have until 1 January 2027 to move to an alternative. If you need the data behind what a person sees on Google, a SERP API is the practical route.

What people use them for

  • Rank tracking. Record where your pages and your competitors’ pages appear for a list of queries, by country and device. See SEO rank tracking.
  • AI Overview monitoring. The ai_overview field tells you whether Google shows an overview for a query and which pages it cites. We have a free AI Overview checker that runs on the same data.
  • Feeding AI agents and RAG. An agent that needs current web results can call the endpoint as a tool.
  • Market and competitor research. People Also Ask and related searches show what people ask around a topic.

What to check before you pick one

Whichever provider you look at, run the same test we did here: send a handful of different queries and read the raw JSON.

  1. Does it return the features you need? Local, shopping, news, images, AI Overview, People Also Ask.
  2. Can you set country, language and device? And do you get a city?
  3. What does a request cost, and are failed requests charged? CrawlerData is 1 credit per request on every queue and device, from $1.00 per 1,000 requests on Starter down to $0.30 on the largest pack, and failed requests are free. See pricing and, for a cost comparison, cheapest SERP API.
  4. How does it behave in batches? Look for a queue or webhook option so you are not holding thousands of connections open.
  5. Can you try it free? New CrawlerData accounts get 50 free credits after verifying a work email, enough to run the five searches in this guide ten times over.

Try it

Send the curl request above with your own key, change query to something you care about, and read what comes back. The Google Search API page lists every parameter with a full example response.

Frequently asked questions

What is a SERP API?
A service that runs a search on Google for you and returns the results page as structured JSON: organic results, People Also Ask, local results, the AI Overview, related searches and more. It is not an official Google product. You send a query, a country and a device, and you get data instead of HTML.
What does a SERP API return?
In CrawlerData's google-search response: organic_results, ads, ai_overview, people_also_ask, local_pack, top_stories, knowledge_panel, related_searches, search_information and search_parameters. A feature Google did not show for that query comes back as an empty list or null.
Why does a SERP API return fewer than 10 organic results?
Google does not always show 10. In our October 2026 test of five queries, the number of organic results was 6 or 9, with the rest of the page taken by features such as the AI Overview, People Also Ask and local results.
Is there an official Google SERP API?
Not one you can sign up for. Google's Custom Search JSON API is closed to new customers, and existing customers have until 1 January 2027 to move to an alternative, according to Google's own overview page, checked in October 2026.
How is a SERP API priced?
Usually per request. CrawlerData charges 1 credit per request on every queue and device: $1.00 per 1,000 on the Starter pack, down to $0.30 per 1,000 on the largest. Failed requests are not charged.
Can I set a city, or does it only take a country?
Both. country sets the market, and an optional location sets a city, using a Google location name such as Austin,Texas,United States. Without a location, a query like pizza near me has nothing to resolve near against and returned businesses in a US city we had not chosen. With location set to Austin or Brooklyn, the local pack changed to businesses in that city.
  • SERP API
  • Google Search API
  • Search results
  • JSON
  • Explainer