num=100 is gone: the real cost of top-100 tracking
Since Google removed &num=100 in September 2025, the top 100 takes ten requests. What that does to rank-tracking costs, and how to price depth fairly.
SerpKite team 2 min read
On this page
For years, rank trackers fetched the top 100 results for a keyword with one request: add &num=100 to the Google URL. On September 14, 2025, Google stopped honoring it. The top 100 now means ten pages of ten, which means ten requests.
Google also moved quickly against workarounds: in October 2025 it blocked the one DataForSEO had found within five days.
What changed in the cost model
A SERP API’s cost is roughly proportional to the requests it makes to Google: proxy bandwidth, rendering, retries. When one request became ten, the cost of a top-100 check went up about 10× for everyone. Vendors had three choices:
- Keep charging “per search” and eat the difference (not sustainable at volume).
- Charge per page, so the top 100 costs 10×.
- Offer depth as a bundle priced between the two.
Pricing units got confusing fast. Some vendors charge per query, some per page, some a flat multiplier for “more than 10 results”. Serper, for example, charges 2 credits for 11–100 results.
How SerpKite prices depth
- 1 credit per page of 10. Shallow checks (top 10, top 20) cost exactly what they use.
num=100is a 7-credit bundle: the top 100 for 30% less than ten separate pages.- The batch lane halves it. Queue checks with
POST /v1/batches(results within about 15 minutes, delivered by webhook or polling) and the price is multiplied by 0.5. - Empty and failed pages are free, so a keyword with only 40 results doesn’t burn credits on six empty pages.
Worked example: 1,000 keywords, daily, top 100
That’s 30,000 top-100 checks a month.
| Approach | Credits / month | At $0.60 per 1k (Pro pack) |
|---|---|---|
| 10 separate pages, realtime | 300,000 | $180 |
num=100 bundle, realtime |
210,000 | $126 |
num=100 bundle, batch lane |
105,000 | $63 |
Credits never expire, so you can buy a larger pack and let it run down over several months at the lower per-1k rate.
Do you need all 100?
Most trackers only need depth for a subset of keywords. A common pattern: check the top 20 daily for everything, and the top 100 weekly, or only for keywords where you’re outside the top 20. At 1 credit per page, that often cuts the bill by more than half again.
The request
curl https://api.serpkite.com/v1/batches \
-H "Authorization: Bearer $SERPKITE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"endpoint":"search","webhook_url":"https://example.com/hooks/serp","requests":[{"q":"project management software","country":"us","num":100,"fields":"results.position,results.domain,results.link"}]}'
The response is 202 with one batch per request (id, status, poll_url); the finished result is POSTed to your webhook as a batch.completed event, signed with X-SerpKite-Signature, or you poll GET /v1/batches/{id}. fields keeps the payload to what a tracker stores. Links are always resolved destination URLs, which matters since Google’s /goto change.
More on the Rank Tracker API page and on pricing.