Updated on 2026-05-12 NovaDataHub Engineering

Google SERP API

Retrieve structured Google search results β€” organic listings, ads (top & bottom), People Also Ask trees, related searches, and local pack entities β€” all as clean, stable JSON. Supports geo targeting (gl), language (hl), device emulation, and pagination via start / num. Requests are processed asynchronously by default; pass sync=true to wait for the result inline β€” ideal for Postman and quick integrations.

Authentication

All requests require your service API key in the x-api-key HTTP request header. Obtain your key from the Dashboard after enabling Google SERP.

x-api-key: YOUR_API_KEY
πŸ§ͺ
New to APIs? Test this instantly β€” no tools needed.

After enabling Google SERP on the Dashboard, click the Playground button next to your key. It pre-fills your x-api-key, lets you set parameters with dropdowns, sends the real request, and shows the live JSON response β€” all in the browser. Come back to this page when you’re ready to integrate in code.

Endpoints

Submit a search
GET /search
Poll job status
GET /search/jobs/{jobId}

Request modes

⚡ Async (default)

Returns HTTP 202 immediately with a jobId and statusUrl. Poll GET /search/jobs/{jobId} until status is completed or failed.

Best for bulk pipelines and background workers.

🔄 Sync (sync=true)

Waits up to ~130 s and returns the full result inline with HTTP 200. On timeout returns HTTP 504 with "sync_timeout" and the jobId so you can continue polling.

Best for Postman testing and one-off requests.

Query parameters

Required

  • q string β€” Search query. e.g. nike shoes

Localisation

  • gl string β€” Country code (ISO 3166-1 alpha-2). Default: us. In the Playground, selecting a location suggestion updates this automatically.
  • hl string β€” Interface language (BCP-47). Default: en
  • location string β€” Human-readable location in City, State, Country format. e.g. San Francisco, California, United States
  • uule string β€” Google-encoded location for city-level geo targeting.
  • ll string β€” Latitude/longitude pair for fine-grained targeting.

Pagination

  • num int β€” Results per page (1–50). Default: 10
  • start int β€” Zero-based result offset. Default: 0. Page 2 = start=10.

Device & filters

  • device string β€” desktop | mobile | tablet. Default: desktop
  • tbs string β€” Time filter. e.g. qdr:d (past 24 h), qdr:w (past week)
  • safe string β€” SafeSearch. active | off

Behaviour flags

  • sync bool β€” Wait for the result inline instead of returning a jobId. Default: false
  • debug bool β€” Include debug metadata in the response. Default: false
  • sessionId string β€” Optional string for proxy session stickiness.

Response fields (inside result)

organic[].{position, title, url, snippet, sitelinks[]} ads_top[] / ads_bottom[] paa[].{question, answer, links[]} related_searches[] local_pack[].{name, rating, address, phone}

Response shapes

Async β€” HTTP 202

{
  "ok": true,
  "jobId": "serp_a1b2c3d4",
  "statusUrl": "/search/jobs/serp_a1b2c3d4"
}

Job status β€” HTTP 200

{
  "ok": true,
  "jobId": "serp_a1b2c3d4",
  "status": "completed",
  "createdAt": "2025-01-15T10:00:00Z",
  "completedAt": "2025-01-15T10:00:04Z",
  "error": null,
  "result": { /* full SERP payload */ }
}

status: queued → running → completed | failed

Error responses

HTTPerrorMeaning
401invalid_keyAPI key missing or invalid.
400q is requiredThe q param was omitted.
402no_active_planNo active paid plan on this account.
402feature_not_in_planSERP not in current plan. Upgrade to Starter or above.
429rate_limitedPer-minute rate limit hit. Check resetsAt.
402quota_exceededMonthly call quota consumed.
504sync_timeoutSync wait timed out. Use the returned jobId to poll.
500data_source_failedInternal data source error.

cURL examples

Async (default) β€” recommended for production
# Step 1 β€” submit the search
curl -s -H "x-api-key: YOUR_API_KEY" \
  "https://novadatahub.com/search?q=nike+shoes&gl=us&hl=en&device=desktop"

# Response: { "ok":true, "jobId":"serp_abc123", "statusUrl":"/search/jobs/serp_abc123" }

# Step 2 β€” poll until status = "completed"
curl -s -H "x-api-key: YOUR_API_KEY" \
  "https://novadatahub.com/search/jobs/serp_abc123"
Sync β€” best for Postman & testing
curl -s -H "x-api-key: YOUR_API_KEY" \
  "https://novadatahub.com/search?q=nike+shoes&gl=us&hl=en&sync=true"
