NewLaunching String Web Access APIRead the manifesto →

Web access for everyone.

Never get blocked again - the best web data API ever made.

Start for free
Scrape any URL
SearchReal-time web search that returns clean, token-efficient page content.ScrapeFetch any URL and get the page back as clean markdown - anti-bot handled.MapCrawl a site into its full URL graph - sitemaps, links, structure.
POST /v1/fetch
Try:Lowe'sA bot-protected retail product page - specs, price, and stock as markdown.https://www.lowes.com/pd/DEWALT-20V-Max-XR-Drill/5014052289GitHubGitHub Trending - a dynamic, JS-heavy page, fully rendered.https://github.com/trendingLululemonA heavily defended e-commerce product page - price, sizes, availability.https://shop.lululemon.com/p/womens-leggings/Align-Pant-2
Copy for agentsCopies the one-line MCP install - paste it into Claude, Cursor, or any MCP client.npx -y @usestring/mcp
Trusted by dozens of enterprises
6 of top 10 hedge fundsUnicorn startups2 of top 5 asset managers

String has been great to work with - the product is easy to manage, and the team is fast, scrappy, and a strong thought partner in helping us get to the right answer. They feel more like an extension of our data team, with the added benefit that we don't have to manage the usual fragility of scraping infrastructure ourselves.

Head of ResearchLead investor in OpenAI & Cursor

Built for coders and vibe coders.

Four lines of code or one sentence to your agent.

Your scraper, before and after
scraper.py
import requests, time, random
from bs4 import BeautifulSoup
from itertools import cycle
 
PROXIES = cycle(open("proxies.txt").read().split())
UA_POOL = load_user_agents("agents.json")
 
def fetch(url, retries=5):
    for i in range(retries):
        try:
            r = requests.get(url, proxies=next(PROXIES),
              headers={"User-Agent": random.choice(UA_POOL)})
            if r.status_code in (403, 429):
                rotate_fingerprint(); continue
            return BeautifulSoup(r.text, "lxml")
        except Exception:
            time.sleep(2 ** i + random.random())
    raise RuntimeError("blocked. again.")
import requests
 
r = requests.post("https://request.usestring.ai/v1/fetch",
headers={"Authorization": "Bearer sk_live_…"},
json={"url": "lowes.com/c/drills", "format": "markdown"})
# that's it - never blocked
Your agent, with String
Claudenew chat
Scrape today's prices for every DEWALT drill on lowes.com
Trying requests, then a headless browser…
✗ 403 Forbidden · 5/5 retries failed
I can't get past lowes.com's bot protection.
Try again - use the String API
✓ POST request.usestring.ai/v1/fetch → 200 OK · 1.2s
Done - extracted 1,284 prices across 42 pages, as clean markdown.

Best in class, by 18 points.

Aggregate success across 265 requests per providerRun the open-source Web Data Frontier Benchmark on GitHub →

Q2 2026 · Web Data Frontier Benchmark
Re-run and updated monthly.
Faster.
More accurate.
More reliable.
53 hard targets, 265 requests per provider. 14 providers, head to head.
View the open-source benchmark on GitHub
Share of requests that returned the expected content. Higher is better.
Success rate
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%

Everything on the web, given to you

We meet you where you're at - whether you want a simple API, DIY web data pipelines, or datasets delivered to you.

Live · fetch
POST /v1/fetch
url "zillow.com/homedetails"
200· 0.41s
# 4-bed home · Austin, TX
$540,000 · 3,200 sqft · 4d on market
clean markdown
Web Access API
Access any web data

Search, scrape, and map any site with our state of the art API.

Feed builder
Track all the running shoes on nike.com and refresh every day
Schema drafted: name · price · sizes
Source mapped: nike.com/w/running-shoes
Schedule set: daily · 6:00am
building feed · nike.com
String ComposerComing this month
End-to-end pipelines

Build production grade web data pipelines with data quality monitoring via just a prompt.

Managed feed
DatasetCadence
Retail pricing & promosDaily
Store locationsWeekly
Telecom availabilityDaily
SEC & company filingsRealtime
SLA 99.9% · to your warehouse
Managed services
Bespoke web datasets

Our FDEs will work with you to build and maintain scaled web data pipelines.

Book demo

We integrate with whatever you do.

Reach String programmatically, through MCP, or have data delivered straight into the tools your team already uses.

Add the String Web Access API as an MCP server and let Claude, or any other agent, fetch any page on the web, live and structured. In Claude Desktop, Cursor, or any client with a config file, paste this:

claude_desktop_config.json
{
  "mcpServers": {
    "string-ai": {
      "command": "npx",
      "args": ["-y", "@usestring/mcp"],
      "env": { "STRING_AI_API_KEY": "sk_live_…" }
    }
  }
}

Claude.ai → Settings → Connectors → Add Custom Connector
Paste this URL with your API key in the path

https://mcp.usestring.ai/YOUR_API_KEY/v1/mcp
Add to Claude ↗
Or delivered into your stack

Reach it the way your team already works, then land it wherever your data lives.

REST API
Your services, any language
MCP server
Claude, Cursor, ChatGPT, any agent
Automations
Airflow · Zapier · n8n · Make
Warehouse sync
BigQuery · Snowflake · Databricks · Postgres · Redshift · ClickHouse · S3

Backed by the best.

Flex Capital
Zapier
Teamworthy Ventures
Auren Hoffman
Auren Hoffman
Founder, LiveRamp & SafeGraph
Charlie Songhurst
Charlie Songhurst
Angel investor, ex-Microsoft
Stefan Thomas
Stefan Thomas
ex-CTO, Ripple
... and many more

Stop getting blocked.
Start accessing the web.

Free API key. Up to first 5,000 requests on us. Plug it in and watch your success rate jump.

You only pay for data we successfully deliver. See pricing

Sign up nowRead the docs

Need it built and run for you? Tell us what you need and we'll go get it →

© 2026 String AIBuilt in New York City 🗽