Published
Most Scalable SERP APIs in 2026: Rate Limits, Throughput, and Cost at 10 Million Searches
The short answer: The SERP APIs with the highest self-serve throughput are Bright Data (no concurrency limit on any plan), Serper (up to 300 queries per second on a one-time $3,750 package), and Scrapingdog (up to 2,200 concurrent requests on its largest monthly plan). PrismCrawl allows 100 requests per second by default on its $1,000 package, which is 360,000 searches an hour, and runs custom plans at 1,000 or more requests per second, at least 3.6 million searches an hour. At 10 million searches a month, PrismCrawl is the least expensive provider in this comparison: about $1,500 of usage at $0.15 per 1,000, compared with $2,500 a month for Scrapingdog's Light API, $3,000 at Serper's lowest rate, and $6,000 or more at every other provider with public pricing at that volume.
This comparison is published by PrismCrawl, which is one of the providers compared. Rate limits and prices were checked against each provider's public pricing page or documentation on October 6, 2026. They are published defaults, not negotiated contracts, and we did not load-test other providers.
What makes a SERP API scalable
A SERP API that handles a 50-query demo can fall over at 5 million queries a day. For production workloads, five properties matter:
- Throughput ceiling. How many searches per second, minute, or hour the plan accepts before returning 429 errors.
- How the ceiling is tied to price. Some providers raise the limit with each package. Others cap hourly throughput at a share of the monthly quota, so a faster job requires a larger plan whether or not you need the extra searches.
- Live or queued delivery. A live API returns results in the same request. A queued API accepts a task and delivers it later, which supports higher intake but adds minutes of delay.
- What failures cost. At high volume even a 1% error rate is tens of thousands of requests a day. If the provider bills them, retries raise your effective price.
- Cost at your real volume. The rate on the plan you would actually buy, including monthly resets or credit expiry.
Published SERP API rate limits
Providers express limits in different units, so the table shows each one as published and, where possible, the equivalent in requests per second.
| Provider | Limit unit | Entry plan | Largest self-serve plan | Approx. requests/second at the top | Higher limits |
|---|---|---|---|---|---|
| PrismCrawl | Requests per second | 5/s on the $5 package | 100/s on the $1,000 package | 100 by default; 1,000+ on custom plans | Custom plans at 1,000+/s |
| Serper | Queries per second | 50/s on the $50 package | 300/s on the $3,750 package | 300 | On request |
| Bright Data | Concurrent requests | Unlimited | Unlimited | No published limit | Not needed |
| Scrapingdog | Concurrent requests | 5 on the $40/month plan | 2,200 on the $30,000/month plan | Depends on response time | Custom plans |
| Oxylabs | Jobs per second | 50/s on Micro | 100/s on Business and Corporate | 100 | Custom plan |
| SearchApi | Share of monthly credits per hour | 20% per hour (2,000/hour on the $40/month plan) | 20% per hour (1,000,000/hour on the $5,000/month plan) | About 278 | Larger plan |
| SerpApi | Successful searches per hour | 200/hour on the $25/month plan | 640,000/hour on the $106,050/month plan | About 178 | Contact sales |
| DataForSEO | API calls per minute | 2,000 calls/minute | 2,000 calls/minute | About 33 live; up to 3,333 queued tasks | On request |
A few notes on reading this table:
- DataForSEO allows one task per live call but up to 100 tasks per call in its standard queue, so queued intake can reach 200,000 tasks a minute. Queued results arrive after a delay, which suits batch rank tracking but not an application waiting on the answer.
- SerpApi and SearchApi scale hourly throughput with the monthly quota. SerpApi's $25 plan allows 200 searches an hour, and its 10 million search plan allows 200,000 an hour. A small, fast job on these services means paying for a large plan.
- Scrapingdog and Bright Data limit concurrent connections instead of rate. Requests per second then depend on response time, as explained in the section on concurrency below.
- PrismCrawl, Serper, and DataForSEO publish defaults and raise them for larger accounts, so treat the published number as the starting point for a high-volume account. PrismCrawl's custom plans run at 1,000 or more requests per second.
What 10 million searches a month costs, and how long it takes
The table below prices 10 million Google searches using each provider's published plans, and shows how long the batch takes at the plan's default limit. Monthly plans reset each month; prepaid credits carry over until they expire.
| Provider | Purchase for 10M searches | Effective cost of 10M | Default limit on that purchase | Time to run 10M at the limit |
|---|---|---|---|---|
| PrismCrawl | Two $1,000 Volume packages (13.3M credits) | About $1,500 ($0.15/1K) | 100 requests/second | About 28 hours |
| Scrapingdog (Light API) | $2,500/month Corporate Plus (11M Light requests) | $2,500/month | 400 concurrent | Depends on response time |
| Serper | $3,750 Ultimate package (12.5M credits) | About $3,000 ($0.30/1K) | 300 queries/second | About 9 hours |
| DataForSEO (queued) | Prepaid balance | $6,000 ($0.60/1K) | 2,000 calls/minute, 100 tasks per call | About 50 minutes to submit; results arrive later |
| SearchApi | $5,000/month Octo 5M covers 5M; 10M is not a published plan | About $10,000 ($1.00/1K) | 20% of credits per hour | Not published at 10M |
| Bright Data | $499/month Scale plan plus 9.62M extra requests | About $13,000 ($1.30/1K extra) | Unlimited concurrency | Depends on response time |
| DataForSEO (live) | Prepaid balance | $20,000 ($2.00/1K) | 2,000 calls/minute | About 83 hours |
| SerpApi | $21,125/month Cloud 10M | $21,125/month | 200,000 searches/hour | About 50 hours |
Oxylabs is left out because its largest self-serve plan stops at 8 million results a month and larger plans are not publicly priced.
Serper finishes the batch fastest at default limits, and PrismCrawl costs about half as much as Serper at this volume. If 28 hours at 100 requests a second is too slow for your window, a PrismCrawl custom plan at 1,000 or more requests per second runs the same 10 million searches in under 3 hours; email [email protected] with your expected volume and peak rate.
Rate limits, concurrency, and queues measure different things
A requests-per-second limit caps how often you can start a request. A concurrency limit caps how many requests can be open at once. Little's law connects the two: throughput equals concurrency divided by the average response time.
On a concurrency-limited plan, 400 concurrent requests at 2 seconds each produce about 200 requests per second. If response times rise to 4 seconds during a busy period, the same plan drops to about 100. On a rate-limited plan the arithmetic runs the other way: to sustain 100 requests per second at 4 seconds per request, your client needs about 400 requests in flight.
That has two practical consequences:
- Size your client to the limit and to the slow tail. Set in-flight requests to roughly the rate limit multiplied by the 95th percentile response time. Fewer, and you never reach your limit. Many more, and you hold open connections that add nothing.
- Compare like with like. A plan with 1,000 concurrent connections and a plan with 300 requests per second can deliver about the same throughput, depending on response time. Run the same workload on both before deciding which is faster for you.
Queued APIs separate intake from delivery. DataForSEO's standard queue can accept far more tasks per minute than its live endpoint can return, but you then poll or receive a callback when each task is ready. For a nightly rank-tracking job that is a good trade. For an AI agent or a user waiting on a response, only live throughput counts.
How to run a high-volume SERP pipeline
At production volume, most failures come from the client: unbounded bursts that trip 429s, retries that pile onto an already throttled account, and silent gaps where failed keywords never get re-queued. These practices keep a large job steady:
- Spread requests evenly. Space request starts so you never exceed your per-second limit. Bursts trip 429s even when the average rate is fine.
- Bound concurrency with a fixed pool of workers sized as described above.
- Retry only what can succeed. Retry 429s and 5xx responses with capped exponential backoff and jitter, honoring
Retry-Afteror the reset time the API returns. Do not retry 400-level validation errors. - Record every failure with its request ID so you can re-queue it and so support can trace it.
- Check result shape as well as status codes. A 200 response with zero results or missing fields is a silent failure. See how silent scraper failures corrupt data.
- Split work by priority. Keep interactive traffic on its own budget so a nightly batch never starves a user-facing feature.
Here is a minimal Python version using PrismCrawl's async client. The client already retries 429s, 5xx responses, and failed connections, and on a 429 it waits until the reset time the API returns. The code adds the even spacing, a bounded worker pool, and a failure log.
import asyncio
import time
from prismcrawl import APIConnectionError, APIStatusError, AsyncPrismCrawl
REQUESTS_PER_SECOND = 100 # your package's limit
WORKERS = 400 # about REQUESTS_PER_SECOND x p95 response time in seconds
class Pacer:
"""Spaces request starts evenly so bursts never exceed the rate limit."""
def __init__(self, rate: float) -> None:
self.interval = 1 / rate
self.next_start = time.monotonic()
self.lock = asyncio.Lock()
async def wait(self) -> None:
async with self.lock:
now = time.monotonic()
start = max(self.next_start, now)
self.next_start = start + self.interval
await asyncio.sleep(start - now)
async def worker(client, pacer, queue, results, failures):
while True:
keyword = await queue.get()
try:
await pacer.wait()
response = await client.google.search(query=keyword, gl="us")
results[keyword] = response["data"]["content"]["results"]
except APIStatusError as error:
failures.append((keyword, error.status_code, error.code, error.request_id))
except APIConnectionError:
failures.append((keyword, None, "connection_error", None))
finally:
queue.task_done()
async def run(keywords):
queue = asyncio.Queue(maxsize=WORKERS * 2)
results, failures = {}, []
pacer = Pacer(REQUESTS_PER_SECOND)
async with AsyncPrismCrawl(max_retries=4) as client:
workers = [
asyncio.create_task(worker(client, pacer, queue, results, failures))
for _ in range(WORKERS)
]
for keyword in keywords:
await queue.put(keyword) # waits when the queue is full, so memory stays flat
await queue.join()
for task in workers:
task.cancel()
return results, failures
The bounded queue keeps memory flat whether the keyword list has a thousand entries or ten million. Write failures to a file and run it again as its own batch once the main job finishes. For a full rank-tracking example with storage and change detection, see the SEO rank tracker guide.
Load-test a SERP API before you commit
Published limits describe what a provider allows. Your own workload decides what you actually see, so before moving production traffic, run a test that looks like your real job:
- Use your real queries, including locations, devices, and page depth. Simple head terms are faster and more reliable than long-tail local queries.
- Ramp in steps, for example 10, 25, 50, and 100 requests per second, holding each step for several minutes.
- Measure the 95th and 99th percentile response time at each step. Averages hide the slow tail, and tail latency decides how many workers you need.
- Count successes by content, checking that each response has the fields you parse.
- Note what happens at the limit. A clean 429 with a reset time is easy to handle. Timeouts and dropped connections are not.
- Price the run using the provider's billing rules, including whether failures were charged.
PrismCrawl's free 100 credits cover a functional test, and the SERP API playground shows the response format before you write any code.
PrismCrawl at scale
PrismCrawl sells one-time prepaid credit packages, and every package includes the same endpoints and SERP features. Every search runs live, one successful search uses one credit, and failed requests are free, so retries never inflate your bill. PrismCrawl's success rate is above 99%.
| Package | Purchase | Searches | Per 1,000 | Default requests/second | Searches per hour at the limit |
|---|---|---|---|---|---|
| Micro | $5 | 16,667 | $0.30 | 5 | 18,000 |
| Lite | $10 | 37,038 | $0.27 | 10 | 36,000 |
| Starter | $25 | 100,000 | $0.25 | 10 | 36,000 |
| Basic | $50 | 217,392 | $0.23 | 25 | 90,000 |
| Growth | $100 | 476,191 | $0.21 | 25 | 90,000 |
| Pro | $200 | 1,052,632 | $0.19 | 50 | 180,000 |
| Scale | $500 | 2,941,177 | $0.17 | 50 | 180,000 |
| Volume | $1,000 | 6,666,667 | $0.15 | 100 | 360,000 |
These are default limits. Custom plans run at 1,000 or more requests per second, which is at least 3.6 million searches an hour or 86 million a day. To set one up, email [email protected] with your expected monthly volume and peak requests per second. Credits are valid for 90 days, and the same balance covers Google, Bing, DuckDuckGo, Amazon, Maps, reviews, and app store endpoints, so one integration can serve several workloads. See SERP API pricing for current packages, or estimate your volume with the SERP API cost calculator.
How to choose a scalable SERP API
- Work out your peak rate as well as your monthly volume. Divide the searches in your largest batch by the time window it must finish in.
- Decide whether results can be queued. If they can, DataForSEO's standard queue is worth pricing. If a user or agent is waiting, compare live throughput only.
- Check how the limit is tied to price. On SerpApi and SearchApi, a faster job means a bigger monthly plan. On PrismCrawl and Serper, the limit comes with the package and can be raised for larger accounts; PrismCrawl's custom plans start at 1,000 requests per second.
- Price your real volume, including monthly resets, credit expiry, and whether failed requests are billed. The cheapest SERP API comparison covers prices from $10 to $1,000.
- Load-test your shortlist with your own queries before signing a contract.
For a feature comparison beyond throughput, read the best Google SERP API buyer's guide. For provider-specific detail, see PrismCrawl vs. DataForSEO, PrismCrawl vs. SerpApi, and PrismCrawl vs. Bright Data.
Frequently asked questions
What is the most scalable SERP API?
It depends on whether the limit is speed or budget. Bright Data publishes no concurrency limit, Serper allows up to 300 queries per second on its $3,750 package, and Scrapingdog allows up to 2,200 concurrent requests on its largest monthly plan. PrismCrawl allows 100 requests per second by default on its $1,000 package, runs custom plans at 1,000 or more requests per second, and has the lowest cost at 10 million searches a month in this comparison: about $1,500 of usage at $0.15 per 1,000.
How many searches per hour can PrismCrawl handle?
The default limit on PrismCrawl's $1,000 Volume package is 100 requests per second, which is 360,000 searches an hour or about 8.6 million a day. Smaller packages start at 5 requests per second. Custom plans run at 1,000 or more requests per second, which is at least 3.6 million searches an hour; contact [email protected] to set one up.
Can SERP API rate limits be raised?
Usually, yes. PrismCrawl offers custom plans at 1,000 or more requests per second, Serper and DataForSEO raise limits on request, Oxylabs and Scrapingdog offer custom plans, and SerpApi directs custom throughput requests to its sales team. SerpApi and SearchApi tie hourly throughput to the size of the monthly plan, so faster collection on those services generally means buying a larger plan.
Do SERP APIs charge for failed requests?
PrismCrawl, SerpApi, SearchApi, and Bright Data bill only successful searches, and Oxylabs does not bill requests that fail with a server-side error. At high volume this matters because retries on a provider that bills failures raise the effective price per successful search.