Starter
25,000 searches
$18.75
$0.75/1K searches
- A side project or an AI agent
- About 830 searches a day for a month
- Credits never expire
Use case · SEO · as of October 2026
Since Google dropped num=100, the cost of rank tracking depends on how deep you look. This page gives the formula, ready-made budgets and code that stops paging as soon as it finds your domain.
Quick answer
How many API searches does rank tracking need, and what does it cost?
Searches per month = keywords × pages checked × checks per month × locations × devices. A daily top-10 check of 1,000 keywords is 30,000 searches a month; a daily top-100 check is 300,000, because Google now serves about 10 results per page. With SerpCrypto, a no-KYC SERP API paid in crypto, 100,000 searches cost $56.25 and credits never expire (October 2026).
| Cost of one check | 1 credit per results page; About 10 organic results per page, as Google has served since it stopped honouring num=100 in September 2025; each extra page is one more credit |
|---|---|
| Price per 1,000 searches | $0.75/1K searches at 10,000 searches, $0.56/1K searches at 100,000 searches, $0.38/1K searches at 1,000,000 searches |
| Failed searches | Not charged |
| Targeting | Country (gl), language (hl), Google domain and a city-level location string, on desktop or mobile |
| Extra signals in the same credit | AI Overview citations, People Also Ask, local pack, ads, top stories |
| Credit expiry | Prepaid search credits never expire: unused searches stay on your account until you use them |
Multiply five numbers: keywords, results pages per keyword, checks per month, locations and devices. One results page holds about 10 organic results, so tracking the top 30 means 3 pages per keyword per check.
searches per month = keywords × pages × checks per month × locations × devices
Two levers cut the bill without losing much signal. First, stop paging as soon as you find the domain you track: a page ranked 4th never needs pages 2 to 10. Second, check long-tail keywords weekly and money keywords daily. The code further down does the first automatically.
Monthly searches for common setups, and the smallest SerpCrypto pack that covers one month. A month is counted as 30 daily checks or 4 weekly checks.
| Setup | Searches per month | Pack that covers a month |
|---|---|---|
| 100 keywords, top 10, daily, 1 location | 3,000 | 10,000 searches ($7.50) lasts about 3 months |
| 1,000 keywords, top 10, daily | 30,000 | 100,000 searches ($56.25) lasts about 3 months |
| 1,000 keywords, top 30, weekly | 12,000 | 25,000 searches ($18.75) lasts about 2 months |
| 1,000 keywords, top 100, weekly | 40,000 | 100,000 searches ($56.25) lasts about 2.5 months |
| 5,000 keywords, top 10, daily | 150,000 | 250,000 searches ($140.63) lasts about 7 weeks |
| 1,000 keywords, top 10, daily, 3 cities × desktop and mobile | 180,000 | 250,000 searches ($140.63) lasts about 6 weeks |
| 10,000 keywords, top 100, weekly | 400,000 | 500,000 searches ($281.25) |
Worst case: every keyword is checked to the last page. Stopping when the domain is found usually needs far fewer searches.
Walk through organic_results page by page and compare the host of each link with your domain. The position field is already the rank on the whole results list, so page 2 starts at about 11. Stop as soon as you find the domain, and record "not in the top N" when the last page you allow yields nothing.
import os
from urllib.parse import urlparse
import requests
API = "https://serpcrypto.com/api/v1/search"
HEADERS = {"Authorization": "Bearer " + os.environ["SERPCRYPTO_API_KEY"]}
def rank_of(domain, query, gl="us", hl="en", location=None, max_pages=3):
"""Return (position, url, searches_used); position is None if not found."""
params = {"engine": "google", "q": query, "gl": gl, "hl": hl}
if location:
params["location"] = location
for page in range(1, max_pages + 1):
params["page"] = page
resp = requests.get(API, headers=HEADERS, params=params, timeout=60)
resp.raise_for_status()
for r in resp.json().get("organic_results", []):
host = urlparse(r["link"]).netloc.lower()
if host == domain or host.endswith("." + domain):
return r["position"], r["link"], page
return None, None, max_pages
if __name__ == "__main__":
pos, url, used = rank_of("example.com", "project management software", max_pages=3)
print(pos, url, "searches used:", used)
Yes, if your queries trigger AI Overviews, because a page can rank 7th and still be cited in the overview above position 1. The same search that gives you positions also returns ai_overview.references when Google shows an overview, at no extra credit.
Store three things per keyword and day: your organic position, whether your domain is among the overview references, and which other domains are. Over a few weeks this shows which competitors Google's AI cites for your topics, which a position report alone cannot.
Run the same query once per city with the location parameter, for example Denver, Colorado, United States and Miami, Florida, United States. Local intent queries, such as services, shops and clinics, can differ a lot from one city to the next, and the map pack in local_results changes even more.
Each city is a separate search, so multiply your budget by the number of cities. The local SEO page covers map pack tracking, and locations and languages explains the location strings.
Daily checks suit a few hundred keywords that drive revenue, or the weeks after a site migration or a Google update. Weekly checks suit long-tail sets, competitor monitoring and reporting to clients.
A mixed schedule keeps the signal and divides the cost: 200 money keywords daily plus 2,000 long-tail keywords weekly, top 10 only, is 6,000 + 8,000 = 14,000 searches a month. Because SerpCrypto credits never expire, a quiet month does not waste what you bought.
Most rank trackers between 1,000 and 5,000 keywords fit between 100,000 searches and 500,000 searches. Every engine and every page costs one credit; credits never expire.
25,000 searches
$18.75
$0.75/1K searches
100,000 searches
$56.25
$0.56/1K searches
250,000 searches
$140.63
$0.56/1K searches
500,000 searches
$281.25
$0.56/1K searches
In every plan: Every engine at 1 credit per search · Failed requests not charged · Credits never expire · Country, language, city and device targeting
Google stopped honouring num=100 around 10 to 14 September 2025. Before that, one request could return 100 results; now each page of about 10 results is a separate request. Tracking the top 100 therefore takes 10 times more searches than before.
Yes. Add device=mobile to get the phone results page. Mobile and desktop are separate searches, so tracking both doubles the searches for those keywords.
No. SerpCrypto is an API: it returns the results page as JSON, and you store and chart the positions in your own tool, spreadsheet or database. The Python code on this page is a starting point.
You get an HTTP error with a code such as search_failed or search_timeout, and the failed request is not charged. Retry it later with exponential backoff; the errors page has a ready-made loop.
No. SerpCrypto is a no-KYC SERP API: no ID, no selfie, no company documents. You top up from $25 in BTC, USDT, USDC, ETH, SOL, LTC and buy a pack from your balance.
From $0.30/1K searches · no KYC
Get an API key