Your rankings don’t exist in a vacuum — they move because competitors move. Capturing the whole SERP for your keywords reveals who’s gaining, who’s new, and which features (snippets, packs) own the page. Here’s how, with serp.cheap.
Capture the full results page
import requests, datetime
def serp_snapshot(keyword, gl="us"):
data = requests.post(
"https://api.serp.cheap/v1/search",
headers={"X-API-Key": "YOUR_KEY"},
json={"q": keyword, "gl": gl},
timeout=30,
).json()
return {
"date": datetime.date.today().isoformat(),
"keyword": keyword,
"ranking": [(r["position"], domain_of(r["link"])) for r in data["organic"]],
}
def domain_of(url):
from urllib.parse import urlparse
return urlparse(url).netloc.replace("www.", "")
Detect changes
Store snapshots and diff consecutive days:
def new_entrants(today, yesterday):
seen = {d for _, d in yesterday["ranking"]}
return [(pos, d) for pos, d in today["ranking"] if d not in seen]
That surfaces competitors who just broke into the top results for a keyword you care about — an early signal worth an alert.
What to track
- Share of the top 10 per competitor over time.
- New entrants breaking into the page.
- Position volatility — keywords where the SERP reshuffles often.
- SERP features — track whether a featured snippet or pack pushes organic down.
Keep it cheap
It’s one request per keyword per market. Daily monitoring of 200 keywords ≈ $0.12/day fresh, less with cache hits. No per-keyword SaaS fees, and you own the historical data.
Next
Try serp.cheap
Start monitoring your competitors’ SERPs today. 100 free searches on signup — no card required; pay-as-you-go from $0.75/1k after that, and credits stay valid for 12 months.
- Get your free API key →
- Prefer paying by card? serp.cheap is also on RapidAPI (
$0.90/1k) and Apify ($1.50/1k).