Every RAG pipeline and web-grounded agent hits the same wall: the raw web is a mess of JavaScript, cookie banners, proxies, and rate limits. I have burned entire weekends on Puppeteer scripts that broke the day a site changed its markup.
Firecrawl is the open-source API that removes that wall: one call turns any URL into clean, LLM-ready markdown. Here is what it is, how it works under the hood, and how to run it in five minutes.
1. What Firecrawl Is: Stars, License, and the Honest Pitch
Firecrawl (github.com/firecrawl/firecrawl) calls itself the context API to search, scrape, and interact with the web at scale. As of early September 2026 it sits at roughly 176k stars and 9.6k forks, which makes it one of the most-starred developer-tools repos on GitHub β the community signal is hard to argue with.
License: read this before self-hosting
The core platform is open source under AGPL-3.0, while the SDKs are MIT licensed. That means you can self-host it (there is a docker-compose.yaml and a SELF_HOST guide in the repo), but if you modify the server code and offer it as a service you must share your changes. The hosted cloud at firecrawl.dev adds managed proxies, higher limits, and extra features on top of the same engine.
Why it matters for LLM developers: Firecrawl returns clean markdown, structured JSON, screenshots, and HTML instead of raw soup. It handles rotating proxies, JS rendering, rate limits, and bot-blocked pages for you, and it claims 96% web coverage with a 3.4s P95 scrape latency. You spend tokens on content, not on boilerplate navigation markup.
2. The Architecture in 4 Steps
You do not need to read the whole monorepo to use Firecrawl well. Mentally it is a pipeline with four stages, each exposed as an API endpoint:
Step 1 β Search & Map: discover URLs
The /search endpoint finds pages across the web and returns full content, while /map lists every URL on one site instantly. This is your reconnaissance phase: go from a question to a candidate URL list without writing a crawler.
Step 2 β Scrape: URL to LLM-ready data
The /scrape endpoint renders the page (JavaScript included), strips the chrome, and returns markdown, HTML, screenshots, or structured JSON. Optional actions click, scroll, type, and wait before extraction.
Step 3 β Crawl & Batch: scale to whole sites
The /crawl endpoint takes one seed URL plus a page limit and scrapes the entire site as an async job you poll. Batch scrape does the same for an explicit URL list β thousands of pages, retries and orchestration included.
Step 4 β Agent & Interact: let the AI drive
The /agent endpoint takes a plain-language prompt (optionally a JSON schema and an effort level) and searches, navigates, and retrieves the answer itself. Interact replays AI prompts or code against an already-scraped page.
How I remember it
Search finds it, Scrape cleans it, Crawl scales it, Agent drives it. If your task fits in one of those four verbs, Firecrawl probably already has the endpoint.
3. Quickstart: Running It in 5 Minutes (Verified)
Everything below is taken from the official README and docs at docs.firecrawl.dev, verified in September 2026. You need Node.js 22+ and a free API key from firecrawl.dev (scrape, search, and interact also work keyless with IP rate limits).
Install the SDK (current package name):
npm install firecrawl
Note on the old package name
Older tutorials use npm install @mendable/firecrawl-js. That package still exists as an alias, but the README and current docs use npm install firecrawl with import { Firecrawl } from 'firecrawl'. Use the new name for new projects.
Set your key (or pass it as apiKey):
export FIRECRAWL_API_KEY=fc-YOUR-API-KEY
Scrape one page to markdown:
import { Firecrawl } from 'firecrawl';
const app = new Firecrawl({ apiKey: 'fc-YOUR-API-KEY' });
const doc = await app.scrape('https://firecrawl.dev', {
formats: ['markdown', 'html'],
});
console.log(doc.markdown);Crawl a whole docs site (SDK polls automatically):
const docs = await app.crawl('https://docs.firecrawl.dev', {
limit: 50,
});
docs.data.forEach((doc) => {
console.log(doc.metadata.sourceURL, doc.markdown.substring(0, 100));
});Search the web and get page content back:
const results = await app.search('best AI data tools 2024', {
limit: 10,
});
results.data.web.forEach((r) => console.log(`${r.title}: ${r.url}`));No SDK? Plain cURL works too:
curl -X POST 'https://api.firecrawl.dev/v2/scrape' \
-H 'Authorization: Bearer fc-YOUR-API-KEY' \
-H 'Content-Type: application/json' \
-d '{ "url": "firecrawl.dev" }'Prefer self-hosting? Clone the repo:
git clone https://github.com/firecrawl/firecrawl.git cd firecrawl docker compose up -d # see SELF_HOST.md for full config
π‘ Tip from the docs
Start with scrape on 3β5 representative URLs before launching a 100-page crawl. Tune formats (markdown vs JSON schema) on the small sample β every credit you save there multiplies across the whole job.
4. Real Use Cases That Justify the Hype
Firecrawl shines anywhere an LLM needs fresh web context without you maintaining scraper infrastructure:
Where I would reach for it first
- β’ RAG ingestion: crawl docs sites nightly and feed clean markdown into your chunking pipeline instead of hand-rolled spiders.
- β’ Competitor and pricing monitors: scheduled scrapes plus structured JSON schemas give you diffable datasets, not screenshots.
- β’ Web-grounded agents: the Agent endpoint plus MCP server wiring (npx firecrawl-mcp) plugs live web data into Claude Code, OpenCode, and other agent clients.
- β’ Dataset building for fine-tuning: batch scrape thousands of URLs into uniform markdown β consistent input format, fewer tokens wasted.
- β’ Media and docs parsing: hosted PDFs and DOCX files come back as extractable content without a separate parser service.
- β’ JS-heavy sites: pages that defeat BeautifulSoup and plain fetch (SPAs, infinite scroll, click-to-reveal) are Firecrawl's home turf.
Rule of thumb
If the value is in the content and the fetching is undifferentiated plumbing, outsource the plumbing to Firecrawl and spend your engineering hours on retrieval quality and evaluation instead.
5. When NOT to Use Firecrawl
No tool fits everything, and an honest guide says where the edges are:
β Use Firecrawl when
- β’ You need markdown or structured JSON from JS-rendered public pages
- β’ You are feeding RAG or agents and want to stop maintaining proxies
- β’ You crawl whole documentation or content sites regularly
- β’ You want search + content in one call for grounding
- β’ Cloud convenience or AGPL self-hosting both fit your model
β Skip it when
- β’ You scrape static HTML at massive scale β raw fetch + parser is cheaper
- β’ You need real-time sub-second latency on every request
- β’ The target forbids scraping (robots.txt, ToS): Firecrawl respects robots.txt by default
- β’ You need authenticated sessions with complex login flows or captchas
- β’ AGPL obligations conflict with your closed-source distribution plans
- β’ Your pages are already clean internal APIs or feeds β just use those
The most common mistake
Crawling 10,000 pages before validating extraction quality on 10. Always prototype with scrape, lock your schema, then scale with crawl or batch β cloud credits and self-host compute both punish the reverse order.
Conclusion
Firecrawl earned its 176k stars by solving the least glamorous part of the LLM stack: getting clean text out of a hostile web. Search, scrape, crawl, agent β four verbs that cover most of what AI apps need from the browser.
My verdict: prototype with the free cloud tier this week using the scrape snippet above. If the markdown quality wins you over, decide between cloud convenience and AGPL self-hosting based on your scale. Either way, stop babysitting Puppeteer scripts.
Cheat Sheet
Endpoints
- β’ /search β find + content
- β’ /scrape β URL β markdown
- β’ /crawl + /map + batch
Quickstart
- β’ npm install firecrawl
- β’ Node 22+, free API key
- β’ Keyless tier for trials
Remember
- β’ AGPL core, MIT SDKs
- β’ Prototype small, then scale
- β’ Respect robots.txt + ToS



