Firecrawl: Free Web Scraping API for LLMs & Agents

Quick answer: Firecrawl is a web-scraping API built for LLMs and AI agents: hand it a URL, get back clean Markdown or structured JSON with JavaScript rendered and boilerplate stripped. The free tier is 1,000 credits/month (~1,000 page reads), no credit card, with all five endpoints unlocked. The open-source core is AGPL-3.0 and free to self-host, with two caveats worth knowing before you plan around it — see below.

Every AI agent hits the same wall: the model reasons brilliantly, but the open web is HTML soup — nav bars, cookie banners, lazy-loaded JS, ads, anti-bot walls. Feed raw HTML into a context window and you burn tokens on markup. Firecrawl collapses that into one HTTP call: URL in, LLM-ready data out. It's the "read" half of an agent toolkit that pairs with a search API — search finds URLs, Firecrawl reads them.

The Five Endpoints

Firecrawl isn't one endpoint — it's five, each solving a different shape of the web-data problem:

  • Scrape — one URL into clean Markdown / HTML / JSON
  • Crawl — recursively follow links and scrape an entire site
  • Map — instantly return every URL on a site (sitemap on demand)
  • Search — run a web query and get full page content per result in one call
  • Extract — pull structured data from one or many URLs via prompt or schema

That breadth is why Firecrawl is the default "fetch a page" tool in 2026 agent stacks, from CrewAI and LangGraph to the MCP servers wired into Cursor and Claude.

Free Tier: What You Get

  • 1,000 credits/month, reset each cycle (no rollover)
  • No credit card — sign up with email or GitHub, fc- key is live immediately
  • All five endpoints unlocked
  • 2 concurrent requests and conservative rate limits (the main ceiling)

The number that governs how far 1,000 credits stretches is the credit-to-page mapping:

OperationCredit costWhat 1,000 credits buys
Scrape / Crawl / Map1 credit per page~1,000 pages scraped
Search2 credits per 10 results~5,000 results returned
Interact (browser actions)2 credits per browser-minute~500 minutes
Structured JSON extract1 credit per page~1,000 extractions

Credit costs and the 1,000/month free allowance are from Firecrawl's pricing page, checked 2 September 2026. Credits reset monthly and do not roll over; if you run out, auto-reload buys 1,000 more for $5, but only if you turn it on.

So 1,000 credits is effectively 1,000 free page reads per month. Comfortable for a personal research agent scraping 30 pages a day; you'll blow through it in one job on a 5,000-page docs crawl. Know which side of that line you're on.

Paid Tiers

Paid plans scale credits and concurrency together. Prices are the annual-billing rate from the official pricing page (monthly runs higher):

PlanPrice (yearly)Credits/moConcurrent
Free$01,0002
Hobby$16/mo5,0005
Standard$83/mo100,00050
Growth$333/mo500,000100
Scale$599/mo1,000,000150

The jump from Hobby (5,000) to Standard (100,000) is steep — no middle tier — so the usual path is "free for prototyping, Hobby for a small live project, then a leap to Standard." If volume is large and steady, self-host and pay nothing (below).

First Scrape in 60 Seconds

Sign up at firecrawl.dev, copy your fc- key, then export it: export FIRECRAWL_API_KEY="fc-YOUR_KEY". The v2 API base is https://api.firecrawl.dev/v2/ with a bearer token:

curl -X POST https://api.firecrawl.dev/v2/scrape 
  -H "Authorization: Bearer $FIRECRAWL_API_KEY" 
  -H "Content-Type: application/json" 
  -d '{"url": "https://news.ycombinator.com", "formats": ["markdown"]}'

The response carries data.markdown (cleaned page) and data.metadata (title, description, status). The Python SDK:

pip install firecrawl-py
from firecrawl import Firecrawl

firecrawl = Firecrawl(api_key="fc-YOUR_KEY")
result = firecrawl.scrape(
    "https://news.ycombinator.com",
    formats=["markdown", "html"],
)
print(result.markdown[:500])
print(result.metadata.title)

