Turn any URL into clean, LLM-ready data.
Scrape a page, crawl a whole site, run a search, or pull schema-shaped JSON. One API, one response shape, one credit a page. The nav, banners and boilerplate are stripped out.
6,831 tokens instead of 59,769. Same article.
What the page ships
<head>
<meta charset="UTF-8">
<title>Web scraping - Wikipedia</title>
<script>(function(){var className="client-js vector-feature-l…
RLSTATE={"ext.globalCssJs.user.styles":"ready","site.styles":…
<script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(f…
}];});});</script>
<link rel="stylesheet" href="/w/load.php?lang=en&modules=… 59,769 tokens · mostly chrome
What your model reads
**Published:** 2005-09-17
# Web scraping
**Web scraping**, **web harvesting**, or **web data extractio…
Scraping a web page involves fetching it and then extracting …
Contact scraping is a type of web scraping that is used as a …
Web pages are built using text-based markup languages (HTML a…
There are methods that some websites use to prevent web scrap…
## History 6,831 tokens · 4,072 words of content
Everyone says their output is clean. We publish the number.
Extraction quality is the whole product, so we benchmark it against human labels and re-run it against the deployed engine on every change. No competitor selling this primitive publishes an equivalent figure.
- 0.857 word-level F1
-
Extraction accuracy on held-out pages
2,008 human-labeled pages (WCXB). Trafilatura, the strong open baseline, scores 0.841.
- 64% fewer tokens
-
Less boilerplate survives the extraction
25k vs 69k tokens across 10 URLs end-to-end, against Jina Reader, on the same content.
Both figures are reproducible from the benchmark in the repo. How we measure it
Five endpoints that share one response shape.
The same options, the same output formats, the same error envelope. Learn one and you have learned all of them.
- Scrape
POST /v1/web/scrapeOne URL in, clean Markdown and structured data out. The core primitive.
- Map
POST /v1/web/mapDiscover every URL on a site, fast, before you decide what's worth pulling.
- Crawl
POST /v1/web/crawlWalk a whole site and scrape every page as one asynchronous job.
- Search
POST /v1/web/searchRun a query and get ranked results, each already scraped to clean data.
- Extract
POST /v1/web/extractPull schema-shaped JSON from pages, with per-field confidence and sources.
The endpoints chain into whole workflows.
Most jobs are two calls: discover the pages, then get them in the shape your model needs. Because every endpoint shares one options object and one response shape, the chaining is the easy part.
- Feed a site into your model
crawl → your vector storeCrawl documentation, a knowledge base, or a whole site and get clean Markdown for every page, ready to chunk and embed for retrieval.
- Answer with fresh web context
searchOne call runs the query and returns the top results already fetched and cleaned: cited, current context your model can answer from.
- Turn pages into a table
search or crawl → extractPoint a JSON schema at a directory, a listing site, or a pile of articles and get back typed rows with per-field confidence and sources.
- Give your agent the web
MCPEvery endpoint is exposed as an MCP tool, so an agent can search, scrape, and extract mid-conversation to ground its own answers.
One credit a page. Whatever it took.
A hard page and an easy page cost you the same, because you cannot know in advance which one you asked for, and knowing would not help you. You pay for what you asked for, never for how hard it was to get.
No multipliers stacking onto the headline rate at the end of the month. If a request does not succeed, it is not billed.
See pricingSend it a URL. See what comes back.
Free credits to start, no card. The quickstart gets you a first clean response in under a minute.