TIER 0
Static state
The data was in the HTML all along. __NEXT_DATA__, JSON-LD, embedded state — parsed straight out of the first response. Cost: one fetch.
source_tier: static_embedded
The web, at memory speed.
Draco forces the world’s data to the edge in milliseconds. It escalates tier by tier, from global workers to a genuine browser, until the data is yours. No exceptions.
How Draco works

DRACO ENGINE
Tangled web in. Clean data out. Draco reads pages the way frameworks serve them — not the way browsers paint them.
The extraction ladder
Draco climbs the cheapest tier that yields data. Most pages never wake the isolate.
TIER 0
The data was in the HTML all along. __NEXT_DATA__, JSON-LD, embedded state — parsed straight out of the first response. Cost: one fetch.
source_tier: static_embeddedTIER 1
Speak the framework's own dialect. Draco lifts the Next.js build id and fetches /_next/data/…json directly — the page's data, without the page.
source_tier: buildid_replayTIER 2
A jailed, jitless V8 isolate lets the page's own JavaScript hydrate, watches every fetch it fires, ranks the candidates, and replays the winner over the stealth client. An oracle — not a renderer.
source_tier: runtime_interceptionThin SPA shells hydrate in the same isolate, then re-enter the exact same Markdown engine. Client-rendered pages, clean Markdown, still no browser.
A real challenge wall returns needs_browser — never a spoofed result. Screenshots and clicks? An explicit 422. Draco doesn't fake what it can't see.
Tier 2 runs air-gapped · userns/netns isolation · seccomp denylist · Landlock FS lockdown · jitless V8, zero host bindings
Built for speed
Draco turns any URL into clean, structured data in the blink of an eye. No headless Chrome. No render tax. Just raw speed.
Already on Firecrawl? Point your client at Draco and change nothing else.
The edge network
Draco runs where the web lives. Your request lands on the nearest edge worker, the fetch happens next door to the target, and only clean data crosses the ocean back to you.
And when a wall goes up — DataDome, PerimeterX, the hard stuff — the ladder keeps climbing. Tier ∞ is a genuine browser. No target is off limits.
Capabilities
URL → Markdown + metadata + an honest trace. The core primitive.
draco scrape <url>The web as a query surface — search and scrape fused into one call.
POST /v1/searchA site's URL surface in one call — sitemaps merged with on-page links.
POST /v1/mapBounded BFS with the full ladder on every page. SPAs hydrate mid-crawl.
POST /v1/crawlA list of URLs as one async job — parallel, under one concurrency budget.
POST /v1/batch/scrapeThe ranked catalog of APIs behind a SPA. See the data source, replay the winner.
POST /v1/discoverLLM-driven sessions with a direct JS API — sticky state, no CDP fumbling.
POST /v1/interactstarted · page · completed · failed — delivered with retries, never robots-gated.
"webhook": { "url": … }draco_scrape and draco_discover as first-class agent tools. stdio or HTTP.
draco mcpSame request shape, same envelope. Change a base URL, keep your client.
POST /v1/scrapeOpen core
Draco is a single Rust workspace — seven crates, MIT/Apache-2.0, no telemetry, no login wall between you and a benchmark. Clone it, build it, point it at the web.
For public data, your own properties, and APIs you’re permitted to use. Polite by default: robots.txt respected, per-host rate limits, bounded retries.
draco/— one workspace, seven crates
license: MIT OR Apache-2.0 · telemetry: none
Point Draco at a URL. Get clean Markdown back before a headless browser would have finished booting.
Linux & macOS first-class · MIT OR Apache-2.0