Field names come back snake_case, and an AsyncFirecrawl class ships with identical methods for non-blocking pipelines. A Node.js SDK (npm install firecrawl) exposes the same firecrawl.scrape(url, { formats: [...] }) call. No proxy config, no headless-browser setup — one call returns model-ready text.

The Endpoints, With Code

Scrape: One URL → Clean Data

Beyond Markdown, request multiple formats in one call — markdown, html, rawHtml, links, screenshot, json. Each is computed from the same page load, so adding links costs no extra credit.

result = firecrawl.scrape(
    "https://example.com/pricing",
    formats=["markdown", "links"],
    only_main_content=True,   # drop nav, footer, sidebars
)
print(result.links)

Crawl: Follow Links Across a Site

Crawl discovers linked pages and scrapes each — ideal for ingesting a docs site into RAG. It's async: start a job and poll (or let the SDK wait).

job = firecrawl.crawl(
    url="https://docs.firecrawl.dev",
    limit=50,                 # cap pages so you don't drain credits
    scrape_options={"formats": ["markdown"]},
)
for page in job.data:
    print(page.metadata.source_url, len(page.markdown))

Watch the credits: limit=50 costs up to 50 credits — 5% of your monthly budget in one call. Always set limit on the free tier.

Map: Instant Sitemap

Map returns every URL Firecrawl can find, fast, without scraping content — the cheapest way to understand a site before crawling.

res = firecrawl.map(url="https://firecrawl.dev", limit=100)
print(res.links)
# Then crawl only the subset you care about

The efficient pattern: map a site, filter URLs to the section you want (e.g. /blog/), then scrape that list — far cheaper than a blind recursive crawl.

Search: Web Search + Full Content in One Call

Unlike a pure search API that returns snippets, Search can return the full scraped content of each result in the same response.

results = firecrawl.search(
    "best open source vector databases 2026",
    limit=5,
    scrape_options={"formats": ["markdown"]},
)
for r in results.web:
    print(r.title, r.url)
    print(r.markdown[:300])

Ranked URLs and cleaned body text in one round-trip — no second fetch hop. Costs 2 credits per 10 results, plus 1 credit per page if you request content.

Extract: Structured JSON From Any Page

This is where Firecrawl pulls ahead of a plain scraper: run an LLM extraction pass and get JSON matching a schema — or just a prompt.

from pydantic import BaseModel

class Product(BaseModel):
    name: str
    price: float
    in_stock: bool

result = firecrawl.scrape(
    "https://example.com/product/123",
    formats=[{"type": "json", "schema": Product.model_json_schema()}],
)
print(result.json)   # {"name": "...", "price": 29.99, "in_stock": true}

Or skip the schema and describe what you want with {"type": "json", "prompt": "Extract the top 5 story titles and points."}. For an agent, this collapses scrape + parse + validate into one typed result.

Firecrawl vs the Free Alternatives

ToolFree pathJS renderStructured extractSelf-hostBest for
Firecrawl1,000 credits/mo, no cardYesYes (schema/prompt)Yes (AGPL-3.0)Managed scrape + crawl for agents
Crawl4AIFully free (OSS)Yes (Playwright)Yes (LLM strategy)Yes (Apache 2.0)Self-hosted, zero-cost, full control
Jina ReaderFree, generous limitYesLimitedNo (hosted)Dead-simple single-URL reads
ScrapingBee1,000 credit trialYesVia AI queryNoTraditional scraping at scale

Crawl4AI is the no-cost king if you'll run Playwright yourself. Jina Reader (prefix any URL with r.jina.ai/) is the fastest single-page read but does no recursive crawl or schema extract. Firecrawl sits in the sweet spot: a managed API handling anti-bot and rendering, with crawl, map, search, and extraction in one place — plus the escape hatch of self-hosting when volume demands it.

Self-Hosting: Unlimited and Free

