Google Search API
Structured Google results: organic listings, ads, People Also Ask, knowledge graph, local pack and the AI Overview.
Price
$1.50 per 1,000 requests at Starter, down to $1.00 at Max, deducted from your prepaid USD balance.
Endpoint
POST /v1/monitor/google
Countries
213 countries, down to the city.
Request
curl -X POST "https://api.answerline.dev/v1/monitor/google" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"project management software","country":"US","include":{"aioverview":{"markdown":true}}}'
import { Client } from "@answerline/sdk";
const client = new Client({ apiKey: process.env.API_KEY! });
const answer = await client.monitor.google({
"query": "project management software",
"country": "US",
"include": {
"aioverview": {
"markdown": true
}
}
});
import os
from answerline import Client
with Client(os.environ["API_KEY"]) as client:
answer = client.monitor.google(
query="project management software",
country="US",
include={
"aioverview": {
"markdown": True
}
},
)
What you get back
Field in result | Type | Description |
|---|---|---|
organicResults | object[] | Google organic results |
ads | object[] | Sponsored results in Google search: text ads (type: RESULT), plus sponsored shopping cards (type: SHOPPING_CARD) drawn from the carousels at the top of the page and in the right-hand column. |
peopleAlsoAsk | object[] | Google's "People also ask" questions |
peopleAreSaying | object[] | Items from the Google results module titled "What people are saying" or "Trending posts and discussions". When the page has no such module, result leaves this field out instead of returning an empty array, so treat it as optional. |
relatedSearches | object[] | Suggested related searches |
knowledgeGraph | object | Knowledge Graph panel Google shows for the entity in the query. Not included in result if the results page has no such panel. Handle the field as optional: it is not sent as null. |
localResults | object[] | Businesses in Google's local pack (the map-based "3-pack" of nearby businesses shown for local-intent searches, e.g. "best ramen in seattle"). If the SERP has no local pack, result does not contain this field at all, so treat it as optional instead of relying on an empty array. Applies to desktop only; neither the mobile layout nor the hotels/travel pack (a separate panel) is returned. |
shoppingCards | object[] | Product cards taken from the organic shopping grids on the results page ("Popular products" / "More products"). When the page has no shopping section, result does not include this field at all, so clients should handle it as optional instead of relying on an empty array. The shape reuses field names from shopping_cards in AI Mode for consistency across endpoints, but its keys are camelCase (productLink, oldPrice) in the Google response. |
recipes | object[] | The cards of Google's Recipes carousel, in the order shown. Absent when the page shows none. |
videos | object[] | Cards of Google's Videos and Short videos blocks |
images | object[] | Pictures of Google's Images block |
spelling | object | The query Google corrected the search to, when it shows a correction above the results |
aioverview | object | Data from Google's AI Overview, when requested; null if no AI Overview could be obtained after retrying. |
The results page versus Google’s developer API
This endpoint returns Google’s results page for a query and market, as structured fields. Rank tracking and AI Overview monitoring measure that page, because it is what searchers see.
Google’s JSON API for web search results is the Custom Search JSON API. According to its overview (checked 2026-09-17, developers.google.com) it returns web and image results from a Programmable Search Engine, gives 100 free queries per day, costs $5 per 1,000 further queries up to 10,000 per day, is closed to new customers, and existing customers have until January 1, 2027 to move to an alternative. Its cse.list reference (checked 2026-09-17, developers.google.com) documents gl, hl, cr and lr and does not mention AI Overviews, People Also Ask, ads, local packs or knowledge panels.
Rank here is a page position: organicResults[].position and page describe where a listing appeared after ads, the AI Overview and other modules pushed it down. Those modules (aioverview, peopleAlsoAsk, peopleAreSaying, localResults, knowledgeGraph, shoppingCards, recipes, videos, images, ads) take attention before the first organic link, and tracking them explains traffic changes that rank alone cannot. Being cited in aioverview.sources or aioverview.citationPills is a separate outcome from ranking organically and needs its own tracking.
An annotated response
The excerpt follows the result schema for POST /v1/monitor/google. Values are illustrative; the request set include.aioverview.markdown to true.
{
"success": true,
"result": {
"organicResults": [
{
"position": 1,
"title": "Project Management Software for Teams | ExampleBoard",
"link": "https://www.exampleboard.com/",
"source": "ExampleBoard",
"displayedLink": "https://www.exampleboard.com",
"snippet": "Plan, track and deliver projects...",
"page": 1,
"sitelinks": { "inline": [{ "title": "Pricing", "link": "https://www.exampleboard.com/pricing", "snippet": "Plans for teams of every size..." }] }
}
],
// Set only when Google corrected the query. type: DID_YOU_MEAN | SHOWING_RESULTS_FOR |
// INCLUDING_RESULTS_FOR | NO_RESULTS_FOUND_FOR.
"spelling": { "query": "project management software", "type": "SHOWING_RESULTS_FOR" },
// blockPosition: top | bottom | middle | rhs. type: RESULT | SHOPPING_CARD.
"ads": [
{
"position": 1,
"blockPosition": "top",
"type": "RESULT",
"title": "SampleTask - Free for Small Teams",
"url": "https://www.sampletask.example/signup",
"page": 1,
"displayedUrl": "www.sampletask.example",
"domain": "sampletask.example",
"description": "Kanban, Gantt and time tracking in one tool..."
}
],
// type is AIOVERVIEW, LINK or UNKNOWN. markdown and sources on AIOVERVIEW
// items require include.paaAioverview.
"peopleAlsoAsk": [
{ "question": "What is the easiest project management software?", "type": "LINK", "title": "...", "link": "https://www.example-reviews.com/easy-pm", "snippet": "..." }
],
"relatedSearches": [{ "query": "free project management software", "link": "https://www.google.com/search?q=free+project+management+software" }],
// null when requested but Google showed no AI Overview.
"aioverview": {
"text": "Popular options include ExampleBoard and SampleTask...",
"markdown": "Popular options include **ExampleBoard** and **SampleTask**...",
"sources": [
{ "position": 1, "url": "https://www.example-reviews.com/best-pm-software", "label": "Best project management software", "description": "..." }
],
// citationPillId is 1-based; position points into aioverview.sources.
"citationPills": [
{ "label": "Best project management software", "citationPillId": 1, "url": "https://www.example-reviews.com/best-pm-software", "domain": "example-reviews.com", "position": 1 }
],
// Links under a chip's "related links" flyout that are not in sources. No position.
"relatedLinks": []
}
// Modules the page does not show are omitted (see Handling the results).
}
}
Notes for this engine
Market targeting
| Field | Values | Notes |
|---|---|---|
country or gl |
ISO 3166-1 alpha-2 | One is required with query; different values in both is a 400. GET /v1/countries?model=google lists codes (model=aioverview for AI Overview markets). |
pages |
1 to 10 | Results pages to fetch. |
location or uule |
Google canonical City,Region,Country name, e.g. Austin,Texas,United States, or a pre-encoded UULE |
City-level targeting; mutually exclusive, and neither goes with url. Without either, Google is localized to the requested country. |
hl |
Interface language, e.g. en, pt-BR |
Without it, the country’s own language (de for DE, pt-BR for BR). |
device |
desktop, mobile, ios, android |
Default desktop. |
A US state is accepted and answered for the whole US; for a place inside the US use location, for example Texas,United States. Only ChatGPT and Gemini answer from inside a state (states).
With url, the query and gl are read from the URL, which may carry only q, gl, num, hl and uule; any other parameter (start, tbs, safe, tbm and the rest) is refused with a 400. For news results use Google News.
Handling the results
localResults,peopleAreSaying,knowledgeGraph,shoppingCards,recipes,videos,imagesandspellingare omitted when absent;aioverviewisnullwhen requested but not shown. Distinguish “not requested” (key missing) from “not shown” (null).localResults[].reviewsis Google’s display string (for example26K), not a number.peopleAreSaying[].dateis relative text such as5 days ago.ads[].priceon shopping-card ads carriesvalue,currencyandraw;rawdistinguishes a genuine price from labels such as installment offers.shoppingCards[].productLinkis usually an empty string because the card opens a Google overlay.recipesholds the cards of Google’s Recipes carousel in the order shown:title,linkto the recipe’s page,source(the site),ingredientsandtotalTimeas the card lists them,ratingout of 5 andreviews, the number of ratings.- An organic result with review stars carries
ratingout ofratingMax(5 for stars) andreviews, the number of votes; one showing a price carriespricewithrawas Google shows it ($30 to $60,Free delivery over $100), andvalueandcurrencyonly when that text is a single price. videosholds the cards of Google’s Videos and Short videos blocks in page order (a video in both appears twice):title,url,source(the channel or creator), and on Videos cardsplatform(for exampleYouTube) anddate.imagesholds Google’s Images block:title(the alt text),linkandthumbnail.redirectLinkappears beside a link only when Google served it as a redirect;POST /v1/monitor/google/gotoresolves one free of charge.include.googleGotois deprecated and ignored.
Whether an AI Overview appears can change between runs of the same query. Track presence as a rate over several runs, and store null as an observation.
Results differ by market and time of day. Keep the market fixed within a series and change one dimension at a time.
Many modules are omitted rather than returned empty, so default every module read (result.get("localResults", [])).
Ten pages per keyword is $0.00789 per task, $0.0086 with the AI Overview. Most rank tracking needs the first page or two; fetch deeper pages only for keywords where you rank there.
include.aioverview is enabled by the key being present, so {"markdown": false} still turns it on. It costs +$0.00071 only when Google shows one; a completed request with aioverview: null is still a success. Extra pages cost +$0.00071 each and paaAioverview is free, but responses with it take longer. A task costs at most $0.0086; a request reserves its maximum and is charged for the pages fetched.
Related: the best SERP APIs compared, every request field, pricing and failures, rank tracking, local rank tracking, monitoring Google AI Overviews, keyword research, People Also Ask keyword research, competitor analysis, web search API, brand protection, tracking SERP feature changes.
Questions
How much does a Google Search request cost?
A one-page request costs $0.0015 at the Starter tier ($1.00–$1.50 per 1,000 across tiers). Each extra page adds $0.00071, charged for the pages fetched; include.aioverview adds $0.00071 once when Google shows an overview; include.paaAioverview is free.
What happens when Google shows no AI Overview for my query?
If you requested it, result.aioverview is null. The +$0.00071 add-on is charged only when the response holds an overview, so a null overview costs nothing extra.
Can I send a Google search URL instead of a query?
Yes. Send url with a full Google web search URL on /search with a non-empty q; the query and gl are read from it. The URL may carry only q, gl, num, hl and uule; any other parameter, such as start, tbs, safe or tbm, is refused with a 400.
Can I target a city, a language or mobile results?
Yes. location (City,Region,Country, e.g. Austin,Texas,United States) or uule targets a city, hl sets the interface language, and device takes desktop, mobile, ios or android. localResults covers the desktop local pack.
How is this different from Google's Custom Search JSON API?
The Custom Search JSON API returns results from a Programmable Search Engine and, according to Google, is closed to new customers with existing customers transitioning by January 1, 2027. This endpoint returns the Google results page itself as structured data: organic results, ads, People Also Ask, local pack, knowledge graph, shopping cards and the AI Overview.
Are failed Google Search requests charged?
No. A failed request is charged nothing and its reservation is released. A completed request is charged even when Google shows no AI Overview.
From the blog
Best SERP APIs for 2027: SEO platforms and data teams
Is there a Google Search API? What exists in 2026
Best Google scraper for 2027: DIY, scraper APIs, SERP APIs
Docs
- Quickstart
- API reference
- Engine features
- Async tasks and batches
- Webhooks
- Coverage
- Pricing and failures
- Rate limits