POST /v1/search · num=100
Google Rank Tracker API
Find where a domain ranks in Google's top 100 for any keyword, country, city and device. num=100 returns all 100 positions in one call for 7 credits, and the batch lane halves that for overnight tracking jobs.
Overview
What the Google Rank Tracker API does
Rank tracking is built on /v1/search. Since Google removed num=100 from its own URLs, getting the top 100 means ten page requests. SerpKite does that for you and bills it as a depth bundle: 7 credits instead of 10.
Positions are only useful if you can match them. Every result carries the resolved destination link (no /goto or /url?q= redirects) and a canonical domain without www., so matching your site is a string comparison. If you only need one domain's position, POST /v1/rank returns just that. For scheduled jobs, POST /v1/batches queues requests at half price and delivers each result to your webhook.
What you get
-
results[].positioninteger - 1-based organic position across all 100 results.
-
results[].linkstring - Resolved destination URL, never a Google redirect.
-
results[].domainstring - Canonical host without www., for exact matching.
-
places[] / top_stories[]array - SERP features that push organic results down, when present.
-
metaobject - request_id, credits_used, cached, engine, latency_ms, resolved_urls and parse_quality. parse_quality=empty means the call was not billed.
Request
curl https://api.serpkite.com/v1/search \
-H "Authorization: Bearer $SERPKITE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"q":"best crm for startups","country":"us","language":"en","num":100,"fields":"results.position,results.link,results.domain"}'Response (illustrative, placeholder domains)
{
"results": [
{
"position": 1,
"link": "https://www.example.com/best-crm-startups",
"domain": "example.com"
},
{
"position": 2,
"link": "https://crm.example.org/blog/startup-crm-guide",
"domain": "crm.example.org"
},
{
"position": 3,
"link": "https://reviews.example.net/crm",
"domain": "reviews.example.net"
},
{
"position": 37,
"link": "https://yourapp.example.io/blog/crm-for-startups",
"domain": "yourapp.example.io"
}
],
"meta": {
"request_id": "req_01J8ZK4M6Q2V7",
"credits_used": 7,
"engine": "google",
"cached": false,
"latency_ms": 812,
"resolved_urls": true,
"parse_quality": "ok"
}
}
Every response also carries X-Credits-Used, X-Credits-Remaining,
X-Cache and X-Tokens-Estimate headers.
Run this query in the playground
Find a domain's position
Top 100 in one call, matched by domain
Request num=100, project only the three fields you need, and scan for your domain. Because
domain is canonical (no www.) and link is the
real destination, there's no redirect decoding or URL normalizing on your side.
1
credit, top 10
7
credits, top 100 realtime
3.5
credits, top 100 batch lane
from serpkite import SerpKite
sk = SerpKite() # reads SERPKITE_API_KEY
# POST /v1/rank checks the top 100 by default (7 credits, like num=100 on /v1/search)
res = sk.rank("best crm for startups", "yourapp.example.io", country="us", device="desktop")
if res.position is None:
print(f"not in the top {res.checked}")
else:
print(res.position, res.matches[0].link)Overnight jobs: the batch lane
Send up to 100 queries to POST /v1/batches and they are queued at half price. You get 202 with a batch id per query right
away; the finished result is posted to your webhook_url, signed with X-SerpKite-Signature
(HMAC-SHA256 of <timestamp>.<body>), or you poll GET /v1/batches/{id}. Results are kept for 24 hours.
# Queue keywords on the batch lane: 3.5 credits for the top 100 instead of 7.
curl https://api.serpkite.com/v1/batches \
-H "Authorization: Bearer $SERPKITE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"endpoint":"search",
"requests":[{"q":"best crm for startups","country":"us","num":100},
{"q":"crm for small business","country":"us","num":100}],
"webhook_url":"https://yourapp.example.io/hooks/serpkite"}'
# → 202 Accepted, one job per request, in order
# {"batches":[{"id":"0f8c…","status":"queued","endpoint":"/v1/search",
# "poll_url":"https://api.serpkite.com/v1/batches/0f8c…", …}, …]}
# Poll (free), or wait for the signed webhook (X-SerpKite-Signature, event batch.completed)
curl https://api.serpkite.com/v1/batches/0f8c… -H "Authorization: Bearer $SERPKITE_API_KEY"
# {"id":"0f8c…","status":"done","credits_used":3.5,"result":{"results":[…]}, …}Reference
Parameters
The parameters /v1/search accepts, in the JSON body or the query string.
| Name | Type | Default | Description |
|---|---|---|---|
q
required
|
string | – | The search query. Required. Up to 2,048 characters. |
country
|
string | us | Country to search from, as a two-letter ISO code (us, gb, de, in…). |
language
|
string | en | Interface language, as a language code (en, de, fr, pt-BR…). |
location
|
string | – | Canonical location for local results, e.g. "Austin, Texas, United States". Overrides country for geo. |
uule
|
string | – | Google-encoded location string. Use instead of location if you already have it. |
num
|
integer | 10 | Results per call. 10 per page; 100 fetches the top 100 as a depth bundle for 7 credits instead of 10. Values: 10, 20, 30, 50, 100. |
device
|
string | desktop | Which SERP layout to fetch. Values: desktop, mobile. |
fields
|
string | – | Comma-separated projection, e.g. results.title,results.link,knowledge_graph. Cuts tokens. |
Full reference, error codes and headers are in the API docs. Send a JSON array of up to 100 request objects to run them in one call.
Use cases
What people build with the Google Rank Tracker API
Daily rank tracking
Track thousands of keywords per client, per market and device.
Local rankings
Use location or uule to track city-level positions.
Overnight batch jobs
Queue keywords with POST /v1/batches and receive results by webhook.
SERP volatility
Diff the top 100 day over day to detect Google updates.
Pricing
Google Rank Tracker API pricing
Cost per call
7 credits
per keyword, top 100 (3.5 in batch)
- From $4.20 per 1,000 calls at volume.
- Credits never expire. No subscription.
- Failed, empty and blocked calls are refunded.
- 2,500 free credits = 357 calls, then 1,000 credits a month.
For reference: Serper lists Google searches at $1.00 per 1k on its entry tier and $0.30 at its best tier, and its credits expire after 6 months. SerpKite credits cost $1.00 to $0.60 per 1k.
| Pack | Price | Per 1k credits | Per 1k keywords (top 100) | Batch lane | Keywords per pack |
|---|---|---|---|---|---|
| Starter | $10 | $1.00 | $7.00 | $3.50 | 1,428 |
| Growth | $50 | $0.80 | $5.60 | $2.80 | 8,928 |
| Pro | $300 | $0.60 | $4.20 | $2.10 | 71,428 |
FAQ
Google Rank Tracker API: common questions
Keep exploring
Related APIs and integrations
Start building
Start with the Google Rank Tracker API
2,500 free credits, then 1,000 every month. No credit card.