A self-hosted Rust crawler that gives Claude direct access to scrape, crawl, extract, map, and search operations through a Firecrawl-compatible API. The MCP server runs embedded with no external dependencies, idles at roughly 50 MB RAM, and exposes the same /v1/scrape and /v1/crawl endpoints you'd hit over REST. Reach for this when you need structured data extraction from websites during agent workflows without spinning up Node.js or browser sidecars. It ships as a single static binary you can run via npx crw-mcp for zero-install MCP integration, or point at api.fastcrw.com if you want managed infrastructure. The AGPL license means you can self-host free or pay for the hosted version to avoid license obligations.
The web data API for AI agents — search, scrape, map, and crawl any site into clean markdown or JSON.
Use the managed cloud for zero infra, or self-host the same open-source engine. Start with Python, TypeScript, cURL, or MCP — you never touch Rust.
Beats Firecrawl and Crawl4AI on truth-recall — measured on Firecrawl's own public dataset.
Quickstart · Docs · Pricing
Works with Claude Code · Cursor · Windsurf · Cline · Codex · Gemini CLI
Get a free API key → fastcrw.com/register — 500 free credits (1 credit ≈ 1 page), no card.
export CRW_API_KEY="crw_live_..."
# cURL — works anywhere, no SDK
curl -X POST https://api.fastcrw.com/v1/scrape \
-H "Authorization: Bearer $CRW_API_KEY" -H "Content-Type: application/json" \
-d '{"url":"https://example.com","formats":["markdown"]}'
| Python | Node.js |
|---|---|
|
|
In both SDKs page is a plain object (markdown, metadata, contentType, …), so page["markdown"] / page.markdown is clean content:
# Example Domain
This domain is for use in documentation examples without needing permission. Avoid use in operations.
[Learn more](https://iana.org/domains/example)
Over cURL you get the same fields wrapped in {"success": true, "data": { … }}.
Prefer no SDK? Every example works over plain HTTP against https://api.fastcrw.com.
That first scrape spent 1 of your 500 free credits — see plans → when you need more.
Got one page? Crawl the whole site: crw.crawl("https://docs.example.com") returns every page — then search, map, and extract in Core operations. Full docs: Quickstart → · API reference →
Search, map, and crawl run on the same engine — built-in web search (a free self-hostable search backend), so there's no separate search vendor and no per-query search-API bill. See the full benchmark →
Open source (AGPL-3.0), passing OpenSSF Best Practices, and published on PyPI · npm · crates.io · Homebrew · APT — with a benchmark you can rerun yourself, not marketing math.
search the web and scrape a page, or map / crawl / extract / monitor a whole site — see below.fastCRW ships a built-in MCP server, so any MCP host can search/scrape/crawl with no glue code.
# Claude Code — managed
claude mcp add crw \
-e CRW_API_URL=https://api.fastcrw.com -e CRW_API_KEY=$CRW_API_KEY \
-- npx -y crw-mcp
# Claude Code — embedded (no server, no key — runs the engine locally, on your machine)
claude mcp add crw -- npx -y crw-mcp
Per-client recipes (Cursor, Windsurf, Cline, Continue.dev, Codex, Gemini CLI): docs.fastcrw.com/mcp-clients/
Reusable instruction packs that teach coding agents when and how to use each verb. Install all 13 into every detected agent with one command:
npx skills add us/crw # all skills, every detected agent
npx skills add us/crw@crw-scrape # just one
npx skills add -g us/crw # global (user-level)
crw (hub) · crw-search · crw-scrape · crw-map · crw-crawl · crw-parse ·
crw-extract · crw-watch · crw-research · crw-dynamic-search (biggest token-saver) ·
crw-best-practices · crw-migrate · crw-self-host. Full catalog: skills/.
| Verb | Endpoint | Does |
|---|---|---|
| Search | POST /v1/search | Web search (own search backend), optionally scrape each result |
| Scrape | POST /v1/scrape | One URL → markdown / HTML / links / schema JSON |
| Map | POST /v1/map | Discover every URL on a site, fast |
| Crawl | POST /v1/crawl | Async crawl of a whole site (returns a job id you poll) |
| Extract | POST /v1/extract (async, multi-URL) or POST /v1/scrape formats:["json"] (inline, one URL) | Structured fields from a JSON Schema |
| Monitor | POST /v1/change-tracking/diff | Diff a page vs a snapshot — the change-tracking building block behind scheduled monitoring |
SDK return shapes: scrape / extract → one object · map → list of URLs · crawl → list of result objects · search → list, or a dict grouped by source when sources=[...] is set.
Full reference: docs.fastcrw.com/#rest-api.
pip install crw # Python package: crw
npm install crw-sdk # Node / TypeScript package: crw-sdk (not crw)
from crw import CrwClient
client = CrwClient() # reads CRW_API_KEY; set CRW_LOCAL=1 for local embedded mode
client.scrape("https://example.com", formats=["markdown", "links"])
# .search() .map() .crawl() .extract() — one method per operation in the table above
import { CrwClient } from "crw-sdk";
const crw = new CrwClient(); // reads CRW_API_KEY; new CrwClient({ apiUrl }) for self-host
await crw.scrape("https://example.com", { formats: ["markdown", "links"] });
// .search() .map() .crawl() .extract() — same methods, all typed
The TypeScript client is typed and zero-dependency; its cloud path is pure fetch, so it runs
on Node 18+, Bun, Deno, and edge runtimes. The Python client is synchronous — wrap long calls
like crawl() / extract() in asyncio.to_thread inside async code. Both client SDKs (crw,
crw-sdk) are MIT-licensed — installing them imposes nothing on your code; AGPL-3.0 covers only the engine.
LangChain and CrewAI integrations ship in the package:
from crw.integrations.langchain import CrwLoader # pip install crw[langchain]
from crw.integrations.crewai import CrwScrapeWebsiteTool # pip install crw[crewai]
All integrations → · SDK examples →
Same binary, same API in both modes — switch anytime by changing the base URL. Most teams run on the managed cloud: it scales with your traffic, rotates proxies, and stays patched, so you ship features instead of operating a scraper.
Managed — api.fastcrw.com · recommended for most teams | Self-host | |
|---|---|---|
| Best for | Shipping fast at any scale, with zero infrastructure to run | Data-residency, air-gapped, or compliance-bound deployments |
| Scale | Grows with you — 500 free credits to millions of pages/month, higher concurrency per tier, no capacity planning | You size, scale, and monitor the machines yourself |
| Proxies & rendering | Managed global proxy network + rendering, rotated for you to get through blocked pages | Bring your own proxy pool and browser tier |
| Ops & reliability | Fully managed — dashboard, usage metering, API keys, monitored infra; nothing to patch or babysit | You run, patch, upgrade, and monitor it |
| Start | Sign up — 500 free credits, no card | docker run -p 3000:3000 ghcr.io/us/crw |
| Cost | Free tier, then plans from $11/mo — pricing | $0 license — you pay for the infra and your team's time |
| License | You call an API — no copyleft on your code | AGPL-3.0 — copyleft if you bundle the engine or run a modified public service |
docker run -p 3000:3000 ghcr.io/us/crw
curl http://localhost:3000/v1/scrape \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com"}'
Or install the CLI and scrape straight from your shell:
brew install us/crw/crw # macOS & Linux
curl -fsSL https://apt.fastcrw.com/setup.sh | sudo sh # Debian & Ubuntu
curl -fsSL https://fastcrw.com/install | sh # any platform, no package manager
crw scrape https://example.com
Prefer Cargo, Docker Compose with a stealth tier, or building from source? All install paths and production hardening: docs.fastcrw.com/installation/ · self-hosting guide →
Skip the setup — 500 free credits on the managed cloud, no card.
You don't need Rust to use fastCRW — it's why the numbers below are what they are. The engine is a single static binary: no Redis, no Node runtime, no Python venv, no headless-browser sidecar parked in the request path. Cold start is sub-second and idle RAM sits around ~50 MB, so one process saturates a $5 VPS instead of a multi-container stack. An agent that fires N scrapes per task pays the network floor N times — fastCRW strips process-spawn, JIT-warmup, and browser-navigation overhead out of every one.
The numbers above come from Firecrawl's own public 1,000-URL dataset, run identically across all three tools with the same matcher — a fairness control, not a looser number. Reproducible, not marketing math. Full table, methodology, and the repro harness: BENCHMARKS.md · fastcrw.com/benchmarks.
New projects use native /v1. Existing Firecrawl v2 SDK code works against the
/firecrawl/v2/* compatibility layer — often just a base-URL swap (point your existing
Firecrawl client at api.fastcrw.com, the address it sends requests to):
from firecrawl import FirecrawlApp
app = FirecrawlApp(api_url="https://api.fastcrw.com", api_key="YOUR_CRW_API_KEY")
Compatibility reduces migration work, not every behavioral difference — check request
bodies, response fields, and unsupported features before moving production traffic.
Field-by-field diff: COMPATIBILITY-firecrawl.md.
SSRF protection (blocks loopback, private IPs, cloud metadata, non-HTTP schemes), optional constant-time Bearer auth, RFC 9309 robots.txt, token-bucket rate limiting, and resource caps (1 MB body, depth 10, 1,000 pages). Hardening guide →
Issues and PRs welcome. make hooks installs the pre-commit hook; make check runs the same
checks as CI. Setup, architecture, and crate layout: CONTRIBUTING.md.
Open source under AGPL-3.0. Calling the API over the network — managed or self-hosted — imposes nothing on your own code. AGPL only applies if you bundle the engine's code directly inside your own app (not just call its API) or run a modified copy as a public service; for those cases the managed offering at fastcrw.com includes a commercial carve-out, and standalone commercial licenses are available — hello@fastcrw.com.
Docs · API reference · MCP setup · Benchmarks · Pricing · Changelog · Discord · X
It is the sole responsibility of end users to respect websites' policies when
scraping. By default, fastCRW respects robots.txt directives.
com.mcparmory/google-search
io.github.pipeworx-io/brave-search
marcopesani/mcp-server-serper
brave/brave-search-mcp-server
com.mcparmory/google-search-console
acamolese/google-search-console-mcp