Skip to content

The open crawler built for agents.

OpenCrawl is a fast, open web crawler built to be driven by AI agents over MCP, and to slot into whatever crawl pipeline you already run.

  1. 14:32:08.000200worker 1GET /docs/api/hooks393ms
  2. 14:32:06.300200worker 3GET /459ms
  3. 14:32:04.600200worker 4GET /186ms
  4. 14:32:02.900200worker 3GET /about663ms
  5. 14:32:01.200200worker 4GET /docs/api/hooks225ms
  6. 14:31:59.500200worker 2GET /pricing93ms
  7. 14:31:57.800200worker 1GET /docs/api/hooks421ms
  8. 14:31:56.100200worker 2GET /products/crawler144ms
  9. 14:31:54.400200worker 1GET /docs/getting-started387ms

One crawler, from the first rule to the last report.

Model how each site should be crawled, test what comes back, and hand the results to your team and your agents. Every step is open and yours to change.

Advanced bespoke crawling models

Shape the crawl to the site, not the other way round. Set scope, depth, rendering and pace per section, save it as a model, and reuse it on every crawl of that site.

  • Per-path rules for depth, rendering and request rate
  • Respects robots.txt and crawl-delay by default
  • Models are plain files you can version and review

Testable data collection

Write down what a crawl should return and run it like a test suite. A changed template or a broken selector fails the run before bad data reaches your pipeline.

  • Schema checks on every extracted record
  • Replay a crawl against saved pages as fixtures
  • Runs in CI and fails the build on a regression

Powerful reporting and agent integration

Every crawl ends in a report people can read and an API agents can query. Ask over MCP, or stream results into your warehouse, search index or dashboard.

  • MCP tools to start, watch and query crawls
  • Coverage, status, render gaps and agent access per page
  • Export to JSON, Parquet, webhooks or your own sink

Drive it from anything. Send results anywhere.

1,742 pages

A crawl engine with the edges left open.

An MCP server built in

Agents can start a crawl, check on it, and query what it found, as tool calls, without a human in between.

Plugins at every step

Hook in before a crawl, before and after each page is captured, and in the renderer itself. Filter, enrich, or send pages anywhere.

Output you can pipe

JSON, JSON Lines and SQLite, with stable fields. Feed an index, a warehouse, an eval set or the next step in your pipeline.

Render only when you need to

Raw HTML by default, headless Chrome for the pages that need it, and a diff showing what scripts add.

Polite by default

robots.txt (RFC 9309) is read before anything else, requests are throttled, and the crawler says who it is.

Every run saved

Crawls are stored and comparable, so you, or your agent, can ask what changed since last week.

Explore the product →

From one URL to a pipeline in three steps.

  1. From the CLI, from code, or by asking your agent. OpenCrawl reads robots.txt and sitemaps, then starts walking.

    $ opencrawl crawl https://example.com robots.txt · 1,812 URLs queued
  2. Add the checks, filters and transforms your workflow needs, at the step where they belong.

    postCapture(page) → extract /pricing · 3 plans extracted
  3. Stream pages out as they’re captured, or let your agents query the finished crawl over MCP.

    → query_pages { status: "4xx" } 23 pages, 19 under /careers/

33,450 requests a second, when the network gets out of the way.

The crawl engine is benchmarked across Go, Rust and TypeScript on every change, against a synthetic site and the live web.

HTML crawl vs JS rendering

  • HTML crawl
  • JS rendering

2,587×

faster as raw HTML 37,663 vs 14.6 pages a second

Pages finished over time, HTML crawl and JS rendering
TimeHTML crawlJS rendering
1ms00
3ms00
10ms160
32ms3130
103ms31850
327ms100000
1s100001
3.3s1000033
10.6s10000143
33.6s10000484
60s10000790
Measured 14 October 2026 · Local synthetic site (localhost) · 100 requests vs 8 Chrome tabs in flight
See the benchmarks →

OpenCrawl is invite-only, for now.

$ opencrawl invite--site

Only the email is required.