NewLaunching String Web Access APIRead the manifesto →
Web Access API

Access any page.
Even the hardest ones.

One HTTP call against any URL. String returns clean content, and you only pay when it comes back.

Get an API key ↗Read the docs
First request in seconds · Free to start · Pay only on success
Live · fetch
$ curl https://request.usestring.ai/v1/fetch \
  -H "Authorization: Bearer sk_live_…" \
  -d '{ "url": "https://www.zillow.com/homedetails/…" }'
200 · 412ms · 18.4 KB clean text
<!doctype html> … fully rendered, anti-bot cleared, no proxy to manage.

Fast

0.41s
p50 latency
0.9s
p95 latency

Warm browser pools and a rendering path that skips a cold spin-up wherever a target allows it. Concurrency holds the tail flat under load, so a burst of requests doesn't turn into a queue.

Reliable

Reliable means it gets through the systems that others can't, and recovers on its own when a target shifts.

CloudflareDataDomePerimeterXAkamaiKasadaCAPTCHA challenges

Every request escalates automatically: lightweight request-based fetches, full browser rendering, residential proxies, geolocated routing, and CAPTCHA solving - which compliance-sensitive teams can switch off per request.

Q2 2026 · re-run monthly

The Web Data Frontier Benchmark, in full.

Every provider, every target, same time, head to head. The two numbers that decide whether a scraper is worth running: did it get through, and how fast.

53 hard targets14 providers265 requests per providerdata generated June 29, 2026View the open-source benchmark on GitHub ↗
Benchmark methodology
Real pages, real defenses, verified content.

We tested String Web Access API against thirteen other web access APIs by loading 53 real-world pages known to be difficult to scrape, including targets protected by anti-bot and WAF systems such as DataDome, Akamai, Cloudflare, and Kasada.

The suite covers pages with high scraping value: product detail pages, search results, and similarly protected commerce surfaces. Each URL was requested 5 times per provider - 265 requests each - and a request only counted as successful when the API returned a 2xx and the response contained the page's expected content.

01 · Overall success rate
All targets, all requests. Higher is better.
string
97.4%
bright
79.2%
zenrows
76.2%
context_dev
75.5%
scraperapi
73.2%
firecrawl
72.1%
decodo
69.4%
oxylabs
69.1%
zyte
67.5%
nimble
58.5%
browserbase
50.6%
scrapingdog
47.9%
scrapingbee
35.1%
scrapingant
32.8%
0%25%50%75%100%
02 · Average latency
Mean per-request latency across all attempts. Lower is better - read it alongside success rate.
string
11.00s
bright
24.14s
zenrows
23.47s
context_dev
13.69s
scraperapi
17.85s
firecrawl
12.82s
decodo
32.97s
oxylabs
20.89s
zyte
18.22s
nimble
31.18s
browserbase
2.03s
scrapingdog
10.17s
scrapingbee
5.83s
scrapingant
6.86s
0s9s18s27s36s
Get an API key ↗Free to start · Pay only on success
Data generated June 29, 2026 (Q2 2026 run).

One call. That's the integration.

Send a URL, get clean content back. No proxy list to rotate, no headless browser to babysit.

Request · curl
curl https://request.usestring.ai/v1/fetch \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://hard-target.com", "format": "markdown" }'
200 · 412ms · 18.4 KB clean text

Give your agents the same reach.

Add String over MCP and your agent fetches any page, even the hardest ones, as a single tool call, in Claude, ChatGPT, Cursor, or anything that speaks the protocol.

MCP · Claude / ChatGPT / Cursor
{
  "mcpServers": {
    "string": {
      "url": "https://mcp.usestring.ai/v1/mcp",
      "headers": { "Authorization": "Bearer sk_live_…" }
    }
  }
}

Get your API key now.

Get an API key ↗
First request in seconds · Free to start · Pay only on success
© 2026 String AIBuilt in New York City 🗽