API Documentation Complete reference for all SERP Search API endpoints.
Quick Start Get up and running in a few steps:
3 Make your first request:
cURL Python Node.js PHP
# 1. Set your API key
API_KEY="mk_live_xxxxxxxxxxxxxxxxxxxxxxxx"
# 2. Make your first search
curl -G https://api.serpsearch.com/api/v1/search \
-H "Authorization: Bearer $API_KEY" \
--data-urlencode "query=web scraping best practices"
# 3. The response is JSON with organic_results, knowledge_graph, etc. Authentication All requests must include a valid API key as a Bearer token in the Authorization header.
Authorization: Bearer mk_live_xxxxxxxxxxxxxxxxxxxxxxxx You can generate API keys from your dashboard . Keys are tied to your subscription and track usage against your monthly quota.
Important: Keep your API key secret. Do not expose it in client-side code or public repositories. If you suspect a key has been compromised, revoke it immediately from your dashboard and generate a new one.
Web Search Method URL GET https://api.serpsearch.com/api/v1/search
Parameters Name Type Required Default Description querystring Yes -- The search query. pageinteger No 1Results page number (1-based, 10 results per page). latnumber No -- Latitude for geo-targeted results. lngnumber No -- Longitude for geo-targeted results. locationstring No -- Location string for geo-targeting (e.g. "New York, NY, US"). response_typestring No jsonResponse format: json, html, both, or correlated. jsboolean No falseWhen true, keeps JavaScript in HTML response; when false, strips script tags. glstring No -- Country code for geo-targeting results (ISO 3166-1 alpha-2, e.g. "us", "de", "gb"). hlstring No -- Interface language code (ISO 639-1, e.g. "en", "de", "ar"). google_domainstring No -- Google domain to query, without "www." (e.g. "google.de", "google.co.uk"). lrstring No -- Restrict results to a specific language (e.g. "lang_en", "lang_de"). crstring No -- Restrict results to a specific country (e.g. "countryUS", "countryDE"). safestring No -- Safe search filter: "active" or "off". uulestring No -- Pre-encoded UULE string for precise geo-targeting. json_restrictorstring No -- Comma-separated list of response JSON fields to include (e.g. "local_map,organic_results[0]").
Response {
"search_info": {
"total_results": "About 21,600,000 results",
"time_taken": "0.29s"
},
"organic_results": [
{
"title": "Beautiful Soup: Build a Web Scraper With Python",
"url": "https://realpython.com/beautiful-soup-web-scraper-python/",
"website": "Real Python Tutorials",
"position": 1,
"description": "Beautiful Soup is a Python library designed for parsing HTML and XML documents...",
"visible_url": "https://realpython.com › beautiful-soup-web-scraper-py...",
"answer": null,
"date": null,
"thumbnail": null
}
],
"knowledge_graph": { "title": "...", "description": "...", ... },
"definition_result": null,
"people_also_ask": [{ "question": "Is Python good for web scraping?" }],
"weather_result": null,
"related_searches": [{ "query": "python web scraping library" }],
"local_results": null,
"top_stories": null
} Example curl -G "https://api.serpsearch.com/api/v1/search" \
-H "Authorization: Bearer YOUR_API_KEY" \
--data-urlencode "query=latest AI models" \
-d "page=1" -d "gl=us" -d "hl=en" Autocomplete Method URL GET https://api.serpsearch.com/api/v1/autocomplete
Parameters Name Type Required Default Description querystring Yes -- The search query to get suggestions for. latnumber No -- Latitude for geo-targeted suggestions. lngnumber No -- Longitude for geo-targeted suggestions. locationstring No -- Location string for geo-targeted suggestions. glstring No -- Country code for geo-targeting results (ISO 3166-1 alpha-2, e.g. "us", "de", "gb"). hlstring No -- Interface language code (ISO 639-1, e.g. "en", "de", "ar"). google_domainstring No -- Google domain to query, without "www." (e.g. "google.de", "google.co.uk"). json_restrictorstring No -- Comma-separated list of response JSON fields to include (e.g. "local_map,organic_results[0]").
Response [
{
"title": "python web scraping"
},
{
"title": "python web scraping library"
},
{
"title": "python web scraping cookbook",
"additional_info": {
"title": "Python Web Scraping Cookbook",
"description": "Book by Michael Heydt",
"image": "https://..."
}
}
] Example curl -G "https://api.serpsearch.com/api/v1/autocomplete" \
-H "Authorization: Bearer YOUR_API_KEY" \
--data-urlencode "query=python web scraping" Translation Method URL GET https://api.serpsearch.com/api/v1/translate
Parameters Name Type Required Default Description querystring Yes -- The text to translate. langstring No enTarget language code (e.g. en, es, fr, de, ja).
Response {
"translation": "Hello world",
"sentences": [
{
"original": "Hola mundo",
"translation": "Hello world"
}
]
} Example curl -G "https://api.serpsearch.com/api/v1/translate" \
-H "Authorization: Bearer YOUR_API_KEY" \
--data-urlencode "query=Hola mundo" \
-d "lang=en" News Method URL GET https://api.serpsearch.com/api/v1/news
Parameters Name Type Required Default Description querystring Yes -- The news search query. latnumber No -- Latitude for geo-targeted results. lngnumber No -- Longitude for geo-targeted results. locationstring No -- Location string for geo-targeted results. glstring No -- Country code for geo-targeting results (ISO 3166-1 alpha-2, e.g. "us", "de", "gb"). hlstring No -- Interface language code (ISO 639-1, e.g. "en", "de", "ar"). google_domainstring No -- Google domain to query, without "www." (e.g. "google.de", "google.co.uk"). lrstring No -- Restrict results to a specific language (e.g. "lang_en", "lang_de"). crstring No -- Restrict results to a specific country (e.g. "countryUS", "countryDE"). safestring No -- Safe search filter: "active" or "off". uulestring No -- Pre-encoded UULE string for precise geo-targeting. json_restrictorstring No -- Comma-separated list of response JSON fields to include (e.g. "local_map,organic_results[0]").
Response [
{
"group_name": "Ungrouped",
"articles": [
{
"title": "February 2026 Google Discover Core Update Is Done Rolling Out",
"url": "https://www.seroundtable.com/february-2026-google-discover-core-update-done.html",
"created_at": 1772188980
},
{
"title": "Google's Discover Core Update Finishes Rolling Out",
"url": "https://www.searchenginejournal.com/googles-discover-core-update-finishes/568413/",
"created_at": 1772198715
}
]
}
] Example curl -G "https://api.serpsearch.com/api/v1/news" \
-H "Authorization: Bearer YOUR_API_KEY" \
--data-urlencode "query=artificial intelligence" Image Search Method URL GET https://api.serpsearch.com/api/v1/images
Parameters Name Type Required Default Description querystring Yes -- The image search query. pageinteger No 1Results page number (20 results per page). latnumber No -- Latitude for geo-targeted results. lngnumber No -- Longitude for geo-targeted results. locationstring No -- Location string for geo-targeted results. glstring No -- Country code for geo-targeting results (ISO 3166-1 alpha-2, e.g. "us", "de", "gb"). hlstring No -- Interface language code (ISO 639-1, e.g. "en", "de", "ar"). google_domainstring No -- Google domain to query, without "www." (e.g. "google.de", "google.co.uk"). lrstring No -- Restrict results to a specific language (e.g. "lang_en", "lang_de"). crstring No -- Restrict results to a specific country (e.g. "countryUS", "countryDE"). safestring No -- Safe search filter: "active" or "off". uulestring No -- Pre-encoded UULE string for precise geo-targeting. json_restrictorstring No -- Comma-separated list of response JSON fields to include (e.g. "local_map,organic_results[0]").
Response [
{
"title": "AI Generated Art",
"url": "https://example.com/page",
"source": "example.com",
"alt": "AI generated artwork",
"is_licensable": false,
"preview": {
"url": "https://example.com/thumb.jpg",
"width": 300,
"height": 200
},
"full": {
"url": "https://example.com/full.jpg",
"width": 1920,
"height": 1080
}
}
] Example curl -G "https://api.serpsearch.com/api/v1/images" \
-H "Authorization: Bearer YOUR_API_KEY" \
--data-urlencode "query=sunset photography" \
-d "page=1" Video Search Method URL GET https://api.serpsearch.com/api/v1/videos
Parameters Name Type Required Default Description querystring Yes -- The video search query. pageinteger No 1Results page number (10 results per page). latnumber No -- Latitude for geo-targeted results. lngnumber No -- Longitude for geo-targeted results. locationstring No -- Location string for geo-targeted results. glstring No -- Country code for geo-targeting results (ISO 3166-1 alpha-2, e.g. "us", "de", "gb"). hlstring No -- Interface language code (ISO 639-1, e.g. "en", "de", "ar"). google_domainstring No -- Google domain to query, without "www." (e.g. "google.de", "google.co.uk"). lrstring No -- Restrict results to a specific language (e.g. "lang_en", "lang_de"). crstring No -- Restrict results to a specific country (e.g. "countryUS", "countryDE"). safestring No -- Safe search filter: "active" or "off". uulestring No -- Pre-encoded UULE string for precise geo-targeting. json_restrictorstring No -- Comma-separated list of response JSON fields to include (e.g. "local_map,organic_results[0]").
Response [
{
"title": "Introduction to Machine Learning",
"url": "https://youtube.com/watch?v=...",
"description": "A beginner-friendly guide...",
"thumbnail": "https://i.ytimg.com/vi/.../default.jpg",
"duration": "12:34",
"website": "youtube.com",
"channel_name": "Tech Channel",
"upload_date": "2024-01-10"
}
] Example curl -G "https://api.serpsearch.com/api/v1/videos" \
-H "Authorization: Bearer YOUR_API_KEY" \
--data-urlencode "query=machine learning tutorial" \
-d "page=1" Maps Search Method URL GET https://api.serpsearch.com/api/v1/maps
Parameters Name Type Required Default Description querystring Yes -- The maps search query (e.g. business name, category). latnumber No -- Latitude for geo-targeted results. lngnumber No -- Longitude for geo-targeted results. locationstring No -- Location string for geo-targeted results. glstring No -- Country code for geo-targeting results (ISO 3166-1 alpha-2, e.g. "us", "de", "gb"). hlstring No -- Interface language code (ISO 639-1, e.g. "en", "de", "ar"). uulestring No -- Pre-encoded UULE string for precise geo-targeting. json_restrictorstring No -- Comma-separated list of response JSON fields to include (e.g. "local_map,organic_results[0]").
Response {
"results": [
{
"name": "Google France",
"address": "Google France, 8 Rue de Londres, 75009 Paris, France",
"rating": 4.1,
"place_id": "ChIJixLu7DBu5kcRQnIpA2tErS8",
"feature_id": "0x47e66e30ecee128b:0x2fad446b03297242",
"website": "http://google.com/",
"lat": 48.8775,
"lng": 2.3300,
"timezone": "Europe/Paris",
"country_code": "FR",
"categories": ["Corporate office", "Software company"],
"opening_hours": ["Friday: 9:30 am–7:30 pm"]
}
]
} Example curl -G "https://api.serpsearch.com/api/v1/maps" \
-H "Authorization: Bearer YOUR_API_KEY" \
--data-urlencode "query=google offices in paris" Place Details Method URL GET https://api.serpsearch.com/api/v1/maps/place
Parameters Name Type Required Default Description feature_idstring No -- The feature_id from a maps search result. Provide either feature_id or place_id. place_idstring No -- The Google place_id (e.g. ChIJ...). Provide either feature_id or place_id. glstring No -- Country code for geo-targeting results (ISO 3166-1 alpha-2, e.g. "us", "de", "gb"). hlstring No -- Interface language code (ISO 639-1, e.g. "en", "de", "ar"). json_restrictorstring No -- Comma-separated list of response JSON fields to include (e.g. "local_map,organic_results[0]").
Response {
"name": "Auto Urgnano srl",
"address": "Auto Urgnano srl, Via Leon Battista Alberti, 18, 24059 Urgnano BG, Italy",
"rating": 4.4,
"review_count": 115,
"place_id": "ChIJE4BAyxZFgUcRrOjaYjiUOI4",
"feature_id": "0x47814516cb408013:0x8e38943862dae8ac",
"logo": "https://streetviewpixels-pa...",
"link": "https://www.google.com/maps/place/?q=place_id:ChIJE4BAyxZFgUcRrOjaYjiUOI4",
"lat": 45.5898,
"lng": 9.7016,
"timezone": "Europe/Rome",
"country_code": "IT",
"categories": ["Used car dealer"],
"opening_hours": ["Friday: 9 am–6:30 pm", "Saturday: 9 am–4 pm", "Sunday: Closed"],
"rating_distribution": { "5": 91, "4": 7, "3": 1, "2": 5, "1": 11 }
} Example curl -G "https://api.serpsearch.com/api/v1/maps/place" \
-H "Authorization: Bearer YOUR_API_KEY" \
--data-urlencode "feature_id=0x47814516cb408013:0x8e38943862dae8ac" Distance Method URL GET https://api.serpsearch.com/api/v1/maps/distance
Parameters Name Type Required Default Description from_latnumber Yes -- Starting point latitude. from_lngnumber Yes -- Starting point longitude. to_latnumber Yes -- Destination latitude. to_lngnumber Yes -- Destination longitude.
Response {
"distance_text": "5.2 mi",
"duration_text": "15 mins",
"distance_meters": 8368
} Example curl -G "https://api.serpsearch.com/api/v1/maps/distance" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d "from_lat=40.758" -d "from_lng=-73.9855" \
-d "to_lat=40.7829" -d "to_lng=-73.9654" Reviews Method URL GET https://api.serpsearch.com/api/v1/reviews
Parameters Name Type Required Default Description place_idstring Yes -- The place identifier. Accepts either a feature_id (0x...:0x...) or a Google place_id (ChIJ...). sort_bystring No relevantSort order: relevant, newest, high_rating, or low_rating. page_idstring No -- Pagination token from a previous response's next_page field. searchstring No -- Filter reviews by keyword. latnumber No -- Latitude for geo-targeting. lngnumber No -- Longitude for geo-targeting. locationstring No -- Location string for geo-targeting. glstring No -- Country code for geo-targeting results (ISO 3166-1 alpha-2, e.g. "us", "de", "gb"). hlstring No -- Interface language code (ISO 639-1, e.g. "en", "de", "ar"). json_restrictorstring No -- Comma-separated list of response JSON fields to include (e.g. "local_map,organic_results[0]").
Response {
"reviews": [
{
"review": {
"id": "abc123",
"rating": 5,
"text": "Amazing place, highly recommend!",
"translated_text": null,
"lang": "en",
"created_at": 1704873600,
"updated_at": null,
"link": "https://..."
},
"user": {
"id": "1234567890",
"name": "John D.",
"image_url": "https://...",
"review_count": 42,
"profile_url": "https://..."
},
"response": {
"text": "Thank you for your kind words!",
"translated_text": null,
"lang": "en",
"created_at": 1704960000
}
}
],
"next_page": "eyJwYWdlIjoyf..."
} Example curl -G "https://api.serpsearch.com/api/v1/reviews" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d "place_id=0x47814516cb408013:0x8e38943862dae8ac" \
-d "sort_by=newest" Error Codes All errors follow the same envelope shape:
{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Rate limit exceeded. Please slow down your requests."
}
} Code HTTP Description INVALID_API_KEY401 The API key is missing, malformed, or does not exist. EXPIRED_API_KEY401 The API key has passed its expiration date. REVOKED_API_KEY401 The API key has been manually revoked. SUBSCRIPTION_REQUIRED403 No active subscription found for this account. SUBSCRIPTION_INACTIVE403 The subscription exists but is not in ACTIVE state. RATE_LIMIT_EXCEEDED429 More than the allowed requests per second were sent. Slow down and retry. QUOTA_EXCEEDED429 Monthly request quota for the current billing period is exhausted. INVALID_QUERY400 The q / query parameter is missing, empty, or the request body is malformed JSON. UPSTREAM_ERROR502 The upstream search provider returned an error. Retry later. INTERNAL_ERROR500 An unexpected server-side error occurred.
Rate Limits & Quotas Two separate limits apply to every request:
Per-second rate limit -- enforced with a sliding window. Exceeding it returns RATE_LIMIT_EXCEEDED (HTTP 429) with a Retry-After: 1 header.Monthly quota -- resets with your billing period. Exceeding it returns QUOTA_EXCEEDED (HTTP 429). Upgrade your plan to increase your limit.Plan Monthly requests Requests / second Price Starter 80,000 15 $40 / mo Pro 800,000 50 $300 / mo Business 3,000,000 150 $1,000 / mo Enterprise Custom Custom Contact us
You can monitor your current usage from the usage dashboard . Need higher limits? View all plans or contact us for Enterprise pricing.
Every response (including errors) includes the following headers to help you track your usage and rate limits:
Header Description X-RateLimit-LimitMaximum requests per second allowed for your plan. X-RateLimit-RemainingRequests remaining in the current one-second window. X-RateLimit-ResetUnix timestamp (seconds) when the rate limit window resets. X-Quota-UsedTotal requests used in the current billing period. X-Quota-LimitTotal requests allowed in the current billing period. X-Response-TimeEnd-to-end server processing time (e.g. 142ms). Only present on successful responses. Retry-AfterSeconds to wait before retrying. Present only on RATE_LIMIT_EXCEEDED responses.
Ready to get started? Create a free account, pick a plan, and generate your API key in minutes.