Across 99 live sites, five attempts each, ScraperAPI, ZenRows and ScrapingBee all returned every attempt on two sites. Not two hundred. Two: nytimes.com and databricks.com. On 46 of the 99, exactly one of the three returned all five attempts and neither of the other two did, and the one that worked was a different vendor each time. That is the finding that decides this question. These three are not three grades of the same product, so a ranking is the wrong way to choose between them. Pick the one that returns your sites. ScraperAPI cleared the most ground in our August 11, 2026 run at 64.2%, against ZenRows at 34.3% and ScrapingBee at 29.7%, but two caveats sit on those numbers and this page states both.
If you have to pick one of the three without testing, pick ScraperAPI: it returned all five attempts on 58 of the 99 sites, against 24 for ZenRows and 22 for ScrapingBee. If your targets are European classifieds, travel booking or luxury apparel, test ZenRows first, because it was the only one of the three to clear hyatt.com, booking.com, tripadvisor.com, allegro.pl, neimanmarcus.com, canadagoose.com, ralphlauren.com, stockx.com and g2.com. If your list includes facebook.com, airbnb.com, alibaba.com, footlocker.com or leboncoin.fr, test ScrapingBee, which was the only one of the three to return those. And if none of that describes your list, the honest answer is that all three shut out on 9 of the 99 sites and 25 of the 99 had none of them returning a full set, so the choice between them may not be the choice that matters.
ultra_premium and ScrapingBee on Auto Mode. The August 11 run predates that change. ZenRows ran at its top setting on the day.| String | ScraperAPI | ZenRows | ScrapingBee | |
|---|---|---|---|---|
| Benchmark success, Aug 11 2026 | 97.0% | 64.2% | 34.3% | 29.7% |
| Sites returning 5 of 5 | 92 of 99 | 58 of 99 | 24 of 99 | 22 of 99 |
| Sites returning 0 of 5 | 2 of 99 | 29 of 99 | 58 of 99 | 62 of 99 |
| Plan nearest $100/mo | Growth, $100 | Startup, $149 | Launch L2, $99 | Startup, $99 |
| Credits at that plan | not credit-based | 1,000,000 | 500,000 | 1,000,000 |
| Protected page cost | $2.00 per 1,000 | 10 credits | 25 credits | 25 credits, 75 on stealth |
| Billed for failures | no | no | no | no |
| Credits roll over | yes | no | one month | not published |
| Free to start | 5,000 requests | 1,000 credits | 5,000 credits/month | 1,000 credits |
String sells a web scraping API. We built the benchmark this page draws on, and String ranks first in it. That is a conflict, and the only useful answer to it is a harness you can run yourself with your own keys and your own target list. The suite, the adapters and the raw result files are public at usestring/web-data-frontier-benchmark, and the README describes the pass rule in full. The raw JSON for this run is in the repo, so every count on this page can be recomputed rather than taken on trust.
The section below on how each provider was configured is the part that costs us something. Read it before you use any number here.
99 live sites, five attempts each, 495 requests per provider, a 90 second timeout, and a marker-based pass rule: an attempt passes only when the response contains content the target actually serves, so a challenge page or an empty shell counts as a failure. Fifteen providers ran the same list on August 11, 2026.
Now the caveat. Each provider is driven by a small adapter file in the harness, and the adapter decides which flags go out with every request. Here is what those files hold today, and when each was last touched:
| Provider | Adapter setting today | Last changed | Applied to the Aug 11 run |
|---|---|---|---|
| ScraperAPI | ultra_premium: true, rendering off, cache disabled |
September 6, 2026 | No |
| ZenRows | premium_proxy: true, js_render: true |
July 13, 2026 | Yes |
| ScrapingBee | mode: auto, max_cost: 75 |
September 6 and 7, 2026 | No |
On September 6 we changed the harness so that every provider runs at the strongest anti-bot configuration its API offers. That work landed four weeks after this run, and the run has not been repeated. The consequence is plain: ScraperAPI's 64.2% and ScrapingBee's 29.7% were measured below the ceiling those APIs publish. ScraperAPI now goes out on ultra_premium, its advanced bypass tier. ScrapingBee now goes out on Auto Mode with the ceiling pinned at the 75-credit stealth tier, which climbs through configurations until one works. Neither had those settings on August 11.
ZenRows is the exception. Its adapter has sent premium_proxy and js_render together since the harness was first committed in July, and that pair is the 25-credit protected configuration ZenRows' own pricing docs describe as its top tier. Its 34.3% is what its strongest published path returned on the day.
So the ranking on this page is a ranking of what three APIs returned on one day at three different distances from their own ceiling. That is worth less than a clean ranking, and saying so is cheaper than having a ScraperAPI engineer say it for us. What survives the caveat is the per-site disagreement below, because that is a statement about which sites came back from which vendor, and a raised ceiling on two of them would change the counts without changing the shape.
Here is the number this page exists for. Of the 99 sites, exactly two came back with all five attempts from all three providers: nytimes.com and databricks.com. That is the entire set the three of them agree on.
Move one step out and it gets worse rather than better. On 46 of the 99 sites, exactly one of the three returned all five attempts and neither of the other two managed a full set. ScraperAPI is the sole provider on 32 of those, ZenRows on 9, ScrapingBee on 5. Nine sites shut out all three: temu.com, trustpilot.com, bestbuy.com, autozone.com, carters.com, idealista.com, yellowpages.com, axs.com and stackoverflow.com. On 25 sites none of the three returned a complete set. Nine of those are the shutouts above; on the other 16 at least one of them returned partial content.
Put the pieces together and the picture is not a ladder. Buying the second-place vendor as a backstop for the first buys you less than it sounds like: ScraperAPI and ZenRows both cleared only 13 sites in common, ScraperAPI and ScrapingBee 15, and ZenRows and ScrapingBee 4. Running ZenRows and ScrapingBee together, the two cheaper options, reaches 42 of 99 sites between them, which is fewer than ScraperAPI reaches on its own with 58.
This is the answer to "which should I use", and it is not the answer the question expects. There is no ordering of these three that survives contact with a specific target list. The vendor that works is a property of your sites, not a property of the vendor.
Benchmark success: 64.2%, 318 of 495 requests, tenth of fifteen providers on the August 11, 2026 run. 58 sites at five of five, 12 partial, 29 shutouts.
Pricing: Hobby is $49 a month for 100,000 credits and Startup is $149 for 1,000,000, from the pricing page with the toggle on monthly. Startup is the plan nearest $100. Annual billing takes 10% off and the page shows both figures, which is more honest than the alternative discussed below. A standard page is 1 credit; Amazon, Walmart and eBay are 5; Google and Bing and their subdomains are 25; LinkedIn is 30, per the credits documentation.
Latency: on the 57 sites where String and ScraperAPI both returned all five attempts, ScraperAPI's median was 3.80 seconds against String's 3.10. That is close, and it is the comparison worth making. The headline latency figure on the leaderboard imputes a stand-in time for every failed cell, so a provider that misses more sites carries seconds it never spent, and comparing those aggregates rewards nothing real.
Strengths: it owns more ground alone than the other two combined. Its 32 sole wins run right across the categories that usually break scrapers: zillow.com, rightmove.co.uk, indeed.com, reddit.com, tiktok.com, github.com, google.com, homedepot.com, lowes.com, delta.com, kayak.com, stubhub.com. It reads 100% on the single Fastly-protected site and 85.0% on Akamai, the best Akamai figure of the three by nearly 50 points. It also documents its costs better than most: there is a URL cost endpoint you can call before you scrape, and a cost control page covering spend caps.
Weaknesses: credits do not roll over. Its own pricing FAQ says the balance resets at renewal, so unused volume is money gone, and the credit usage view is where you find out. It returned nothing on all three Kasada-protected sites, the only zero column any of the three carries on a multi-site protection, where ZenRows reads 66.7% and ScrapingBee 33.3%. And there is a contradiction inside its own documentation worth knowing before you model costs. The pricing FAQ says sites behind Cloudflare, DataDome or PerimeterX "add 10 credits per request", which makes a protected page 11 credits. The docs table heads its column "Cost per Scrape" and gives 10, which reads as the total. We quote 10 here on the grounds that the docs page is the more specific surface, and flag that our own ScraperAPI alternatives page uses the 11 reading.
Billing on failure: ScraperAPI charges only for 200 and 404 responses, plus requests you cancel before giving it 70 seconds. That is success billing, so its rate card is already the cost per usable page and should not be divided by 64.2%.
Benchmark success: 34.3%, 170 of 495 requests, thirteenth of fifteen. 24 sites at five of five, 17 partial, 58 shutouts.
Pricing: read the docs plan table, not the pricing page. The pricing page renders annual-equivalent monthly prices into static HTML: $16, $57, $165, $456. The docs give the monthly-billed figures for the same rungs: $19, $29 and $39 across Build, then $69, $99 and $129 across Launch, then $199 upward through Growth. The gap is the pay-for-ten-get-twelve annual discount its FAQ describes. Launch L2 at $99 a month for 500,000 credits is the plan nearest $100 and the closest match to the anchor of any vendor here.
Its credit weights are unusually clear and unusually rigid: 1 credit standard, 5 for JavaScript rendering, 10 for premium proxies, 25 for both together. The docs state that these "are fixed and never change" on every plan, which means moving up a rung buys volume and nothing else. Residential bandwidth meters at 25,000 credits per gigabyte, and the docs give the conversion outright: one gigabyte is 1,000 protected pages. Concurrency moves by tier rather than by rung, so Launch L2 runs 50 parallel requests whichever rung you sit on.
Latency: on the 21 sites where String and ZenRows both returned all five attempts, ZenRows' median was 6.90 seconds against String's 3.10.
Strengths: its 9 sole wins are the most commercially awkward set on this page. hyatt.com, booking.com and tripadvisor.com are three of the four travel sites it took alone. neimanmarcus.com, canadagoose.com, ralphlauren.com and stockx.com are luxury and resale apparel. allegro.pl is a Polish marketplace and g2.com is a review site. Nothing else in this comparison reached those, and several are hard for the wider field too. It reads 60.0% on DataDome, the best of the three and ahead of ScraperAPI's 54.7%, which is the one claim on its own DataDome page our run supports against these two rivals. It also takes Kasada at 66.7% where ScraperAPI returns nothing, and it is the only one of the three whose benchmark configuration was already its own top tier. Its PerimeterX figure, 44.4%, sits behind ScraperAPI's 57.8%. Its billing is the cleanest of the three as well: never charged for failures, with 404 and 410 counted as successes.
Weaknesses: 58 shutouts out of 99. It reads 10.0% across the 26 sites behind in-house protection, the largest group in the suite, 29.3% on Cloudflare and 36.0% on Akamai. It returned nothing on all 8 social media sites, nothing on real estate, nothing on tickets, and nothing on jobs beyond a partial on indeed.com. Its flaky middle is the largest of the three at 17 sites returning some attempts but not all, including amazon.com at 80%, walmart.com at 40% and bloomberg.com at 20%. A site that returns four times in five corrupts a daily table more quietly than a site that fails outright, and it bills you for the four.
One thing that changes the cost, not the ceiling: ZenRows ships an Adaptive Stealth Mode (mode=auto) that picks the protection level for you. It changes what you pay per page. It does not change which pages come back, and our run already sent the top configuration by hand.
Benchmark success: 29.7%, 147 of 495 requests, last of fifteen. 22 sites at five of five, 15 partial, 62 shutouts, the most in the run.
Pricing: Hobby $19 for 75,000 credits, Freelance $49 for 250,000, Startup $99 for 1,000,000, Business $249 for 3,000,000, Business+ $599 for 8,000,000, from the pricing page. Startup at $99 is the anchor plan and the cheapest credits on this page at $0.099 per thousand. No annual toggle is published, and all prices exclude VAT.
Then read the credit table before you believe that number. A classic proxy without JavaScript rendering is 1 credit, but rendering is on by default, so the default request is 5. Premium proxy without rendering is 10, with rendering 25, and a stealth proxy with rendering is 75. Its own FAQ confirms the default: "each request costs 5 credits because JavaScript rendering is enabled by default." A team that never sets render_js=false pays $0.495 per thousand standard pages, five times the headline.
Latency: on the 22 sites where String and ScrapingBee both returned all five attempts, ScrapingBee's median was 5.05 seconds against String's 2.05.
Strengths: Auto Mode is the best-designed billing feature of the three, and it is new since our run. Add mode=auto and ScrapingBee tries configurations from cheapest to most expensive, stops at the first that works, and charges only for that one. If every configuration fails, the request costs zero credits, and the charge comes back in an Spb-auto-cost response header so you can audit it. max_cost caps how far it is allowed to climb. On a target list with a wide spread of difficulty this is straightforwardly better than paying a flat protected rate on every request. Its 5 sole wins are also a genuinely useful set: facebook.com, airbnb.com, alibaba.com, footlocker.com and leboncoin.fr. It reads 62.5% on social media, tying ScraperAPI and beating ZenRows' zero. It also ships a Markdown output mode, which matters if the pages are going into a model rather than a database.
Weaknesses: 62 shutouts. It reads 9.3% on Cloudflare and 20% on Akamai, and it returned nothing across real estate, jobs, developer sites, search engines, gaming, government and health. Its coverage is thin enough that the earlier finding holds: pairing it with ZenRows reaches fewer sites than ScraperAPI alone.
The asterisk, stated plainly: ScrapingBee's number here is the weakest-supported on the page. The 75-credit stealth tier and Auto Mode both post-date our run, and both are exactly the features that would move a shutout count. If you are choosing between these three, ScrapingBee deserves a test on your own list before you take 29.7% as its ceiling, and we will say the same until we publish a run that includes them.
The overall ordering does not survive this table, which is the most useful thing about it. Figures are success rate on the sites carrying each protection, from the August 11, 2026 run. The protections themselves are Cloudflare, DataDome, Akamai Bot Manager, PerimeterX, now sold by HUMAN Security, and Kasada.
| Protection | Sites | String | ScraperAPI | ZenRows | ScrapingBee |
|---|---|---|---|---|---|
| DataDome | 19 | 97.9% | 54.7% | 60.0% | 29.5% |
| Akamai | 20 | 98.0% | 85.0% | 36.0% | 20.0% |
| Cloudflare | 15 | 100% | 60.0% | 29.3% | 9.3% |
| PerimeterX | 9 | 88.9% | 57.8% | 44.4% | 46.7% |
| AWS WAF | 6 | 96.7% | 50.0% | 40.0% | 26.7% |
| Kasada | 3 | 100% | 0% | 66.7% | 33.3% |
| Fastly | 1 | 100% | 100% | 0% | 0% |
| Proprietary or other | 26 | 96.2% | 69.2% | 10.0% | 44.6% |
DataDome and Kasada are the rows to look at. ScraperAPI leads the other two by 30 points overall, and on DataDome, the largest group in the suite at 19 sites, ZenRows is ahead of it, 60.0% against 54.7%. On the three Kasada sites ScraperAPI returned nothing at all, where ZenRows reads 66.7% and ScrapingBee 33.3%. The order reverses again on the in-house group, 26 sites, where ScraperAPI reads 69.2% and ZenRows 10.0%. If your targets cluster on one protection vendor, the leaderboard is close to useless and this table is the one to read.
None of these three is slow in a way that would decide a purchase, and the published latency column is not the place to check. That column imputes a stand-in duration for every attempt a provider failed, which means a provider that misses more sites carries time it never actually spent. It is a fair scoring choice, because it refuses to reward a fast failure, but it is not a like-for-like speed measurement and we will not use it as one.
Split the set instead. On the two sites all four of us returned in full, ScraperAPI's median was 2.10 seconds, String's 2.70, ScrapingBee's 4.60 and ZenRows' 7.55. On the wider agreed sets against String, ScraperAPI ran 3.80 seconds against String's 3.10 across 57 shared sites, ScrapingBee 5.05 against 2.05 across 22, and ZenRows 6.90 against 3.10 across 21. ScraperAPI is the quickest of the three on agreed pages, and on the small set where everyone succeeded it was quicker than String.
Six reasons, all of them visible in the vendors' own documentation.
At each vendor's anchor plan, using each vendor's own documented weights. All four are success-billed, so no figure below is adjusted by a success rate.
| Vendor | Plan | Monthly | Standard page | Protected page |
|---|---|---|---|---|
| String | Growth | $100 | $0.20 per 1,000 | $2.00 per 1,000 |
| ScraperAPI | Startup | $149 | $0.15 per 1,000 | $1.49 per 1,000 at 10 credits |
| ZenRows | Launch L2 | $99 | $0.20 per 1,000 | $4.95 per 1,000 |
| ScrapingBee | Startup | $99 | $0.10 per 1,000, or $0.50 at the default | $2.48 per 1,000, $7.43 on stealth |
ScraperAPI is the cheapest protected page of the three on published rates, and that is true both directions: String is more expensive per protected page than ScraperAPI at this anchor and cheaper than ZenRows. Where String earns the gap is the shutout count, 2 of 99 against 29, 58 and 62, and where it does not, ScraperAPI is the cheaper buy. Say that out loud rather than hiding it, because a reader who runs 20 easy sites should buy on price and will find this out anyway.
One more comparison worth having. At the configuration our harness sends today, ScraperAPI's ultra_premium costs 30 credits, which is $4.47 per 1,000 on Startup. ZenRows' protected pair costs 25 credits, $4.95 per 1,000 on Launch L2. ScrapingBee's Auto Mode charges the winning tier and nothing at all when everything fails, up to $7.43 per 1,000 at the stealth ceiling. Against those, String's $2.00 per 1,000 premium fetches is the cheaper line. Against the configurations that actually ran on August 11, it is not, for ScraperAPI or ScrapingBee.
String returned all five attempts on 92 of the 99 sites and nothing on 2, temu.com and skyscanner.net. Both of those also shut out all three vendors on this page, so they are field-wide walls rather than a String gap. Its flaky middle is 5 sites: mouser.com, neimanmarcus.com, coupang.com, allegro.pl and booking.com, all at four of five. Three of those five are sites ZenRows took outright, which is the clearest case on this page for testing ZenRows against a specific list rather than reading a leaderboard.
On the 46 sites where exactly one of the three returned a full set, String returned a full set on 42. On the 25 where none of the three did, String returned a full set on 22. That is the argument for a single unblocker over a portfolio, and it is a coverage argument, not a price one. If your list is 30 sites and one vendor already returns all of them, this page has not given you a reason to move.
Pricing is on our pricing page, the first 5,000 standard requests are free, and billing is per successful request.
Do not take the counts here. Take the method.
ultra_premium for ScraperAPI, premium_proxy with js_render for ZenRows, mode=auto with a max_cost you have chosen for ScrapingBee.Our harness does all six and takes your keys. Fork it and swap the target list.
ScraperAPI, if you have to choose without testing: it returned all five attempts on 58 of 99 sites in our August 11, 2026 run, against 24 for ZenRows and 22 for ScrapingBee. But the three agreed on only 2 of the 99 sites, and on 46 of them exactly one worked while the other two returned nothing. Which one worked changed by site. Test all three on your own list before committing, because the ranking does not predict your result.
ScraperAPI, at 60.0% across the 15 Cloudflare sites in the suite, against ZenRows at 29.3% and ScrapingBee at 9.3%. None of the three is strong there. For comparison, String read 100% on the same 15 sites. If your list is mostly Cloudflare, this is the row that decides it.
ScrapingBee, on published credit rates: $99 a month for 1,000,000 credits is $0.099 per thousand standard pages. Two things undercut that. Its default request costs 5 credits rather than 1 because rendering is on unless you disable it, and a protected page costs 25. On protected pages ScraperAPI is the cheapest of the three at roughly $1.49 per thousand. ZenRows is the most expensive protected page at $4.95 per thousand.
No. ScraperAPI bills only 200 and 404 responses, plus requests you cancel before 70 seconds. ZenRows and ScrapingBee both bill only 200, 404 and 410. This is worth stating because it used to be otherwise, and because it means you should not divide any of their rate cards by a success rate to get an effective cost.
Two reasons, and the second is ours. It returned nothing on 62 of 99 sites, the most of any provider in the run, and it reads under 10% on Cloudflare. But our adapter ran it on its vendor default on August 11. The Auto Mode path and the 75-credit stealth tier that would most plausibly move that number were added to our harness on September 6, four weeks later, and we have not published a re-run. Treat 29.7% as a floor for ScrapingBee rather than a ceiling.
Rarely, on this data. ScraperAPI and ZenRows both returned a full set on only 13 sites in common, so the overlap is small, but the combined reach is still limited: ZenRows and ScrapingBee together cover 42 of 99 sites, fewer than ScraperAPI's 58 alone. Adding ZenRows to ScraperAPI is the one pairing with a real case, because ZenRows takes 9 travel, luxury and marketplace sites that ScraperAPI returns nothing on.
Not on every request. ScraperAPI's Startup plan prices a protected page at about $1.49 per thousand against String's $2.00, and ScrapingBee's standard page is cheaper than String's. String is cheaper than ZenRows on protected pages, $2.00 against $4.95. The case for String on this page is coverage rather than unit price: 2 shutouts out of 99, against 29, 58 and 62. If your targets are sites all four return, buy on price.
Yes, and you should. The suite, every provider adapter and the raw result file are public at usestring/web-data-frontier-benchmark. The adapters are the part to read first, because they hold the flags each provider was sent, and the commit history shows when each was last changed.
Checked September 10, 2026.
Benchmark
ScraperAPI
ZenRows
ScrapingBee
Anti-bot vendors named in this page
Related String pages