When we started building Stackwise Rank, the obvious choice for SERP data was DataForSEO. It's the industry standard. Every rank tracker I've ever used runs on it. So we plugged it in, shipped rank tracking, and watched our infra costs balloon by $400/mo on the first 80 customers.
Then we ran the numbers. DataForSEO charges $1.50 per 1,000 SERP checks. Serper charges $1.00 per 1,000 — and the response quality is identical for our use case (top 100 organic results, no SERP features needed).
What we actually tracked
Our rank tracker fires one SERP query per keyword per day, finds the customer's domain in organic results, and writes the position. That's it. We don't need:
- Detailed SERP feature parsing (we track AI Overviews separately via direct engine calls)
- Historical SERP archives (we store our own snapshots)
- Multi-region geo-IP routing (Serper supports country codes out of the box)
- Bulk batch APIs (we throttle to 500ms between queries anyway)
When DataForSEO still wins
If you need detailed SERP feature parsing, paid ads data, or historical archives, DataForSEO is worth the premium. For 90% of rank-tracking use cases though, Serper is the better business decision.
The swap was 4 hours of work
// worker/runRankTracking.ts
const res = await fetch("https://google.serper.dev/search", {
method: "POST",
headers: {
"X-API-KEY": process.env.SERPER_API_KEY!,
"Content-Type": "application/json",
},
body: JSON.stringify({ q: keyword, gl: country, num: 100 }),
});
const json = await res.json();
const position = json.organic?.findIndex(
(r: { link: string }) => normalizeDomain(r.link) === target,
);The bigger lesson
Defaults are expensive. Every infra decision we made early on — DataForSEO, Upstash Redis, Vercel KV, you name it — turned out to have a cheaper, equally-good alternative when we actually measured. Always benchmark. Always swap when the math says swap.