Firecrawl's core is open source under AGPL-3.0 (SDKs are MIT), with a self-host guide on GitHub. Run the Docker Compose stack and you have your own instance with no per-page cost — just the server bill. Two honest caveats: AGPL is strong copyleft (modify it and offer it as a network service, and you must release your changes under the same license — a non-issue for internal use); and self-hosting means you own the proxy rotation, browser-pool scaling, and anti-bot upkeep the managed API handled. Self-host when volume makes the math obvious and you have ops capacity.

Firecrawl in an Agent Stack

The cleanest way to give an assistant scraping powers is the official firecrawl-mcp-server. Add it to Cursor, Claude Desktop, Cline, or any MCP client:

{
  "mcpServers": {
    "firecrawl": {
      "command": "npx",
      "args": ["-y", "firecrawl-mcp"],
      "env": { "FIRECRAWL_API_KEY": "fc-YOUR_KEY" }
    }
  }
}

For RAG, the common pattern is "crawl a site → chunk → embed → store in a vector DB." Firecrawl handles the crawl; pair it with a free Cohere embedding API and a free vector database like Qdrant or Chroma for a complete free-tier ingestion stack.

Free-Tier Gotchas

  • Unbounded crawls drain credits instantly. A crawl with no limit can burn all 1,000 credits in one job. Always set limit; prefer map + filtered scrape.
  • 2 concurrent requests means no parallel fan-out. Fire 10 scrapes with asyncio.gather() and eight queue or error. Throttle to 2-at-a-time or upgrade (Hobby 5, Standard 50).
  • Credits don't roll over. Unused credits reset each cycle; no banking a slow month.
  • Extraction quality depends on the page. The json format runs an LLM, so cluttered pages miss fields. Use a tight schema, keep only_main_content=True, and validate (Pydantic does this free).

Pair Firecrawl with a free LLM — Groq, Gemini (1M-token context for long pages), or Together AI — and the whole hobby-scale stack costs $0.

Frequently Asked Questions

Is Firecrawl really free?

Yes, with a distinction worth drawing. The hosted free tier gives 1,000 credits (~1,000 page scrapes) per month with no credit card. The core is open source under AGPL-3.0 (the SDKs and some UI components are MIT), so self-hosting costs no licence fee and has no page cap — but it is not simply the paid product without the bill. Firecrawl states the cloud service carries features the open-source version does not, and AGPL-3.0 obliges anyone who offers a modified version as a network service to publish those modifications. If your plan is to wrap Firecrawl inside your own SaaS, read the licence before you build; if you are scraping for yourself, neither point affects you.

What is 1 Firecrawl credit?

One credit equals one scraped page for scrape, crawl, and map. Search costs 2 credits per 10 results; browser interactions cost 2 credits per browser-minute. So the 1,000-credit free tier is effectively 1,000 page reads per month.

Does Firecrawl return structured data or just text?

Both. By default you get Markdown or HTML. Add the json format with a schema or natural-language prompt and Firecrawl runs an LLM extraction pass, returning typed JSON — names, prices, dates, whatever you define.

Firecrawl vs Crawl4AI — which should I use?

Use Firecrawl's hosted API when you want scraping managed (anti-bot, browser pools, retries) and the free or Hobby tier covers your volume. Use Crawl4AI when you want zero per-page cost at any scale and are willing to run Playwright yourself. Firecrawl can also be self-hosted if you want its feature set without per-credit billing.

Bottom Line

Firecrawl turns messy live web pages into clean, structured data a model can use. The free tier — 1,000 page reads a month, no card, every endpoint unlocked — is enough to build a real research agent, RAG pipeline, or monitoring tool at zero cost.

  • Prototyping or personal agent? Free tier — 1,000 pages goes a long way with crawl limits set.
  • Small live project? The $16/mo Hobby plan (5,000 pages, 5 concurrent).
  • High, steady volume? Self-host the AGPL-3.0 core for unmetered scraping — no page cap and no licence fee, provided you are not offering a modified version as a service to others — or jump to Standard.

Related Reads