Home/API Documentation

API Documentation

Complete reference for all SERP Search API endpoints.

Quick Start

Get up and running in a few steps:

2

Generate an API key from your dashboard.

3

Make your first request:

# 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.

MethodURL
GEThttps://api.serpsearch.com/api/v1/search

Parameters

NameTypeRequiredDefaultDescription
querystringYes--The search query.
pageintegerNo1Results page number (1-based, 10 results per page).
latnumberNo--Latitude for geo-targeted results.
lngnumberNo--Longitude for geo-targeted results.
locationstringNo--Location string for geo-targeting (e.g. "New York, NY, US").
response_typestringNojsonResponse format: json, html, both, or correlated.
jsbooleanNofalseWhen true, keeps JavaScript in HTML response; when false, strips script tags.
glstringNo--Country code for geo-targeting results (ISO 3166-1 alpha-2, e.g. "us", "de", "gb").
hlstringNo--Interface language code (ISO 639-1, e.g. "en", "de", "ar").
google_domainstringNo--Google domain to query, without "www." (e.g. "google.de", "google.co.uk").
lrstringNo--Restrict results to a specific language (e.g. "lang_en", "lang_de").
crstringNo--Restrict results to a specific country (e.g. "countryUS", "countryDE").
safestringNo--Safe search filter: "active" or "off".
uulestringNo--Pre-encoded UULE string for precise geo-targeting.
json_restrictorstringNo--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

MethodURL
GEThttps://api.serpsearch.com/api/v1/autocomplete

Parameters

NameTypeRequiredDefaultDescription
querystringYes--The search query to get suggestions for.
latnumberNo--Latitude for geo-targeted suggestions.
lngnumberNo--Longitude for geo-targeted suggestions.
locationstringNo--Location string for geo-targeted suggestions.
glstringNo--Country code for geo-targeting results (ISO 3166-1 alpha-2, e.g. "us", "de", "gb").
hlstringNo--Interface language code (ISO 639-1, e.g. "en", "de", "ar").
google_domainstringNo--Google domain to query, without "www." (e.g. "google.de", "google.co.uk").
json_restrictorstringNo--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

MethodURL
GEThttps://api.serpsearch.com/api/v1/translate

Parameters

NameTypeRequiredDefaultDescription
querystringYes--The text to translate.
langstringNoenTarget 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

MethodURL
GEThttps://api.serpsearch.com/api/v1/news

Parameters

NameTypeRequiredDefaultDescription
querystringYes--The news search query.
latnumberNo--Latitude for geo-targeted results.
lngnumberNo--Longitude for geo-targeted results.
locationstringNo--Location string for geo-targeted results.
glstringNo--Country code for geo-targeting results (ISO 3166-1 alpha-2, e.g. "us", "de", "gb").
hlstringNo--Interface language code (ISO 639-1, e.g. "en", "de", "ar").
google_domainstringNo--Google domain to query, without "www." (e.g. "google.de", "google.co.uk").
lrstringNo--Restrict results to a specific language (e.g. "lang_en", "lang_de").
crstringNo--Restrict results to a specific country (e.g. "countryUS", "countryDE").
safestringNo--Safe search filter: "active" or "off".
uulestringNo--Pre-encoded UULE string for precise geo-targeting.
json_restrictorstringNo--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

MethodURL
GEThttps://api.serpsearch.com/api/v1/images

Parameters

NameTypeRequiredDefaultDescription
querystringYes--The image search query.
pageintegerNo1Results page number (20 results per page).
latnumberNo--Latitude for geo-targeted results.
lngnumberNo--Longitude for geo-targeted results.
locationstringNo--Location string for geo-targeted results.
glstringNo--Country code for geo-targeting results (ISO 3166-1 alpha-2, e.g. "us", "de", "gb").
hlstringNo--Interface language code (ISO 639-1, e.g. "en", "de", "ar").
google_domainstringNo--Google domain to query, without "www." (e.g. "google.de", "google.co.uk").
lrstringNo--Restrict results to a specific language (e.g. "lang_en", "lang_de").
crstringNo--Restrict results to a specific country (e.g. "countryUS", "countryDE").
safestringNo--Safe search filter: "active" or "off".
uulestringNo--Pre-encoded UULE string for precise geo-targeting.
json_restrictorstringNo--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

MethodURL
GEThttps://api.serpsearch.com/api/v1/videos

Parameters

