SERP API for rank tracking
Monitor visibility by keyword, market, and device with structured Google result data.
Open use case
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.
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
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.
GET /searchGET /search/jobs/{jobId}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=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.
nike shoesus. In the Playground, selecting a location suggestion updates this automatically.enCity, State, Country format. e.g. San Francisco, California, United States100. Page 2 = start=10.desktop | mobile | tablet. Default: desktopqdr:d (past 24 h), qdr:w (past week)active | offfalsefalseresult){
"ok": true,
"jobId": "serp_a1b2c3d4",
"statusUrl": "/search/jobs/serp_a1b2c3d4"
}{
"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
| HTTP | error | Meaning |
|---|---|---|
| 401 | invalid_key | API key missing or invalid. |
| 400 | q is required | The q param was omitted. |
| 402 | no_active_plan | No active paid plan on this account. |
| 402 | feature_not_in_plan | SERP not in current plan. Upgrade to Starter or above. |
| 429 | rate_limited | Per-minute rate limit hit. Check resetsAt. |
| 402 | quota_exceeded | Monthly call quota consumed. |
| 504 | sync_timeout | Sync wait timed out. Use the returned jobId to poll. |
| 500 | data_source_failed | Internal data source error. |
# 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"curl -s -H "x-api-key: YOUR_API_KEY" \ "https://novadatahub.com/search?q=nike+shoes&gl=us&hl=en&sync=true"
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"
https://novadatahub.com/searchx-api-key / Value: YOUR_API_KEYq=nike shoes gl=us hl=en sync=truesync=true the full SERP payload returns in the response body.sync=true, copy the jobId, then GET /search/jobs/{jobId} (same header) until status=completed.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());
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());
Monitor visibility by keyword, market, and device with structured Google result data.
Open use caseTrack city-level or region-level Google visibility for local SEO and franchise reporting.
Open use caseTurn search question boxes into structured research for content planning and intent analysis.
Open use caseCommercial comparison content for teams evaluating SERP API vendors and workflow fit.
Open comparisonSee the operational tradeoffs between a managed SERP API and maintaining your own collection stack.
Open comparisonImplementation guides for Python requests, .NET HttpClient, and API-driven keyword monitoring.
Open tutorialsTeams 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.
Learn how to think about gl, hl, location targeting, and device context when collecting search results for local SEO or market-specific analysis.
See how to design queueing, backoff, and operator visibility when recurring SERP jobs hit throttle limits.
Open guideUse the invalid-key troubleshooting guide when the right endpoint still appears to reject your requests.
Open guideRead the polling guide for calmer job-status checks, terminal-state handling, and sync-timeout recovery.
Open guideFollow the workflow tutorial for city-level tracking, market definitions, and matched comparison sets.
Open tutorialUse the storage tutorial when you need normalized ranking records, raw payload retention, and comparison-ready market context.
Open tutorialRead the local-SEO comparison page for buyer-focused evaluation around localization controls and reporting workflow fit.
Open comparisonFollow the async workflow tutorial for job submission, polling cadence, timeout handling, and downstream result storage.
Open tutorialOpen the related NovaDataHub page for deeper documentation, comparisons, or implementation guidance.
Open the related NovaDataHub page for deeper documentation, comparisons, or implementation guidance.
Open the related NovaDataHub page for deeper documentation, comparisons, or implementation guidance.
Open the related NovaDataHub page for deeper documentation, comparisons, or implementation guidance.