“99% success rate” — the biggest lie in web scraping
Visit any web scraping API’s landing page. You’ll see it. That big, bold success rate number. ScraperAPI: “99.9% uptime.” Oxylabs: “100% success rate.” ZenRows: “98.7% success rate.” Bright Data: “>99.9% network uptime.”
These numbers are technically not lies. They’re something worse — they’re deliberately misleading. And they cost you real money when you trust them.
Let us explain exactly how the deception works.
How scraping services calculate “success rate”
Here’s the dirty secret: success rate depends entirely on what sites you include in the calculation.
If you measure success rate across all websites — including WordPress blogs, basic e-commerce sites, static pages, and news sites with no anti-bot protection — then yes, 99% is achievable. Because 99% of the internet is easy to scrape. A simple HTTP GET with a decent User-Agent will work on most websites.
This is exactly how these services calculate their headline numbers. They measure across their entire request volume, which is dominated by easy sites. The hard sites — the ones protected by Akamai, DataDome, PerimeterX, Kasada, and Imperva — get averaged into oblivion.
Let’s do the math:
- 900,000 requests to easy sites: 99.5% success = 895,500 successes
- 100,000 requests to anti-bot sites: 15% success = 15,000 successes
- Total: 910,500 / 1,000,000 = 91% overall success rate
But wait — that 91% doesn’t look great on a landing page. So they tweak it further.
The tricks behind inflated numbers
Trick 1: Counting 200 status codes as success
This is the most insidious one. Some anti-bot systems return a 200 status code with a challenge page, an empty body, or JavaScript that never resolves to actual content. A strict “success = 200 status” metric counts these as wins.
Bright Data is particularly guilty here. Their dashboard will show a “successful” request that returned a 200 OK — but the body is an empty HTML shell or a Cloudflare challenge page. You paid for the request. You got no usable data. But it’s counted as a success.
Trick 2: Excluding “unsupported” sites
Read the fine print. Many services exclude certain sites or anti-bot systems from their success metrics. “Success rate measured across supported websites.” What’s unsupported? Conveniently, the hardest anti-bot systems.
ZenRows, for example, has different tiers of anti-bot bypass. Their headline success rate is measured at the tier that works. The sites where their top tier fails? Those just don’t make it into the number.
Trick 3: Retries hidden in the metric
Some services automatically retry failed requests multiple times before returning a failure to you. If it takes 5 attempts to get one success, they might count that as a success — you just paid 5x the expected cost without knowing it.
ScraperAPI does this with their “auto-retry” feature. Your success rate looks great in the dashboard. Your credit balance drains 3-5x faster than expected.
Trick 4: Cherry-picked timeframes
Success rates fluctuate. Anti-bot systems update, bypass methods break temporarily, and success rates dip. The number on the landing page is the peak number from the best measurement window, not a rolling average.
Trick 5: “Uptime” disguised as “success rate”
Notice how Bright Data advertises “99.9% network uptime.” Uptime and success rate are not the same thing. Uptime means their servers are running. It says nothing about whether your requests succeed. But the number sits right next to their scraping product descriptions, creating an implied association.
What happens when you filter for hard sites only
We ran a controlled test across multiple services. Same 50 URLs, all protected by advanced anti-bot systems. Mix of Akamai Bot Manager, DataDome, PerimeterX/HUMAN, Kasada, and Cloudflare Turnstile. 100 requests per URL. Here’s what happened:
| Service | Overall Success Rate | Akamai Sites | DataDome Sites | Kasada Sites |
|---|---|---|---|---|
| Bright Data | 32% | 41% | 18% | 5% |
| ScraperAPI | 12% | 8% | 14% | 0% |
| Oxylabs | 28% | 35% | 22% | 3% |
| ZenRows | 24% | 19% | 31% | 2% |
| UltraWebScrapingAPI | 97% | 99% | 96% | 94% |
That “100% success rate” from Oxylabs? It’s 28% on hard sites. ScraperAPI’s “99.9%”? It’s 12%. These aren’t cherry-picked numbers — this is what you get when you test against actually protected sites.
The gap isn’t incremental. It’s catastrophic.
The cost of believing the lie
Let’s say you need 10,000 pages from an Akamai-protected e-commerce site. Here’s what you’ll actually pay:
Using ScraperAPI (8% success on Akamai):
- Requests needed: ~125,000 (to get 10,000 successes at 8%)
- Cost at their enterprise rate: $625+
- Time: Hours of retries and failures
Using Bright Data (41% success on Akamai):
- Requests needed: ~24,400
- Cost at $25.10/1K: $612
- Time: Still significant retry overhead
Using UltraWebScrapingAPI (99% success on Akamai):
- Requests needed: ~10,100
- Cost at $50/1K: $505
- Time: Fast, almost no retries
You’re paying more to get worse results, slower. The inflated success rate marketing literally costs you money.
Our 99.9% claim: what it actually means
We claim 99.9% success rate. Here’s exactly what that means and how it’s different:
-
Measured only on anti-bot protected sites. We don’t pad our numbers with easy sites. Our entire business is hard sites — Akamai, DataDome, PerimeterX, Kasada, Imperva. Every request in our metric is against a protected target.
-
Success = usable content. A 200 status with a challenge page is a failure. A response with an empty body is a failure. Success means you got the actual page content you requested, parseable and complete.
-
Measured on custom-analyzed sites. We guarantee 90%+ on any site we accept. The 99.9% is our actual measured performance on sites we’ve custom-analyzed. We don’t hide behind averages.
-
Rolling 30-day measurement. Not a cherry-picked peak. Not a hand-selected timeframe. A continuous, rolling metric.
Is this a harder standard? Absolutely. That’s the point. We built our metric to be honest because we can afford to be — our technology actually works on hard sites.
How to verify any service’s claims
Don’t trust any service’s self-reported numbers. Including ours. Here’s how to verify:
- Pick your hardest URLs. The sites you actually need to scrape. The ones that are failing right now.
- Send the same URLs to multiple services. Same URLs, same volume, same timeframe.
- Measure real success. Check the response bodies. Is it actual content? Or challenge pages, empty bodies, and redirects?
- Calculate cost per successful page. Not cost per request. Cost per page of actual, usable data.
That’s the only metric that matters. Cost per successful page on your specific targets.
Prove it to yourself
We put our money where our mouth is. Our Playground lets you test any URL for free. Enter the URL that’s been giving you problems. See the actual response. Compare it with what you’ve been getting from your current service.
No inflated metrics. No fine print. Just real results on real anti-bot sites.
Tired of paying for failed requests disguised as successes? Try UltraWebScrapingAPI’s Playground →