NameTypeRequiredDefaultDescription
querystringYes--The video search query.
pageintegerNo1Results page number (10 results per page).
latnumberNo--Latitude for geo-targeted results.
lngnumberNo--Longitude for geo-targeted results.
locationstringNo--Location string for geo-targeted results.
glstringNo--Country code for geo-targeting results (ISO 3166-1 alpha-2, e.g. "us", "de", "gb").
hlstringNo--Interface language code (ISO 639-1, e.g. "en", "de", "ar").
google_domainstringNo--Google domain to query, without "www." (e.g. "google.de", "google.co.uk").
lrstringNo--Restrict results to a specific language (e.g. "lang_en", "lang_de").
crstringNo--Restrict results to a specific country (e.g. "countryUS", "countryDE").
safestringNo--Safe search filter: "active" or "off".
uulestringNo--Pre-encoded UULE string for precise geo-targeting.
json_restrictorstringNo--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

MethodURL
GEThttps://api.serpsearch.com/api/v1/maps

Parameters

NameTypeRequiredDefaultDescription
querystringYes--The maps search query (e.g. business name, category).
latnumberNo--Latitude for geo-targeted results.
lngnumberNo--Longitude for geo-targeted results.
locationstringNo--Location string for geo-targeted results.
glstringNo--Country code for geo-targeting results (ISO 3166-1 alpha-2, e.g. "us", "de", "gb").
hlstringNo--Interface language code (ISO 639-1, e.g. "en", "de", "ar").
uulestringNo--Pre-encoded UULE string for precise geo-targeting.
json_restrictorstringNo--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

MethodURL
GEThttps://api.serpsearch.com/api/v1/maps/place

Parameters

NameTypeRequiredDefaultDescription
feature_idstringNo--The feature_id from a maps search result. Provide either feature_id or place_id.
place_idstringNo--The Google place_id (e.g. ChIJ...). Provide either feature_id or place_id.
glstringNo--Country code for geo-targeting results (ISO 3166-1 alpha-2, e.g. "us", "de", "gb").
hlstringNo--Interface language code (ISO 639-1, e.g. "en", "de", "ar").
json_restrictorstringNo--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

MethodURL
GEThttps://api.serpsearch.com/api/v1/maps/distance

Parameters

NameTypeRequiredDefaultDescription
from_latnumberYes--Starting point latitude.
from_lngnumberYes--Starting point longitude.
to_latnumberYes--Destination latitude.
to_lngnumberYes--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

MethodURL
GEThttps://api.serpsearch.com/api/v1/reviews

Parameters

NameTypeRequiredDefaultDescription
place_idstringYes--The place identifier. Accepts either a feature_id (0x...:0x...) or a Google place_id (ChIJ...).
sort_bystringNorelevantSort order: relevant, newest, high_rating, or low_rating.
page_idstringNo--Pagination token from a previous response's next_page field.
searchstringNo--Filter reviews by keyword.
latnumberNo--Latitude for geo-targeting.
lngnumberNo--Longitude for geo-targeting.
locationstringNo--Location string for geo-targeting.
glstringNo--Country code for geo-targeting results (ISO 3166-1 alpha-2, e.g. "us", "de", "gb").
hlstringNo--Interface language code (ISO 639-1, e.g. "en", "de", "ar").
json_restrictorstringNo--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."
  }
}
CodeHTTPDescription
INVALID_API_KEY401The API key is missing, malformed, or does not exist.
EXPIRED_API_KEY401The API key has passed its expiration date.
REVOKED_API_KEY401The API key has been manually revoked.
SUBSCRIPTION_REQUIRED403No active subscription found for this account.
SUBSCRIPTION_INACTIVE403The subscription exists but is not in ACTIVE state.
RATE_LIMIT_EXCEEDED429More than the allowed requests per second were sent. Slow down and retry.
QUOTA_EXCEEDED429Monthly request quota for the current billing period is exhausted.
INVALID_QUERY400The q / query parameter is missing, empty, or the request body is malformed JSON.
UPSTREAM_ERROR502The upstream search provider returned an error. Retry later.
INTERNAL_ERROR500An 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.
PlanMonthly requestsRequests / secondPrice
Starter80,00015$40 / mo
Pro800,00050$300 / mo
Business3,000,000150$1,000 / mo
EnterpriseCustomCustomContact us

You can monitor your current usage from the usage dashboard. Need higher limits? View all plans or contact us for Enterprise pricing.

Response Headers

Every response (including errors) includes the following headers to help you track your usage and rate limits:

HeaderDescription
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.