How much does it cost to track 1,000 keywords daily?
Building your own rank tracker on a SERP API is mostly arithmetic. The bill comes down to one number, requests per month, and five factors multiply into it. Get those right and you can price any tracking setup in a minute.
The formula
requests / month = keywords × pages per check × checks per month × devices × locations
- Keywords: how many search terms you track.
- Pages per check: Google returns 10 organic results per page. Since September 2025 it no longer honours the old
num=100parameter, so checking the top 100 takes 10 requests, at any provider. - Checks per month: about 30 for daily tracking, 4 for weekly.
- Devices: desktop and mobile rankings differ. Tracking both doubles the count.
- Locations: each country you track is its own set of requests.
1,000 keywords, checked daily, one country
| Depth | Pages per check | Requests per month |
|---|---|---|
| Top 10 | 1 | 30,000 |
| Top 50 | 5 | 150,000 |
| Top 100 | 10 | 300,000 |
What those volumes cost each month (the columns match the three depths above):
| Provider | 30,000 / mo | 150,000 / mo | 300,000 / mo |
|---|---|---|---|
| SerpWiz (annual) | $7.50 | $22.50 | $37.50 |
| SerpWiz (monthly) | $10 | $30 | $50 |
| Serper | $30 | $113 | $225 |
| Scrapingdog | $40 | $90 | $200 |
| Bright Data | $45 | $225 | $450 |
| DataForSEO | $60 | $300 | $600 |
| SearchApi | $100 | $500 | $900 |
| ScraperAPI | $149 | $475 | $975 |
| Zenserp | $150 | $300 | $500 |
| SerpApi | $275 | $1,475 | $2,750 |
Prices are from each provider's public pricing page, checked 15 Oct 2026, using the smallest plan that covers the volume. Annual SerpWiz is the yearly price divided by 12.
So tracking 1,000 keywords to the top 100 every day costs $50 a month on SerpWiz, or $37.50 a month on an annual plan. On providers that charge per credit or in fixed tiers, the same setup costs from about $200 to several thousand dollars a month.
Five ways to cut the bill
Before picking a provider, it's worth cutting the number of requests you send.
- Stop paging once you find your domain. If you rank 4th, there's no need to fetch pages 2 to 10. For most sites, this one change cuts requests by more than half.
- Track depth by priority. Most keywords only matter while you're on page one. Check the top 10 for the long tail, and go to the top 100 only for keywords you're actively trying to move.
- Check the long tail weekly. Daily checks matter for competitive head terms. Weekly is enough for thousands of low-volume ones, at a quarter of the daily cost.
- Add mobile only where it differs. Sample a few hundred keywords on both devices first. If the rankings match, you don't need to double everything.
- Don't pay for failures. At some providers a failed or blocked request still counts. On SerpWiz only successful requests are charged.
A minimal tracker with early exit
This checks one keyword and stops at the first page where your domain appears, so each check costs between 1 and max_pages requests:
import os, time, requests
from urllib.parse import urlparse
API = "https://api.serpwiz.com/v1/google/search"
KEY = os.environ["SERPWIZ_API_KEY"]
def rank(keyword, domain, country="us", max_pages=10):
"""Return (position, url) for domain's first result, or (None, None)."""
page = 1
while page and page <= max_pages:
r = requests.get(API, params={"q": keyword, "gl": country, "hl": "en", "page": page},
headers={"X-API-Key": KEY}, timeout=60)
if r.status_code == 429: # over your rate limit: wait and retry
time.sleep(float(r.headers.get("Retry-After", 1)))
continue
r.raise_for_status()
data = r.json()
for item in data.get("results", []):
host = urlparse(item["url"]).hostname or ""
if host == domain or host.endswith("." + domain):
return (page - 1) * 10 + item["position"], item["url"]
page = data.get("next_page")
return None, None
for kw in ["serp api", "google search api", "rank tracker api"]:
print(kw, rank(kw, "example.com"))
To run 1,000 keywords a day, run checks in parallel up to your plan's requests per second. Every $10 a month of plan gives you 1 request per second, and a 429 response tells you to slow down. Store the results with a date so you can chart them.
What a SERP API won't do for you
A tracker needs more than requests: a scheduler, storage, charts, alerts when a keyword drops, and reporting for clients. That's where off-the-shelf rank trackers earn their subscription. If you already have the data pipeline, or you only need the numbers in your own dashboard, building on an API is usually much cheaper.
Also note that SerpWiz targets results by country, not city. If your clients need local rankings by city or ZIP code, factor that in.
The short version
1,000 keywords checked daily is 30,000 requests a month for the top 10 and 300,000 for the top 100, before devices and countries. Price your tracker in requests, cut what you can with early exit and priority tiers, and compare providers on cost per request, not per credit. You can try SerpWiz with 1,000 free queries a month and see the numbers for your own keyword list.
More from the blog
This post as Markdown: /blog/rank-tracking-cost.md