NewLaunching String Web Access APIRead the manifesto →
← Comparisons

String vs ZenRows (2026): 100 sites compared

Logan Harless, Founder, String · Updated November 2, 2026

Which is better, String or ZenRows?

String is the better fit when a fixed list of protected pages must return consistently. ZenRows is the better fit when you want Fetch, structured extraction, large batch jobs, residential proxies, and interactive browser sessions on one credit balance. In the October 30, 2026 Web Data Frontier Benchmark, String returned verified content on 98.6% of 500 requests. ZenRows Fetch, with JavaScript rendering and premium proxies enabled, returned it on 41.8%, a figure that includes 215 attempts on which ZenRows' API closed the connection without a response.

  • Choose String if a fixed list of protected pages has to return. String returned 98.6% of requests and ZenRows Fetch, with JavaScript rendering and premium proxies, 41.8%.
  • Choose ZenRows if you want Fetch, Extract, 100,000-URL batch jobs, residential proxies, and browser sessions on one credit balance.
  • Do not switch if your Puppeteer or Playwright code runs on ZenRows' hosted browsers, or an SLA, ISO 27001, or enterprise SOC 2 is a buying requirement.

ZenRows still wins meaningful cases. Its Growth plan prices a basic successful page at about $0.14 per 1,000, below String Growth's $0.16 usage rate. It beat String on MarketWatch and Barron's. Its MCP server exposes batch jobs and a full browser-control tool family that String's MCP server does not.

Last updated November 2, 2026. Benchmark figures come from the October 30, 2026 run; see /benchmark. ZenRows product, pricing, credit, Adaptive Stealth, billing, Batch, Browser Sessions, Extract, and MCP claims were checked against its published pricing page, Fetch reference, billing FAQ, Batch documentation, Browser Sessions documentation, Extract documentation, and MCP documentation on August 31, 2026.

TL;DR

  • String passed 493 of 500 benchmark requests, or 98.6%. ZenRows passed 209, or 41.8%, up 0.6 points on September. Its API closed the connection without a response on every attempt for the last 43 targets in the run, 215 attempts the harness scored as failures.
  • String's failure-aware latency score was 4.24 seconds. ZenRows' was 21.91 seconds.
  • ZenRows returned nothing on all five attempts for 53 of 100 sites, 43 of them in that API failure. String returned at least one attempt on every site.
  • The benchmark tested ZenRows Fetch with JavaScript rendering and premium proxies, its 25-credit configuration. It did not test Browser Sessions.
  • ZenRows beat String on MarketWatch and Barron's, each five of five against four of five.
  • ZenRows bills only successful requests, while real 404 and 410 responses count as successful results.
  • A basic Fetch costs 1 credit, JavaScript rendering 5, premium proxies 10, and both together 25.
  • Adaptive Stealth Mode starts with the cheapest viable configuration and escalates only when needed. The benchmark did not test its cost mix.
  • ZenRows Growth's fully used basic-page rate is about $0.14 per 1,000. Its 25-credit protected-page rate is about $3.44.
  • ZenRows offers broader MCP browser automation, Batch, Extract, Browser Sessions, and a residential network. String wins the measured Fetch coverage and latency.
String ZenRows
Product shape One fetch API, plus search, sitemap crawling, remote Chrome, and MCP Fetch, Extract, Batch, Browser Sessions, residential proxies, and MCP
Benchmark path String selects the request or browser path JavaScript rendering plus premium proxies, 25 credits per success
Benchmark success 98.6% (493/500) 41.8% (209/500), with 215 attempts lost to an API failure
Failure-aware latency score 4.24s, 1st of 17 21.91s, 12th of 17
Sites passed on no attempts 0 of 100 53 of 100
Entry offer 20,000 free standard fetches; Starter $19, all of it usage 5,000 free monthly credits, no card
Roughly $100 tier Growth $99, all of it usage at $0.16 to $3.25 per 1,000 verified requests No $100 plan; Launch $57 for 250,000 credits, Growth $165 for 1.2 million
Billing Verified content only Successful requests only; 404 and 410 count as success
Best fit Protected pages that must return consistently One platform for Fetch, batch jobs, extraction, and interactive browser work

String vs ZenRows benchmark results

The Web Data Frontier Benchmark sends every provider the same 100 URLs five times. A response passes only when it contains a marker from the real page. A CAPTCHA or block page returning HTTP 200 still fails. The October run made 8,500 live requests across 17 providers.

String built the benchmark and sells the product that ranked first. The test is public so that conflict is inspectable: the target list and pass criteria, ZenRows adapter, and complete results JSON are available for review.

