Search Endpoint
Search Google and get structured SERP data as JSON
The Search endpoint performs a Google search for any query and returns fully parsed, structured JSON data. You get organic results, ads, knowledge graphs, local packs, video results, related questions, and more. All extracted and organized without any HTML parsing on your end.
Endpoint
GET https://api.scrape.do/plugin/google/searchRequest Parameters
Required
| Parameter | Type | Description |
|---|---|---|
token | string | Your Scrape.do API authentication token |
q | string | Search query. URL-encode spaces and special characters. pizza+new+york or pizza%20new%20york |
General
| Parameter | Type | Default | Description |
|---|---|---|---|
device | string | desktop | Device type for SERP layout. Accepted values: desktop, mobile |
start | integer | 0 | Result offset for pagination. 0 = 1st page, 10 = 2nd page, 20 = 3rd page, etc. |
include_html | boolean | false | When true, the raw Google HTML is included in the response html field. Useful for debugging and custom parsing |
Localization & Geo-targeting
| Parameter | Type | Default | Description |
|---|---|---|---|
hl | string | en | Host Language. Controls the language of the Google UI (buttons, labels, interface text). ISO 639-1 codes. Examples: tr, de, fr, ja, pt |
gl | string | us | Geo Location (datacenter country). Determines from which country's perspective results are ranked and returned. ISO 3166-1 alpha-2 codes. Examples: tr, de, gb, jp |
google_domain | string | google.com | Google domain to query. Supports ~70 regional domains. Prefixes https://, http://, and www. are automatically stripped. Examples: google.com.tr, google.de, google.co.uk |
location | string | - | Location name in Google's canonical format. Automatically encoded to UULE internally. Examples: Istanbul,Istanbul,Turkey, New York,New York,United States |
uule | string | - | Google UULE-encoded location string. Auto-generated from location when not provided. If both location and uule are sent, uule takes priority. location is sufficient for most use cases |
Result Filtering
| Parameter | Type | Default | Description |
|---|---|---|---|
lr | string | - | Language Restrict. Filters results to pages written in a specific language only. Format: lang_XX. Examples: lang_tr (Turkish), lang_en (English), lang_de (German) |
cr | string | - | Country Restrict. Filters results to pages originating from a specific country only. Format: countryXX. Examples: countryTR (Turkey), countryUS, countryDE |
safe | string | - | SafeSearch. Send active to filter adult content from results |
nfpr | boolean | false | When true, disables Google's automatic spelling correction. The "Did you mean..." suggestion will not alter results |
filter | string | - | Controls "Similar Results" and "Omitted Results" filters. Send 0 to disable and show all results. Default (not sent or 1) = filters active |
time_period | string | - | Time-based filter. Accepted values: last_hour, last_day, last_week, last_month, last_year |
hl vs lr / gl vs cr: hl and gl set the search context. Google treats them as hints, so results may still include other languages or countries. lr and cr apply strict filtering. Only results matching the specified language or country are returned.
Example Usage
Step 1: Define Your Search Query
Decide what you want to search for on Google. This can be:
- General queries:
pizza new york,best laptop 2026 - Local searches:
restaurants near me,hotels in istanbul - Informational queries:
how to learn python,what is web scraping
For this example, we'll search for "pizza new york":
Step 2: Send the API Request
curl --location --request GET 'https://api.scrape.do/plugin/google/search?token=<SDO-token>&q=pizza+new+york'import requests
import json
token = "<SDO-token>"
query = "pizza+new+york"
url = f"https://api.scrape.do/plugin/google/search?token={token}&q={query}"
response = requests.request("GET", url)
print(json.dumps(response.json(), indent=2))const axios = require('axios');
const token = "<SDO-token>";
const query = "pizza+new+york";
const url = `https://api.scrape.do/plugin/google/search?token=${token}&q=${query}`;
axios.get(url)
.then(response => {
console.log(JSON.stringify(response.data, null, 2));
})
.catch(error => {
console.error(error);
});package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
token := "<SDO-token>"
query := "pizza+new+york"
url := fmt.Sprintf(
"https://api.scrape.do/plugin/google/search?token=%s&q=%s",
token, query,
)
resp, err := http.Get(url)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}require 'net/http'
require 'json'
token = "<SDO-token>"
query = "pizza+new+york"
url = URI("https://api.scrape.do/plugin/google/search?token=#{token}&q=#{query}")
response = Net::HTTP.get(url)
puts JSON.pretty_generate(JSON.parse(response))import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class GoogleSearch {
public static void main(String[] args) throws Exception {
String token = "<SDO-token>";
String query = "pizza+new+york";
String url = String.format(
"https://api.scrape.do/plugin/google/search?token=%s&q=%s",
token, query
);
HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
conn.setRequestMethod("GET");
BufferedReader reader = new BufferedReader(
new InputStreamReader(conn.getInputStream())
);
String line;
StringBuilder response = new StringBuilder();
while ((line = reader.readLine()) != null) {
response.append(line);
}
reader.close();
System.out.println(response.toString());
}
}using System;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
string token = "<SDO-token>";
string query = "pizza+new+york";
string url = $"https://api.scrape.do/plugin/google/search?token={token}&q={query}";
using HttpClient client = new HttpClient();
string response = await client.GetStringAsync(url);
Console.WriteLine(response);
}
}<?php
$token = "<SDO-token>";
$query = "pizza+new+york";
$url = "https://api.scrape.do/plugin/google/search?token={$token}&q={$query}";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo json_encode(json_decode($response), JSON_PRETTY_PRINT);
?>Step 3: Receive Structured Results
The API returns a JSON object with all SERP elements parsed and categorized:
{
"search_parameters": {
"q": "pizza new york",
"hl": "en",
"gl": "us",
"device": "desktop",
"start": 0,
"google_domain": "google.com"
},
"search_information": {
"page_title": "pizza new york - Google Search",
"query_displayed": "pizza new york",
"total_results": 1250000000,
"time_taken_displayed": 0.52,
"organic_results_state": "Results for exact spelling",
"country": "United States",
"city": "New York"
},
"organic_results": [
{
"position": 1,
"title": "THE 10 BEST Pizza Places in New York City (Updated 2026)",
"link": "https://www.tripadvisor.com/Restaurants-g60763-c31-New_York_City_New_York.html",
"displayed_link": "https://www.tripadvisor.com › Restaurants",
"favicon": "https://www.tripadvisor.com/favicon.ico",
"snippet": "Best Pizza in New York City, New York: Find Tripadvisor traveller reviews of New York City Pizza places and search by price, location, and more.",
"snippet_highlighted_words": ["Pizza", "New York City"],
"rich_snippet": {
"bottom": {
"extensions": [
"Numero 28 Pizzeria · 4.6/5.0 (1.9K)",
"Sottocasa Pizzeria Harlem · 4.8/5.0 (444)",
"Bleecker Street Pizza · 4.5/5.0 (2K)",
"B Side Pizzeria · 4.5/5.0 (560)"
]
}
}
},
{
"position": 2,
"title": "Dove mangiare la pizza a New York. I 10 migliori indirizzi ...",
"link": "https://www.gamberorosso.it/...",
"displayed_link": "https://www.gamberorosso.it › do...",
"favicon": "https://www.gamberorosso.it/favicon.ico",
"snippet": "Le 10 migliori pizzerie italiane di New York scelte dal Gambero Rosso...",
"snippet_highlighted_words": ["pizza", "New York"],
"date": "14 Aug 2024"
},
{
"position": 3,
"title": "UNA PIZZA NAPOLETANA",
"link": "https://www.unapizza.com/",
"displayed_link": "https://www.unapizza.com",
"favicon": "https://www.unapizza.com/favicon.ico",
"snippet": "Anthony Mangieri's legendary NYC pizzeria. Anthony Mangieri is a pioneer of Neapolitan-style pizza in the United States.",
"snippet_highlighted_words": ["pizza"]
}
],
"related_questions": [
{
"question": "What is the most famous pizza in New York?",
"snippet": "Di Fara Pizza in Brooklyn is widely considered one of the most famous...",
"title": "Famous NYC Pizza - Food & Wine",
"link": "https://www.foodandwine.com/..."
},
{
"question": "What is the best pizza in NYC?",
"snippet": "The best pizza in NYC includes classic New York-style slices...",
"title": "Best Pizza NYC - TimeOut",
"link": "https://www.timeout.com/..."
},
{
"question": "How much is a slice in New York?",
"snippet": "The average price of a plain slice in New York City is around $3.50...",
"title": "NYC Pizza Prices - Eater NY",
"link": "https://www.eater.com/..."
}
],
"related_searches": [
{ "query": "best pizza in new york", "link": "https://www.google.com/search?q=best+pizza+in+new+york" },
{ "query": "pizza delivery new york", "link": "https://www.google.com/search?q=pizza+delivery+new+york" }
],
"pagination": {
"current": 0,
"next": "https://www.google.com/search?q=pizza+new+york&start=10",
"other_pages": {
"2": "...&start=10",
"3": "...&start=20"
}
}
}Pagination
To get additional pages of results, increment the start parameter by 10:
/plugin/google/search?token=...&q=pizza+new+york&start=10The start parameter uses zero-based offset: 0 = first page, 10 = second page, 20 = third page, and so on.
Response Structure
Top-Level Fields
| Field | Type | When Empty | Description |
|---|---|---|---|
search_parameters | object | always present | Echo of the request parameters sent by the client |
search_information | object | always present | Search metadata: total results, timing, detected location |
organic_results | array | [] | Standard web search results |
top_ads | array | [] | Sponsored results above organic results |
bottom_ads | array | [] | Sponsored results below organic results |
top_stories | array | [] | News and stories carousel |
related_questions | array | [] | "People Also Ask" expandable questions |
related_searches | array | [] | Related search query suggestions |
navigation | array | [] | Search type tabs (All, Images, News, etc.) |
video_results | array | [] | Video results section |
discussions_and_forums | array | [] | Forum and Reddit-style discussion results |
local_map | object | null | Map widget with GPS coordinates |
local_results | object | null | Local business listings (map pack) |
knowledge_graph | object | null | Knowledge panel for entities |
pagination | object | null | Pagination links and metadata |
html | string | omitted | Raw Google HTML. Only present when include_html=true |
Array fields always return [] when empty (never null). Object fields return null when absent. The html field is completely omitted unless include_html=true.
search_parameters
Echoes the request parameters. Always-present fields are shown below; optional fields appear only when sent by the client.
{
"q": "pizza new york",
"hl": "en",
"gl": "us",
"device": "desktop",
"start": 0,
"google_domain": "google.com",
"location": "New York,New York,United States",
"uule": "w+CAIQICIfTmV3IFlvcmssTmV3...",
"nfpr": true,
"lr": "lang_en",
"cr": "countryUS",
"safe": "active",
"time_period": "last_week",
"filter": "0"
}search_information
Search metadata. All fields are always present (empty string or zero when no data).
| Field | Type | Description |
|---|---|---|
page_title | string | HTML page title returned by Google |
query_displayed | string | The query as displayed by Google on the results page |
total_results | integer | Approximate total number of results reported by Google |
time_taken_displayed | float | Search time in seconds as displayed by Google |
organic_results_state | string | State of results (e.g., "Results for exact spelling") |
results_for | string | Corrected query if Google auto-corrected the search term |
country | string | Detected country from results context |
city | string | Detected city from results context |
organic_results[]
Standard web search results.
| Field | Type | Description |
|---|---|---|
position | integer | Result position on the page (1-indexed) |
title | string | Page title |
link | string | Direct URL to the page |
redirect_link | string | Google's redirect/tracking URL |
displayed_link | string | URL as shown in the SERP (breadcrumb format) |
thumbnail | string | Thumbnail image URL (when available) |
favicon | string | Website favicon URL |
snippet | string | Result description/snippet text |
snippet_highlighted_words | string[] | Bold/highlighted words within the snippet |
date | string | Publication date (e.g., "3 days ago", "Jan 15, 2025") |
source | string | Source website name |
sitelinks | object | Sitelinks: { "inline": [{ "title", "link", "description" }] } |
rich_snippet | object | Rich snippet data: { "bottom": { "extensions": ["Rating: 4.5", ...] } } |
top_ads[] & bottom_ads[]
Sponsored results. top_ads appear above organic results, bottom_ads appear below.
| Field | Type | Description |
|---|---|---|
position | integer | Ad position within its group (1-indexed) |
title | string | Ad headline |
url | string | Ad destination URL |
displayed_url | string | URL shown in the ad |
description | string | Ad description text |
phone | string | Phone number (if displayed in the ad) |
knowledge_graph
Rich knowledge panel. Fields vary by entity type (person, business, place, etc.).
| Field | Type | Description |
|---|---|---|
title | string | Entity name |
type | string | Entity type (e.g., "Restaurant", "Person", "Movie") |
knowledge_graph_type | string | Internal Knowledge Graph type identifier |
kgmid | string | Knowledge Graph Machine ID |
description | string | Entity description text |
source | object | { "name": "Wikipedia", "link": "..." } |
header_images | array | [{ "image": "...", "source": "..." }] |
facts | array | [{ "label": "Origin", "value": "Italy" }] |
rating | float | Rating score |
review_count | integer | Number of reviews |
address | string | Physical address |
phone | string | Phone number |
website | string | Official website URL |
open_hours | array | [{ "name": "Monday", "value": "10AM-11PM" }] |
local_map | object | { "link", "gps_coordinates": { "latitude", "longitude" } } |
social_media | array | [{ "platform": "Twitter", "url": "..." }] |
people_also_search_for | array | [{ "name", "link", "image" }] |
user_reviews | array | [{ "review", "rating", "user": { "name", "link" } }] |
Additional entity-dependent fields may include: age, born, born_location, spouse, children, education, tv_shows, price_range, service_options, directions, menu, reservations, popular_times, web_reviews, merchant_description, profiles, images, ludocid.
local_results
Local business results (Google Maps pack). Contains a places array and an optional link to more results.
{
"places": [{
"position": 1,
"title": "Joe's Pizza",
"place_id": "ChIJ...",
"rating": 4.6,
"reviews": 5200,
"type": "Pizza restaurant",
"address": "7 Carmine St, New York, NY",
"phone": "+1-212-366-1182",
"hours": "Open until 4:00 AM",
"website": "https://...",
"thumbnail": "https://...",
"gps_coordinates": { "latitude": 40.7306, "longitude": -74.0021 }
}],
"more_locations_link": "https://..."
}local_map
Map widget with Google Maps link and GPS coordinates.
{
"link": "https://www.google.com/maps/...",
"image": "https://...",
"gps_coordinates": { "latitude": 40.7128, "longitude": -74.006 }
}related_questions[]
"People Also Ask" expandable question boxes.
| Field | Type | Description |
|---|---|---|
question | string | The question text |
snippet | string | Answer snippet |
title | string | Source page title |
link | string | Source URL |
displayed_link | string | Displayed URL |
date | string | Date of the source |
video_results[]
| Field | Type | Description |
|---|---|---|
position | integer | Position in the video section |
title | string | Video title |
url | string | Video URL |
source | string | Platform name (e.g., "YouTube") |
channel | string | Channel name |
duration | string | Video duration (e.g., "12:34") |
date | string | Upload or publish date |
top_stories[]
News carousel. Each section has a title and an array of news items.
[{
"title": "Top Stories",
"items": [{
"position": 1,
"title": "...",
"link": "...",
"source": "NY Times",
"date": "2 hours ago",
"image": "..."
}]
}]discussions_and_forums[]
| Field | Type | Description |
|---|---|---|
position | integer | Position in the discussions section |
title | string | Thread title |
link | string | Thread URL |
source | string | Platform name (e.g., "Reddit", "Stack Overflow") |
date | string | Post date |
community | string | Community name (e.g., "r/FoodNYC") |
related_searches[]
| Field | Type | Description |
|---|---|---|
query | string | Related search query text |
link | string | Google search URL for this query |
navigation[]
| Field | Type | Description |
|---|---|---|
title | string | Tab name (e.g., "All", "Images", "News", "Maps") |
url | string | URL for that search type |
pagination
{
"current": 0,
"next": "https://www.google.com/search?q=...&start=10",
"other_pages": {
"2": "...&start=10",
"3": "...&start=20"
}
}Example Requests
Basic search:
/plugin/google/search?token=TOKEN&q=pizza+new+yorkTurkish results from Turkey, mobile device:
/plugin/google/search?token=TOKEN&q=pizza&hl=tr&gl=tr&device=mobile&google_domain=google.com.trLocation-based search (auto UULE encoding):
/plugin/google/search?token=TOKEN&q=restaurants&location=Istanbul,Istanbul,TurkeyAdvanced filtering:
/plugin/google/search?token=TOKEN&q=python+tutorial&lr=lang_en&cr=countryUS&nfpr=truePagination (2nd page):
/plugin/google/search?token=TOKEN&q=pizza+new+york&start=10Debug mode (include raw HTML):
/plugin/google/search?token=TOKEN&q=test&include_html=trueSearch queries must be URL-encoded. The response is gzip compressed with a minimum size of 2KB.