Mobile + page 2 (start=10)
curl -s -H "x-api-key: YOUR_API_KEY" \
  "https://novadatahub.com/search?q=best+shoes&gl=in&device=mobile&num=10&start=10&sync=true"

Postman guide

  1. Open Postman → New → HTTP Request.
  2. Set method to GET. URL: https://novadatahub.com/search
  3. Headers tab → add row β€” Key: x-api-key / Value: YOUR_API_KEY
  4. Params tab → add: q=nike shoes   gl=us   hl=en   sync=true
  5. Click Send. With sync=true the full SERP payload returns in the response body.
  6. Async polling: remove sync=true, copy the jobId, then GET /search/jobs/{jobId} (same header) until status=completed.
C# HttpClient β€” sync mode
using System.Net.Http.Json;
using System.Text.Json;

using var http = new HttpClient();
http.DefaultRequestHeaders.Add("x-api-key", "YOUR_API_KEY");

var result = await http.GetFromJsonAsync<JsonElement>(
    "https://novadatahub.com/search?q=nike+shoes&gl=us&hl=en&sync=true");

Console.WriteLine(result.ToString());
C# HttpClient β€” async + polling
using System.Net.Http.Json;
using System.Text.Json;

using var http = new HttpClient();
http.DefaultRequestHeaders.Add("x-api-key", "YOUR_API_KEY");

// 1) Submit
var init = await http.GetFromJsonAsync<JsonElement>(
    "https://novadatahub.com/search?q=nike+shoes&gl=us&hl=en");
var jobId = init.GetProperty("jobId").GetString();

// 2) Poll
JsonElement job;
do
{
    await Task.Delay(1500);
    job = (await http.GetFromJsonAsync<JsonElement>(
        $"https://novadatahub.com/search/jobs/{jobId}"))!;
}
while (job.GetProperty("status").GetString() is "queued" or "running");

Console.WriteLine(job.GetProperty("result").ToString());
Popular workflows

Use-case pages for this API

SERP API for rank tracking

Monitor visibility by keyword, market, and device with structured Google result data.

Open use case

Local SERP API

Track city-level or region-level Google visibility for local SEO and franchise reporting.

Open use case

People Also Ask API

Turn search question boxes into structured research for content planning and intent analysis.

Open use case
Comparison and tutorials

More pages that support evaluation and implementation

SerpApi alternative

Commercial comparison content for teams evaluating SERP API vendors and workflow fit.

Open comparison

Google SERP API vs in-house scraping

See the operational tradeoffs between a managed SERP API and maintaining your own collection stack.

Open comparison

Python and C# tutorials

Implementation guides for Python requests, .NET HttpClient, and API-driven keyword monitoring.

Open tutorials
Long-tail SEO topics

Crawlable content for localization, auth, and throughput questions

Teams evaluating a Google SERP API usually need more than a single endpoint reference. They want to understand how localization affects result quality, how to structure recurring rank-tracking jobs, and how to keep 401 or 429 errors from slowing production workflows. These topics are now covered directly in the public content graph so search engines and technical buyers can move from broad commercial pages into narrower implementation answers.

SERP localization strategy

Learn how to think about gl, hl, location targeting, and device context when collecting search results for local SEO or market-specific analysis.

Open guide

Rate-limit handling

See how to design queueing, backoff, and operator visibility when recurring SERP jobs hit throttle limits.

Open guide

Authentication debugging

Use the invalid-key troubleshooting guide when the right endpoint still appears to reject your requests.

Open guide

Async job polling strategy

Read the polling guide for calmer job-status checks, terminal-state handling, and sync-timeout recovery.

Open guide

Local rank tracking setup

Follow the workflow tutorial for city-level tracking, market definitions, and matched comparison sets.

Open tutorial

Store SERP results for rank tracking

Use the storage tutorial when you need normalized ranking records, raw payload retention, and comparison-ready market context.

Open tutorial

Best Google SERP API for local SEO

Read the local-SEO comparison page for buyer-focused evaluation around localization controls and reporting workflow fit.

Open comparison

SERP API async workflow

Follow the async workflow tutorial for job submission, polling cadence, timeout handling, and downstream result storage.

Open tutorial
Related links

Continue with connected pages

All APIs

Open the related NovaDataHub page for deeper documentation, comparisons, or implementation guidance.

Documentation hub

Open the related NovaDataHub page for deeper documentation, comparisons, or implementation guidance.

Solutions

Open the related NovaDataHub page for deeper documentation, comparisons, or implementation guidance.

Tutorials

Open the related NovaDataHub page for deeper documentation, comparisons, or implementation guidance.