String vs Jina Reader (2026): 88 sites compared

Which is better, String or Jina Reader?
String is the better fit when the pages you need sit behind bot protection. Jina Reader is the better fit when your URLs are open pages, such as docs, blogs, news articles, and PDFs, and you want clean Markdown for a language model at a token price. The difference is a stated design choice. Jina's Reader FAQ says Reader "does not actively circumvent or bypass any website defense mechanisms," and that a paid key "does not enable access to websites that block our service." String's fetch API is built to return those pages.
We sent Jina Reader one request for each site in the Web Data Frontier Benchmark on November 4, 2026. On the 88 sites that were also in the October 30, 2026 benchmark run, Jina returned the real page on 31. String returned all 88 in that run, and 83 of them on all five attempts.
- Choose String if your target list includes retail, travel, ticketing, social, jobs, or real estate sites with anti-bot protection.
- Choose Jina if your URLs are open pages and you want Markdown, PDF reading, image captions, and embeddings from one token balance.
- Do not switch if Jina already returns every page you need. For open pages, its output shaping and token pricing are hard to beat.
Last updated November 4, 2026. Jina figures come from a single-attempt run of the public benchmark harness on November 4, 2026. String figures come from the October 30, 2026 run. Jina's pricing, rate limits, and FAQ were checked on its Reader page on November 4, 2026.
TL;DR
- Jina Reader returned 31 of 88 bot-protected sites on one attempt each, on November 4, 2026. String returned all 88 in the October 30 run, and 83 on every one of five attempts.
- On sites behind DataDome, Jina returned 3 of 19. Behind Akamai, 3 of 17. Behind Cloudflare, 3 of 15. String passed 97.9%, 96.5%, and 98.7% of requests on the same sites.
- Jina returned no site that String missed.
- That gap is by design. Jina's FAQ says Reader does not bypass anti-bot systems, and a paid key does not unlock more sites.
- Jina bills output tokens: $50 buys 1 billion, or $0.05 per million. String Growth is $99 a month, all of it usage credit, at $0.16 to $3.25 per 1,000 successful requests.
- Neither one bills a failed request.
- Jina's request is shorter, its output shaping is richer, and it reads PDFs and captions images. Use it for open pages.
| String | Jina Reader | |
|---|---|---|
| Product shape | One fetch API, plus search, sitemap crawling, remote Chrome, and MCP | URL-to-Markdown reader (r.jina.ai) and search (s.jina.ai), sold with Jina's embeddings and rerankers |
| Anti-bot policy | Built to return protected pages | Does not bypass anti-bot systems, per its FAQ |
| Sites returned, 88 protected sites | 88 of 88 (October 30 run, 5 attempts each) | 31 of 88 (November 4, 1 attempt each) |
| Default output | JSON envelope; Markdown, HTML, or text on request | Markdown; HTML, text, screenshots, or JSON on request |
| Billing unit | Per successful request, $0.16 to $3.25 per 1,000 on Growth | Per output token, $0.05 per million on the $50 pack |
| Failed requests | Not billed | Not billed, per its FAQ |
| Free use | 20,000 standard fetches, no card | 20 requests a minute without a key; 10 million tokens per new key, for non-commercial use |
| Best fit | Protected pages that must return | Open pages turned into LLM-ready text |
What customers say after switching from Jina

