by us
Fast, lightweight Firecrawl alternative in Rust. Web scraper, crawler & search API with MCP server for AI agents. Drop-in Firecrawl-compatible API (/v1/scrape, /v1/crawl, /v1/search). 2.3x faster than Tavily, 1.5x faster than Firecrawl in 1K-URL benchmarks. 6 MB RAM, single binary. Self-host or use managed cloud.
# Add to your Claude Code skills
git clone https://github.com/us/crwPower AI agents with clean web data. Single Rust binary, zero config, Firecrawl-compatible API. The open-source Firecrawl alternative you can self-host for free — or use our managed cloud.
Don't want to self-host? Sign up free → — managed cloud with global proxy network, web search, and dashboard. Same API, zero infra.
No comments yet. Be the first to share your thoughts!
/v1/scrape, /v1/crawl, /v1/map endpoints. HTML to markdown, structured data extraction, website crawler — all built-in| Metric | CRW (self-hosted) | fastcrw.com (cloud) | Firecrawl | Tavily | Crawl4AI | |---|---|---|---|---|---| | Coverage (1K URLs) | 92.0% | 92.0% | 77.2% | — | — | | Avg Scrape Latency | 833ms | 833ms | 4,600ms | — | — | | Avg Search Latency | 880ms | 880ms | 954ms | 2,000ms | — | | Search Win Rate | 73/100 | 73/100 | 25/100 | 2/100 | — | | Idle RAM | 6.6 MB | 0 (managed) | ~500 MB+ | — (cloud) | — | | Cold start | 85 ms | 0 (always-on) | 30–60 s | — | — | | Self-hosting | Single binary | — | Multi-container | No | Python + Playwright | | Cost / 1K scrapes | $0 (self-hosted) | From $13/mo | $0.83–5.33 | — | $0 | | License | AGPL-3.0 | Managed | AGPL-3.0 | Proprietary | Apache-2.0 |
Core
| Feature | Description | |---------|-------------| | Scrape | Convert any URL to markdown, HTML, JSON, or links | | Crawl | Async BFS website crawler with rate limiting | | Map | Discover all URLs on a site instantly | | Search | Web search + content scraping — bundled SearXNG sidecar, free Tavily alternative |
More
| Feature | Description |
|---------|-------------|
| LLM Extraction | Send a JSON schema, get validated structured data back |
| LLM Summary | formats: ["summary"] on /v1/scrape — clean prose digest of any page. BYOK (Anthropic / OpenAI / Azure / DeepSeek / any OpenAI-compatible). |
| LLM Search Answer | answer: true / summarizeResults: true on /v1/search — synthesized answer with citations or per-result summaries |
| JS Rendering | Auto-detect SPAs, render via LightPanda or Chrome |
| CLI | Scrape any URL from your terminal — no server needed |
| MCP Server | Built-in stdio + HTTP transport for any AI agent |
Use Cases: RAG pipelines · AI agent web access · content monitoring · data extraction · HTML to markdown conversion · web archiving
# Install:
curl -fsSL https://raw.githubusercontent.com/us/crw/main/install.sh | CRW_BINARY=crw sh
# Interactive setup wizard (recommended):
crw setup
# Scrape:
crw example.com
# Add to Claude Code (local):
claude mcp add crw -- npx crw-mcp
# Add to Claude Code (cloud — includes web search, 500 free credits at fastcrw.com):
claude mcp add -e CRW_API_URL=https://fastcrw.com/api -e CRW_API_KEY=your-key crw -- npx crw-mcp
Or:
pip install crw(Python SDK) ·npx crw-mcp(zero install) ·brew install us/crw/crw(Homebrew) · All install options →
Convert any URL to clean markdown, HTML, or structured JSON.
from crw import CrwClient
client = CrwClient(api_url="https://fastcrw.com/api", api_key="YOUR_API_KEY") # local: CrwClient()
result = client.scrape("https://example.com")
print(result["markdown"])
Local mode:
CrwClient()with no arguments runs a self-contained scraping engine — no server, no API key, no setup. The SDK automatically downloads thecrw-mcpbinary on first use.
CLI:
crw example.com
crw example.com --format html
crw example.com --js --css 'article'
Self-hosted (crw-server running on :3000):
curl -X POST http://localhost:3000/v1/scrape \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com"}'
Cloud:
curl -X POST https://fastcrw.com/api/v1/scrape \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com"}'
With LLM summary (BYOK — bring your own provider key):
curl -X POST http://localhost:3000/v1/scrape \
-H "Content-Type: application/json" \
-d '{
"url": "https://en.wikipedia.org/wiki/Tokio_(software)",
"formats": ["markdown", "summary"],
"summaryPrompt": "Answer in two sentences.",
"maxContentChars": 50000,
"llmProvider": "openai-compatible",
"llmModel": "deepseek-chat",
"baseUrl": "https://api.deepseek.com/v1",
"llmApiKey": "YOUR_PROVIDER_KEY"
}'
Output:
# Example Domain
This domain is for use in illustrative examples in documents.
You may use this domain in literature without prior coordination.
CRW picks between three rendering backends per request:
http (1 credit) — plain HTTP fetch. Used for static pages.lightpanda (1 credit) — lightweight JS renderer for most SPAs.chrome (2 credits) — full Chromium for sites where LightPanda's hydration crashes (e.g. some Next.js App Router pages).By default the engine auto-select