SEO Data Bench

SEO Data Bench/Benchmarks/seo-api-latency

SEO API latency, failures and what a real workload costs

Benchmarkcohort v1US · enrun 2026-09-15includes a Treg route

Latency, failure and no-data rates, and observed cost for 314 calls across twelve SEO data routes on one day, with a worked monthly workload for an in-house growth agent.

By Shirley Lou, Research, TregPublished 2026-09-15Facts re-checked 2026-09-15Last material change 2026-09-15

Written for people asking: What are the best SEO data APIs for an in house growth agent?How much does it cost to run weekly keyword and SERP checks through an API?Which SEO API is fastest?

Across 314 calls on 15 September 2026, no route returned an error on a SERP or backlink call; the only failure was a DataForSEO bulk keyword call rate-limited because our own SERP calls to the same provider were running at the same time, which succeeded on retry. Stored-index routes answer in about a second (Serpstat SERP 1.0 s, all three backlink summaries 1.0 to 1.1 s at the median); live Google fetches take 1.5 s (SerpApi), 4.6 s (Cloro render), 7.9 s (DataForSEO) and 9.2 s (Treg routed, served by DataForSEO). A monthly workload of 200 keywords, 500 SERP checks and 50 backlink summaries costs between $0.55 and $8.60 depending on route, and about $1.40 on the cheapest live-data combination. The whole benchmark cost $1.99 at list prices.

How latency was measured

Wall-clock time from the Treg CLI issuing the call to the full response arriving, including network from Sydney to each provider. One worker per provider, so our own concurrency did not queue calls behind each other. One call per query or domain; the bulk keyword endpoints were one call carrying all 50 keywords. Everything ran on the same afternoon.

Per-query routes

Google SERP routes, 50 calls each. Serpstat's 'no data' rows are queries absent from its stored index, not errors. 5 rows.Download CSV ↓
RouteReturned dataNo dataErrorsp50p95Cost per call
Cloro (live Google render)50004559 ms9806 ms$0.0028
DataForSEO50007894 ms18133 ms$0.0020
SerpApi50001507 ms12805 ms$0.015
Serpstat20300995 ms1667 ms$0.0005
Treg (routed)50009215 ms22424 ms$0.0020
Backlink summary routes, 20 calls each. 3 rows.Download CSV ↓
RouteReturned datap50p95Cost per call
Moz20976 ms1205 ms$0.013
SE Ranking201129 ms2874 ms$0.018
Serpstat201026 ms1285 ms$0.0025

Bulk keyword routes

One call each, 50 keywords. Latency is for the whole batch.

4 rows.Download CSV ↓
RouteKeywords returnedLatency (bulk call)Cost for 50 keywords
DataForSEO504205 ms$0.090
Google Ads (Keyword Planner)492097 ms$0.0000
SE Ranking504032 ms$0.089
Serpstat234066 ms$0.025

DataForSEO’s first attempt returned “too many requests” because the runner was sending it SERP calls concurrently; the retry after the SERP run took 4.2 seconds. The rate limit is per account across endpoints, which matters if an agent mixes keyword and SERP calls to the same provider.

Reading the numbers

  • Stored indexes answer in a second. Live Google fetches do not. Serpstat’s SERP and all three backlink summaries returned in about a second because nothing is fetched at request time. Live routes ranged from 1.5 s (SerpApi) to 9.2 s (Treg routed), and the p95 on live routes reached 12 to 22 seconds. An agent calling a live SERP route synchronously should expect to wait, and should parallelise anything over a handful of queries.
  • Treg’s routed SERP endpoint cost 1.3 s at the median over calling DataForSEO directly, and 4 s at p95, for the same data at the same price. In this run every routed call was served by DataForSEO, so the route’s fallback was never exercised. The trade is one credential and automatic failover against that latency; if latency is the constraint, call the provider directly.
  • Zero errors on 310 per-query calls. Every provider that was supposed to return data did. The only non-success is the rate-limited bulk call, which is a caller-side concurrency mistake, not a provider outage.

A worked monthly workload

An in-house growth agent that each month checks volume for 200 keywords, fetches 500 Google result pages, and pulls backlink summaries for 50 domains. List prices on the run date, no subscription discounts.

Combination Keywords (200) SERPs (500) Backlinks (50) Monthly total What you get
Cheapest stored data Serpstat $0.10 Serpstat $0.25 Serpstat $0.13 $0.48 Stale SERPs, gaps on long tail, smallest backlink index
Cheapest live data DataForSEO $0.09 (one call) DataForSEO $1.00 Serpstat $0.13 $1.22 Google’s own volumes, live pages, order-only backlinks
One credential (Treg routed) via Treg $0.09 Treg $1.00 Treg (Serpstat) $0.13 $1.22 Same data as the row above in this run, plus failover, plus ~1.3 s per SERP
Larger backlink index DataForSEO $0.09 DataForSEO $1.00 Moz $0.67 $1.76 As live data, backlink counts closer to the big indexes
Fastest live Google Ads free SerpApi $7.50 SE Ranking $0.90 $8.40 1.5 s SERPs; needs an Ads account for keywords

Every route here is pay-per-call or prepaid: none of these combinations needs a monthly SEO subscription. The whole 314-call benchmark behind this page cost $1.99.

Who each route fits

  • An agent that needs current Google pages and pays per call: DataForSEO direct, or Treg routed if you want one credential and can afford the added latency.
  • A monitoring job on a fixed keyword list where staleness is acceptable: Serpstat, after checking your list is in its index.
  • Latency-critical, cost-insensitive: SerpApi.
  • Backlink order, not counts: any of the three; Serpstat is cheapest.

What this run cannot tell you

Latency was measured from one location on one afternoon with one worker per provider; providers’ throughput under parallel load, their rate limits at volume and their behaviour during an outage are untested. List prices change and volume tiers apply. A second dated run is scheduled and will be published beside this one.

Reproduce it

Cohort, runner and scorer on the dataset page; every raw response, with its latency and exit code in the header, is under evidence.


Spotted an error or a changed price? Email corrections@seodatabench.com with the page URL and a source. Corrections are logged on the corrections page.