Provider Successful requests Success rate Latency score
String 493/500 98.6% 4.24s
ZenRows 209/500 41.8% 21.91s

The latency score is failure-aware. For each target it takes the p75 of successful attempts; a provider that never returns the page inherits the p75 of providers that did. That prevents a fast block page from looking like good performance.

Accuracy against latency. Accuracy is the percent of requests that returned verified content; latency is the failure-aware mean per-target p75, in seconds. Web Data Frontier Benchmark · 100 targets · 500 requests per provider · October 30, 2026. Current leaderboard

The benchmark tested ZenRows' strongest Fetch flags

The ZenRows adapter sets js_render=true and premium_proxy=true. ZenRows' current Fetch reference prices that combination at 25 credits per successful request.

ZenRows also offers mode=auto, or Adaptive Stealth Mode. It starts with the cheapest viable setup, then escalates to JavaScript rendering or premium proxies only when needed. Failed attempts inside that escalation are free, and the customer pays for the configuration that succeeds. Auto mode could lower the credit mix on easy pages, but the benchmark did not record what it would choose for each target.

The 41.8% result is a measured result for ZenRows Fetch with both strong flags on. It is not a claim about ZenRows Browser Sessions, which expose a real browser over CDP for Puppeteer or Playwright and bill bandwidth plus session time. Interactive browser work is a different product and was not in this Fetch comparison.

Where the 56.8-point success gap appears

ZenRows returned nothing on all five attempts for 53 sites. String returned content on all 53, and passed 50 of them on every attempt. The two products shared no shutout.

Most of that count is an API failure, not site blocking. From the 58th target in the run to the 100th, ZenRows' API closed the connection without a response on every attempt, and the harness scored those as failures. Outside that stretch ZenRows shut out 10 sites: Mouser, Lowe's, AutoZone, Louis Vuitton, StockX, Ticketmaster, CarGurus, Monster, Instagram, and Bloomberg.

ZenRows won two targets outright, MarketWatch and Barron's, clearing each on all five attempts where String passed four. Its two September wins, AutoTrader and Allegro, are now ties: both products cleared each on all five attempts.

Anti-bot systems

Anti-bot system String ZenRows
Cloudflare 98.7% 33.3%
Akamai 97.0% 57.0%
DataDome 97.9% 52.6%
PerimeterX 97.8% 73.3%

PerimeterX is ZenRows' strongest named category at 73.3%, against 75.6% in September and 44.4% in August, and Akamai is next of the four at 57.0%. Cloudflare is its weakest of the four, even though the adapter already enabled both premium proxies and rendering. String's largest lead of the four is Cloudflare at 65.4 points. Every column includes the 43 targets lost to the API failure, so treat ZenRows' rates as floors. If you would rather run your own stack, our guide to bypassing Cloudflare when scraping shows what a plain request, curl_cffi and a fetch API each got from eight Cloudflare sites.

ZenRows' working range is more visible by industry. It passed 69.1% of fashion and luxury requests, 54.1% of retail requests, 51.1% of news and finance requests, 48.0% of marketplace requests and 25.0% of social requests. It returned nothing across the ticketing, developer-and-research, search-engine, and gaming-and-betting categories, where the API failure accounts for most of the misses. The product can fit a target list even when the aggregate does not, but that fit has to be tested.

What each product is

ZenRows is a broader web-data platform. Fetch returns HTML, Markdown, text, JSON, screenshots, or PDFs and handles proxies, rendering, sessions, headers, and Adaptive Stealth Mode. Extract is a beta that returns maintained structured JSON on a curated domain set. Batch accepts up to 100,000 URLs in one job, schedules recurring work, retries transient failures, and stores results.

Browser Sessions connect existing Puppeteer or Playwright code to hosted browsers with residential proxies, geotargeting, and interactions. ZenRows publishes more than 55 million residential IPs across 190-plus countries in its product documentation. Those are genuine product advantages over a fetch-only comparison.

String is narrower. Send a URL to the Web Access API and get Markdown, HTML, or JSON. Proxy rotation, fingerprinting, CAPTCHA solving, and browser escalation happen behind the endpoint. String also provides search, an asynchronous sitemap crawl, remote Chrome over CDP, and a hosted MCP server.

Both providers support agents, but ZenRows exposes the wider tool surface. String is in the official registry as ai.usestring/web-access, with fetch, search, and sitemap tools. The open-source ZenRows MCP server runs remotely at https://mcp.zenrows.com/mcp or locally through @zenrows/mcp. Its tool catalog covers scrape, batch submission and results, browser navigation, clicks, forms, JavaScript, cookies, storage, tabs, screenshots, and PDFs. ZenRows wins MCP breadth.

The same request in ZenRows and String

One job, done both ways: fetch a JavaScript-heavy product page and get its content back. Each request follows the vendor's own docs for that job, checked against those docs on October 15, 2026. Each one reads its key from an environment variable, such as $STRING_API_KEY.

curl "https://api.zenrows.com/v1/?apikey=$ZENROWS_API_KEY&url=https%3A%2F%2Fwww.example.com%2Fproduct%2F123&js_render=true&premium_proxy=true"
curl https://request.usestring.ai/v1/fetch \
  -H "Authorization: Bearer $STRING_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://www.example.com/product/123", "format": "markdown"}'

ZenRows Fetch takes the key in the query string and returns raw HTML; markdown needs response_type=markdown. This is the configuration the benchmark ran, JavaScript rendering plus premium proxies, at 25 credits a request. ZenRows' newer mode=auto escalates on its own and bills only the configuration that succeeds, and it cannot be combined with the two manual flags. String takes the key in a header, picks the fetch path and proxy class for each request, and bills the path it used. Add "executeJS": true if you want to force a browser.

Pricing: 1 to 25 credits versus verified requests

The live ZenRows pricing page lists Free at 5,000 credits per month, Build at $16 for 45,000, Launch at $57 for 250,000, Growth at $165 for 1.2 million, and Scale at $456 for 5 million. Every plan shares its balance across Fetch, Extract, Batch, Browser Sessions, and residential bandwidth.

Fetch and Batch use the same weights:

ZenRows request Credits Build, per 1,000 Launch, per 1,000 Growth, per 1,000
Basic page 1 $0.36 $0.23 $0.14
JavaScript rendering 5 $1.78 $1.14 $0.69
Premium proxy 10 $3.56 $2.28 $1.38
JavaScript plus premium proxy 25 $8.89 $5.70 $3.44

ZenRows' pricing FAQ says failed attempts never charge and real 404 or 410 responses count as usable, billable results. Its general billing FAQ says the same. The distinction matters: a target page that genuinely does not exist bills, while a blocked attempt does not.

Browser Sessions use another meter on the same balance. The Browser Sessions pricing section lists 25,000 credits per GB plus 5 credits per session minute. This comparison does not convert that into a per-page rate because page weight and session reuse determine the answer.

String bills only requests that return verified content, and each plan's fee is usage credit. The first 20,000 standard fetches are free. Starter is $19 a month and includes $19 of usage; Growth is $99 and includes $99 of usage at these rates:

Fetch path Price per 1,000 verified requests
Request, standard proxy $0.16
Browser, standard proxy $0.80
Request, premium proxy $0.90
Browser, premium proxy $3.25

The honest price comparison runs both ways. ZenRows Growth's $0.14 basic rate undercuts String Growth's $0.16 rate. String's $3.25 browser-on-premium path and $0.90 premium-request path both undercut ZenRows' $3.44 protected rate. ZenRows Growth is $165 a month for its credits; String Growth is $99 a month, all of it usage, and unused credit rolls over. The exact winner depends on volume and which paths succeed.

Do not divide either provider's success-billed rate by benchmark success. A blocked request costs neither provider anything. Success rate answers whether the page arrives. The rate card answers what a successful response costs. The broader pricing comparison keeps those questions separate.

Where ZenRows is the better choice

  • You want Fetch, structured extraction, scheduled batch jobs, residential proxies, and browser sessions under one subscription.
  • You already use Puppeteer or Playwright and want a hosted browser with residential routing.
  • Your target list is concentrated in fashion or retail, or in MarketWatch and Barron's, the two sites ZenRows won.
  • You want a wide MCP tool set that can scrape, submit batch jobs, and drive multi-step browser sessions.
  • Basic pages dominate and you use enough Growth credits to reach the lower unit rate.
  • Enterprise-tier SOC 2, ISO 27001, a DPA, and an SLA are purchase requirements.

Where String is the better choice

  • A fixed list of protected pages must return consistently through one endpoint.
  • Your targets resemble ZenRows' social, ticketing, developer, Cloudflare, or Akamai misses.
  • You want the service to select a path without exposing credit weights to each caller.
  • You want lower measured latency and a 56.8-point higher Fetch pass rate on this target mix.
  • You want Markdown output and a smaller MCP surface focused on page retrieval.

Using String and ZenRows together

Keep ZenRows for Batch, Extract, browser sessions, or inexpensive basic pages and send the Fetch misses through String. The reverse can work too: use String for protected retrieval and ZenRows for structured extraction or agent-driven interactions.

Switching from ZenRows to String

What carries over. A Fetch GET to api.zenrows.com/v1/ becomes a POST to String's /v1/fetch with the key in a header. Keep the URL list and the code that reads HTML. response_type=markdown maps to "format": "markdown", js_render=true to "executeJS": true, proxy_country to countryCode, and js_instructions to String's browser actions. premium_proxy and mode=auto have no String equivalent, because String picks the proxy class itself.

What you rebuild. Extract, Crawl, Batch jobs with webhooks and schedules, css_extractor, PDF rendering, and per-key credit caps. Puppeteer or Playwright code on ZenRows Browser Sessions can connect to String's remote browser over CDP instead. Batch and Crawl stay with ZenRows or move to a job runner you already operate.

Integrations to reconnect. ZenRows publishes clients for Python, Node.js, and Go, a CLI, a remote MCP server, and integrations for n8n, Zapier, Make, LangChain, and LlamaIndex. String ships no language SDK, so an SDK call becomes one HTTP POST. Its hosted MCP server runs at mcp.usestring.ai, n8n calls String through the HTTP Request node, and Zapier, LangChain, and the Vercel AI SDK have setup guides in String's docs.

Test on your own failing URLs first. Test ZenRows Fetch in both Adaptive Stealth and explicit 25-credit modes against the same URLs you run through String. In this run ZenRows returned nothing on 53 of the 100 sites, and String returned 50 of those on every attempt. Compare pages returned and cost per usable page, then move only the targets that improve. Leave custom headers off for the test: String does not bill a blocked request unless that request sent custom headers. The first 20,000 String standard fetches are free with no card. If ZenRows is one option among several, the ZenRows alternatives comparison ranks the substitutes on the same benchmark.

FAQ

Is String better than ZenRows for protected websites?

On the October 2026 Fetch benchmark, yes. String returned verified content on 98.6% of 500 requests and ZenRows on 41.8%, even though ZenRows ran with JavaScript rendering and premium proxies. ZenRows' figure includes 215 attempts on which its API closed the connection without a response. ZenRows beat String on MarketWatch and Barron's, and its Browser Sessions were not tested.

Is String cheaper than ZenRows?

Not always. ZenRows Growth's fully used basic-page rate is about $0.14 per 1,000 successes, below String Growth's $0.16 usage rate. ZenRows' 25-credit protected path is about $3.44, above both String's $3.25 browser-on-premium path and its $0.90 premium-request path. ZenRows Growth costs $165 per month; String Growth costs $99, which is all usage at those rates.

Does ZenRows charge for blocked requests?

No. ZenRows bills only successful requests. Its live pricing page and billing FAQ say 404 and 410 responses count as successful results, while failed and retried attempts are free. String bills only when verified content returns.

Did the benchmark test Adaptive Stealth Mode or Browser Sessions?

No. It tested Fetch with js_render=true and premium_proxy=true, the 25-credit configuration. Adaptive Stealth Mode changes the cost mix by starting cheap and escalating. Browser Sessions provide an interactive CDP browser with a separate bandwidth-and-time meter and may behave differently.

Which product is faster?

String on the failure-aware benchmark score: 4.24 seconds against ZenRows' 21.91. On the 31 sites both products returned in full, the median per-site time was 1.70 seconds for String and 12.60 for ZenRows. That score includes the cost of targets a provider fails and should not be read as a raw response-time promise for every successful page.

Which provider has the better MCP server?

ZenRows for breadth. Its hosted and open-source MCP server includes scrape, Batch, and a full browser-control family. String's hosted MCP server focuses on fetch, search, and sitemap tools. MCP breadth does not change the measured Fetch coverage gap.

When should I stay with ZenRows?

Stay when you need its broader platform, your target list fits its fashion or retail strengths, or basic-page pricing and enterprise governance matter more than the benchmark aggregate. ZenRows also beat String on MarketWatch and Barron's.

Can I verify these results?

Yes. The benchmark repository, ZenRows adapter, and October results file are public. A full run makes thousands of billable requests, so begin with a subset.

ScraperAPI vs ZenRows vs ScrapingBee: which to use in 2026Updated November 2, 2026Best Web Scraping APIs in 2026: 17 Tools ComparedUpdated November 2, 2026Web Scraping API Pricing in 2026: 17 Providers ComparedUpdated November 2, 2026
Get your API key →Explore the Web Access API