As you said when we met in your office, String is much better than Jina at avoiding bot detection. I specifically retried the pages that failed on Jina - and vast majority were successful with String.
Mike, a String customer that moved from Jina, on Slack.
String vs Jina on 88 protected sites
The Web Data Frontier Benchmark sends each provider the same bot-protected URLs. A response passes only when it contains a marker from the real page, so a block page or CAPTCHA that returns HTTP 200 still fails.
Jina is not part of the monthly benchmark, so we ran it separately. On November 4, 2026, the harness sent one Reader request per site with no API key. The request asked for HTML, so the marker check read the same page body it reads for every provider, and it bypassed Jina's five-minute cache. Jina's FAQ says a paid key raises the rate limit but "does not grant access to additional websites," so a keyless run measures the same coverage. The harness has since replaced 12 of its 100 sites, so this page compares the 88 sites that appear in both Jina's run and String's October 30 run.
String built the benchmark and sells the product that ranked first in October. The harness, the target list, and the October results file are public, so the result can be checked.
| Provider | Run | Sites returned | Requests passed |
|---|---|---|---|
| String | October 30, 2026, 5 attempts per site | 88 of 88 | 433 of 440 (98.4%) |
| Jina Reader | November 4, 2026, 1 attempt per site | 31 of 88 | 31 of 88 (35.2%) |
One attempt per site is a spot check, not a full five-attempt run, and the two runs were five days apart. A five-attempt run could move Jina's count a few sites either way. It would not close a 57-site gap.
Where Jina returned the page and where it did not
By anti-bot vendor, on the same 88 sites:
| Anti-bot system | Sites | Jina sites returned | String requests passed |
|---|---|---|---|
| DataDome | 19 | 3 | 97.9% |
| Akamai | 17 | 3 | 96.5% |
| Cloudflare | 15 | 3 | 98.7% |
| Custom or in-house | 9 | 7 | 100% |
| None named | 8 | 6 | 100% |
| AWS WAF | 7 | 2 | 100% |
| PerimeterX | 6 | 3 | 96.7% |
| Other (Kasada, Incapsula, Fastly, Ticketmaster, Temu) | 7 | 4 | 100% |
Jina returned most of the social platforms in the set: Facebook, Instagram, LinkedIn, Pinterest, TikTok, X, and YouTube. It also returned Amazon, Walmart, Airbnb, Kayak, StubHub, and Zillow. It missed every site in jobs (Indeed, Glassdoor, Monster, ZipRecruiter) and reviews (Yelp, Trustpilot, Tripadvisor, G2), along with eBay, Etsy, Home Depot, Nike, Zara, Booking.com, Ticketmaster, Realtor.com, Redfin, and the Wall Street Journal. Of its 57 misses, 50 came back as HTTP 200 without the real page, which usually means a block or challenge page. Five were 403 errors and two were 422 errors from Jina.
What each product is
Jina Reader turns a URL into text for a language model. You prepend https://r.jina.ai/ to any URL and get Markdown back. Headers shape the result: X-Engine picks a plain HTTP fetch or a headless browser, X-Return-Format switches to HTML, text, or a screenshot, X-Target-Selector and X-Remove-Selector keep or drop parts of the page, and X-Set-Cookie forwards a session you already hold. It reads PDFs natively, captions images with a vision model, and can extract fields to a JSON schema with its ReaderLM-v2 model. The Reader service code is on GitHub. s.jina.ai runs a web search and returns the top five results as text. One Jina key also covers its embeddings and reranker APIs, and Jina has been part of Elastic since October 2025.
String's fetch API takes a URL and returns the page as the site serves it, as Markdown, HTML, or text. It chooses a plain request or a real browser, and a standard or premium proxy, for each request, and it bills the path it used. The same key covers live search, async sitemap crawling, remote Chrome sessions, and a hosted MCP server. String does not sell embeddings or rerankers.
The same request in Jina and String
One job, done both ways: fetch a JavaScript-heavy product page and get its content back as Markdown. Each request follows the vendor's own docs, checked on November 4, 2026, and reads its key from an environment variable.
curl "https://r.jina.ai/https://www.example.com/product/123" \
-H "Authorization: Bearer $JINA_API_KEY"
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"}'
Jina's request is shorter. Markdown is its default, its default engine already renders the page in a headless browser, and the key is optional: without one you get 20 requests a minute. String's default response is a JSON envelope, per its fetch API reference, so the request names "format": "markdown". The difference is what happens on a protected page. Jina sends one standard browser request and returns what the site returned. String retries the same URL on a premium proxy or a real browser when the site blocks the first attempt, and bills only the request that came back.
Pricing: tokens out against pages returned
Jina bills Reader by output tokens, from one balance shared with its embeddings and reranker APIs. The Reader pricing table lists:
| Pack | Price | Tokens | Rate |
|---|---|---|---|
| New key | Free | 10 million | Non-commercial use only |
| Prototype Development | $50 | 1 billion | $0.050 per million |
| Production Deployment | $500 | 11 billion | $0.045 per million, premium rate limits |
Jina has no plan near $100 a month. Packs are one-time top-ups, with optional auto top-up. Two $50 packs buy 2 billion tokens.
A page's token count sets its cost. A 5,000-token Markdown article costs $0.25 per 1,000 pages at $0.05 per million. A 50,000-token product page costs $2.50 per 1,000. Both are our arithmetic, not Jina's figures. Asking for HTML instead of Markdown raises the token count sharply, and Jina's OCR mode costs 40 times more tokens. Jina's FAQ says tokens are not deducted for failed requests.
String bills by request, not by size. The first 20,000 standard fetches are free with no card. Starter is $19 a month and Growth is $99, and each plan's fee comes back as usage credit that rolls over. Growth rates are:
| Fetch path | Price per 1,000 successful requests |
|---|---|
| Request, standard proxy | $0.16 |
| Browser, standard proxy | $0.80 |
| Request, premium proxy | $0.90 |
| Browser, premium proxy | $3.25 |
On open, text-heavy pages Jina can cost less than String's browser paths, and about the same as a String standard request when pages are short. On protected pages the price comparison stops mattering: a request Jina cannot return is free, but the page still is not there.
Where Jina is the better choice
- Your URLs are open pages: documentation, blogs, news, research papers, and PDFs.
- You want Markdown shaped for a model, with selectors, image captions, and link summaries set per request.
- You already use Jina embeddings or rerankers and want one key and one token balance.
- You want a free, keyless way to read a few pages a minute.
- You need to run the reader models in your own infrastructure, which Elastic licenses separately.
Where String is the better choice
- Your target list includes sites behind DataDome, Akamai, Cloudflare, PerimeterX, or Kasada.
- You need retail, travel, ticketing, social, jobs, or real estate pages to return on every run.
- You want one bill per page returned, whatever the page size.
- You need live search, sitemap crawling, or a remote browser on the same key.
Using String and Jina together
Many teams keep Jina for open pages and send the URLs it fails on to String. That is what Mike did: he retried the pages that failed on Jina, and most of them came back through String. The split is easy to automate, because Jina does not bill a failed request and String does not bill a blocked one.
Switching from Jina to String
What carries over. A Reader GET becomes a POST to String's /v1/fetch, with the URL in the body and "format": "markdown". The Jina key becomes a String bearer key. X-Proxy with a country code becomes countryCode. You can drop X-Engine and X-No-Cache, because String picks the fetch path per request and always fetches live.
What you rebuild. Jina's output shaping: X-Target-Selector, X-Remove-Selector, generated image captions, link and image summaries, PDF reading, and ReaderLM-v2 extraction. String's jsonSchema covers extraction for the fields you name, and its /search covers live results in place of s.jina.ai. Embeddings and reranking stay with Jina or another provider.
Integrations to reconnect. Jina publishes a hosted MCP server at mcp.jina.ai and a CLI. String ships no language SDK, so a Reader call becomes one HTTP POST. String's 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. Take the URLs that come back empty or blocked from Jina today and run them through String. 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.
FAQ
Is String better than Jina for protected websites?
Yes. On November 4, 2026, Jina Reader returned 31 of 88 bot-protected sites in the Web Data Frontier Benchmark on one attempt each. String returned all 88 in the October 30 run. Jina's own FAQ says Reader does not bypass anti-bot systems, so the gap is by design.
Does Jina Reader bypass Cloudflare or other bot protection?
No. Jina's Reader FAQ says Reader "does not actively circumvent or bypass any website defense mechanisms, anti-bot systems, or access controls." In our November 4, 2026 run, it returned 3 of 15 Cloudflare-protected sites, 3 of 19 behind DataDome, and 3 of 17 behind Akamai.
Will a paid Jina key get me past blocked sites?
No. Jina's FAQ says upgrading "does not grant access to additional websites." A paid key raises the Reader rate limit from 20 requests a minute without a key to 500, and to 5,000 on a premium key.
Is String cheaper than Jina?
It depends on the page. Jina charges $0.05 per million output tokens, so a short Markdown page can cost less than String's $0.16 per 1,000 standard requests, and a long page can cost more. On a protected page that Jina cannot return, String is the only one of the two that delivers the page. Neither one bills a failed request.
Does Jina charge for failed requests?
No. Jina's FAQ says tokens are not deducted for failed requests. String does not bill blocked requests either. It bills a site's 404, because that is the site's real answer.
When should I stay with Jina?
Stay when your URLs are open pages and Jina already returns them, when you rely on its Markdown shaping, PDF reading, or image captions, or when you buy Jina embeddings and want one token balance.
Can I verify these results?
Yes. The benchmark harness is public, along with the October results file. The Jina run used a Reader adapter that sends one GET to r.jina.ai with HTML output and the cache bypassed. Jina allows 20 requests a minute without a key, so you can rerun it for free.