curl --request GET \
--url https://scrapebadger.com/v1/google/search \
--header 'x-api-key: <api-key>'import requests
url = "https://scrapebadger.com/v1/google/search"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://scrapebadger.com/v1/google/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://scrapebadger.com/v1/google/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://scrapebadger.com/v1/google/search"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://scrapebadger.com/v1/google/search")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://scrapebadger.com/v1/google/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"search_information": {
"query_displayed": "<string>",
"total_results": 123,
"time_taken": 123,
"organic_results_state": "<string>",
"url": "<string>"
},
"pagination": {
"current": 1,
"next": "<string>",
"total_results": 123,
"total_pages": 123,
"page_no": {}
},
"ai_overview": {
"text_blocks": [
{
"type": "paragraph",
"snippet": "<string>",
"snippet_links": [
{
"link": "<string>",
"link_text": "<string>"
}
],
"list_items": [
{
"title": "<string>",
"snippet": "<string>",
"snippet_links": [
{
"link": "<string>",
"link_text": "<string>"
}
]
}
],
"video": {
"link": "<string>",
"channel": "<string>",
"source": "<string>",
"date": "<string>",
"thumbnail": "<string>",
"duration": "<string>"
},
"video_links": [
{
"link": "<string>",
"channel": "<string>",
"source": "<string>",
"date": "<string>",
"thumbnail": "<string>",
"duration": "<string>"
}
]
}
],
"references": [
{
"index": 123,
"title": "<string>",
"link": "<string>",
"snippet": "<string>",
"source": "<string>",
"logo": "<string>"
}
],
"page_token": "<string>",
"deferred": false
},
"organic_results": [
{
"position": 123,
"title": "<string>",
"link": "<string>",
"displayed_link": "<string>",
"snippet": "<string>",
"highlighted_keywords": [
"<string>"
],
"source": "<string>",
"favicon": "<string>",
"sitelinks": [
{
"title": "<string>",
"link": "<string>",
"snippet": "<string>"
}
],
"inline_sitelinks": [
{
"title": "<string>",
"date": "<string>"
}
],
"date": "<string>",
"rank": 123,
"page_rank": 123
}
],
"ads": [
{
"title": "<string>",
"link": "<string>",
"position": 123,
"displayed_link": "<string>",
"description": "<string>",
"extensions": [
"<string>"
]
}
],
"knowledge_graph": {
"title": "<string>",
"type": "<string>",
"description": "<string>",
"image": "<string>",
"source": "<string>",
"attributes": {}
},
"local_results": [
{
"title": "<string>",
"place_id": "<string>",
"rating": 123,
"reviews": 123,
"address": "<string>",
"phone": "<string>",
"type": "<string>",
"gps_coordinates": {
"lat": 123,
"lng": 123
}
}
],
"related_questions": [
{
"question": "<string>",
"rank": 123,
"title": "<string>",
"link": "<string>",
"snippet": "<string>",
"displayed_link": "<string>",
"source_logo": "<string>"
}
],
"related_searches": [
{
"query": "<string>",
"link": "<string>"
}
],
"people_also_search_for": [
{
"name": "<string>",
"link": "<string>",
"thumbnail": "<string>"
}
],
"news_results": [
{
"title": "<string>",
"link": "<string>",
"source": "<string>",
"date": "<string>",
"thumbnail": "<string>"
}
],
"inline_videos": [
{
"title": "<string>",
"source": "<string>",
"thumbnail": "<string>",
"platform": "<string>",
"duration": "<string>",
"date": "<string>",
"position": 123
}
],
"shopping_results": [
{
"title": "<string>",
"price": "<string>",
"source": "<string>",
"link": "<string>",
"thumbnail": "<string>",
"rating": 123,
"reviews": 123
}
]
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Google web search
Search Google and get structured results (organic, ads, KG, AI overview, PAA).
curl --request GET \
--url https://scrapebadger.com/v1/google/search \
--header 'x-api-key: <api-key>'import requests
url = "https://scrapebadger.com/v1/google/search"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://scrapebadger.com/v1/google/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://scrapebadger.com/v1/google/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://scrapebadger.com/v1/google/search"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://scrapebadger.com/v1/google/search")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://scrapebadger.com/v1/google/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"search_information": {
"query_displayed": "<string>",
"total_results": 123,
"time_taken": 123,
"organic_results_state": "<string>",
"url": "<string>"
},
"pagination": {
"current": 1,
"next": "<string>",
"total_results": 123,
"total_pages": 123,
"page_no": {}
},
"ai_overview": {
"text_blocks": [
{
"type": "paragraph",
"snippet": "<string>",
"snippet_links": [
{
"link": "<string>",
"link_text": "<string>"
}
],
"list_items": [
{
"title": "<string>",
"snippet": "<string>",
"snippet_links": [
{
"link": "<string>",
"link_text": "<string>"
}
]
}
],
"video": {
"link": "<string>",
"channel": "<string>",
"source": "<string>",
"date": "<string>",
"thumbnail": "<string>",
"duration": "<string>"
},
"video_links": [
{
"link": "<string>",
"channel": "<string>",
"source": "<string>",
"date": "<string>",
"thumbnail": "<string>",
"duration": "<string>"
}
]
}
],
"references": [
{
"index": 123,
"title": "<string>",
"link": "<string>",
"snippet": "<string>",
"source": "<string>",
"logo": "<string>"
}
],
"page_token": "<string>",
"deferred": false
},
"organic_results": [
{
"position": 123,
"title": "<string>",
"link": "<string>",
"displayed_link": "<string>",
"snippet": "<string>",
"highlighted_keywords": [
"<string>"
],
"source": "<string>",
"favicon": "<string>",
"sitelinks": [
{
"title": "<string>",
"link": "<string>",
"snippet": "<string>"
}
],
"inline_sitelinks": [
{
"title": "<string>",
"date": "<string>"
}
],
"date": "<string>",
"rank": 123,
"page_rank": 123
}
],
"ads": [
{
"title": "<string>",
"link": "<string>",
"position": 123,
"displayed_link": "<string>",
"description": "<string>",
"extensions": [
"<string>"
]
}
],
"knowledge_graph": {
"title": "<string>",
"type": "<string>",
"description": "<string>",
"image": "<string>",
"source": "<string>",
"attributes": {}
},
"local_results": [
{
"title": "<string>",
"place_id": "<string>",
"rating": 123,
"reviews": 123,
"address": "<string>",
"phone": "<string>",
"type": "<string>",
"gps_coordinates": {
"lat": 123,
"lng": 123
}
}
],
"related_questions": [
{
"question": "<string>",
"rank": 123,
"title": "<string>",
"link": "<string>",
"snippet": "<string>",
"displayed_link": "<string>",
"source_logo": "<string>"
}
],
"related_searches": [
{
"query": "<string>",
"link": "<string>"
}
],
"people_also_search_for": [
{
"name": "<string>",
"link": "<string>",
"thumbnail": "<string>"
}
],
"news_results": [
{
"title": "<string>",
"link": "<string>",
"source": "<string>",
"date": "<string>",
"thumbnail": "<string>"
}
],
"inline_videos": [
{
"title": "<string>",
"source": "<string>",
"thumbnail": "<string>",
"platform": "<string>",
"duration": "<string>",
"date": "<string>",
"position": 123
}
],
"shopping_results": [
{
"title": "<string>",
"price": "<string>",
"source": "<string>",
"link": "<string>",
"thumbnail": "<string>",
"rating": 123,
"reviews": 123
}
]
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}num parameter is deprecated. Google no longer honours num to widen a page — a single request returns roughly 10 organic results per page, regardless of the value you pass. To collect more results, paginate with the start offset (start=0, 10, 20, …) and merge the pages client-side.Authorizations
Query Parameters
Search query (supports Google operators like site:, inurl:, intitle:)
Country code (e.g. us, gb, de, fr)
Language code (e.g. en, es, fr)
Results per page
1 <= x <= 100Pagination offset (0, 10, 20...)
x >= 0Google domain (e.g. google.com, google.co.uk)
desktop or mobile
City-level geo-targeting (e.g. 'New York, USA')
Language restrict (e.g. lang_en)
Time-based search filter (e.g. qdr:d for past 24h)
Safe search (active/off)
Encoded location parameter (UULE)
Include omitted results (0=show all, 1=filter)
0 <= x <= 1Disable auto-correction (1=exact match)
0 <= x <= 1Country restrict (e.g. countryUS|countryGB)
Google My Business CID (place ID)
Knowledge Graph map view ID
Knowledge Graph entity ID
Cached search parameters
Layout control (e.g. gwp;0,7)
Google filter string
When true, chase Google's deferred AI Overview page_token with a follow-up fetch and merge the result into ai_overview. Adds ~1s and 1 credit when the SERP actually defers the overview.
Response mode. full (default): complete SERP with all blocks (organic, ads, knowledge graph, local pack, AI overview, news, related questions, etc). fast: lite endpoint via gbv=1 that returns ONLY organic results + related searches in ~0.6-1s cold (vs 1.5-2s full). Use when you only need organic results and can skip rich features.
full, fast Response
Successful Response
Response for GET /api/v1/search.
Metadata about the search query.
Show child attributes
Show child attributes
Pagination metadata.
Show child attributes
Show child attributes
Google AI Overview (AI-generated summary).
Google increasingly serves the AI Overview as a deferred block — the
initial SERP HTML contains only a placeholder plus a page_token that
the client has to POST back to retrieve the actual content. When that
happens, the SERP parser populates page_token and leaves
text_blocks/references empty. Callers of /v1/google/search can pass
ai_overview=true to have the scraper chase the token automatically and
merge the result back into this object.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Knowledge Graph panel.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes

