/ Directory / Playground / Firecrawl
● Official firecrawl 🔑 Needs your key

Firecrawl

by firecrawl · firecrawl/firecrawl-mcp-server

Turn any web page into clean, structured data your AI agent can actually use — handles JS-rendered sites and gives you JSON via schema.

Firecrawl is a hosted scraping service tuned for LLM consumption. Where the basic fetch MCP gives you raw HTML, Firecrawl renders JS-heavy pages, strips boilerplate, returns clean Markdown, and supports structured extraction via JSON schema.

Why use it

Key features

Live Demo

What it looks like in practice

firecrawl.replay ▶ ready
0/0

Install

Pick your client

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "firecrawl": {
      "command": "npx",
      "args": [
        "-y",
        "firecrawl-mcp"
      ]
    }
  }
}

Open Claude Desktop → Settings → Developer → Edit Config. Restart after saving.

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "firecrawl": {
      "command": "npx",
      "args": [
        "-y",
        "firecrawl-mcp"
      ]
    }
  }
}

Cursor uses the same mcpServers schema as Claude Desktop. Project config wins over global.

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "firecrawl": {
      "command": "npx",
      "args": [
        "-y",
        "firecrawl-mcp"
      ]
    }
  }
}

Click the MCP Servers icon in the Cline sidebar, then "Edit Configuration".

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "firecrawl": {
      "command": "npx",
      "args": [
        "-y",
        "firecrawl-mcp"
      ]
    }
  }
}

Same shape as Claude Desktop. Restart Windsurf to pick up changes.

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "firecrawl",
      "command": "npx",
      "args": [
        "-y",
        "firecrawl-mcp"
      ]
    }
  ]
}

Continue uses an array of server objects rather than a map.

~/.config/zed/settings.json
{
  "context_servers": {
    "firecrawl": {
      "command": {
        "path": "npx",
        "args": [
          "-y",
          "firecrawl-mcp"
        ]
      }
    }
  }
}

Add to context_servers. Zed hot-reloads on save.

claude mcp add firecrawl -- npx -y firecrawl-mcp

One-liner. Verify with claude mcp list. Remove with claude mcp remove.

Use Cases

Real-world ways to use Firecrawl

Build a live competitor pricing comparison table

👤 PMs, founders doing market research ⏱ ~20 min intermediate

When to use: You're refreshing your pricing strategy and need to see what 5 competitors charge for comparable plans, with sources.

Prerequisites
  • Firecrawl API key — firecrawl.dev — free tier gives 500 credits, enough for ~50 pages
Flow
  1. Define a schema for what 'pricing' means
    I want to compare pricing for [your category]. Define a schema that captures: plan name, monthly price, included usage, key features, and any per-unit overage costs.✓ Copied
    → Schema with these fields as strict types
  2. Run extraction across 5 competitor URLs in parallel
    Extract pricing from these 5 URLs using the schema: [list URLs]. Use the structured extraction endpoint.✓ Copied
    → 5 normalized JSON blobs you can compare
  3. Render as a comparison table with citations
    Render this as a Markdown table with each competitor as a column. Add a citation footnote pointing to each source URL.✓ Copied
    → Comparison ready to drop into a doc or deck

Outcome: A normalized pricing table you can re-run anytime to detect changes — costs ~5 Firecrawl credits per refresh.

Pitfalls
  • Pricing pages often have toggles (monthly/annual, usage tiers) that scraping doesn't reveal — Run with actions: [{type: 'click', selector: '...toggle...'}] to capture both states, or note the limitation in your final output
  • Some sites block scrapers via Cloudflare — Firecrawl handles most. If still blocked, the page is likely using anti-bot measures intentionally — respect that and cite manually
Combine with: notion · google-sheets

Monitor a competitor's docs site for new features

👤 Product marketers, competitive intelligence ⏱ ~15 min intermediate

When to use: You want to know within 24 hours when a competitor ships something new. Their changelog/blog is where they announce.

Prerequisites
  • URL of their changelog or blog index page — Usually /changelog, /blog, /releases, or /whats-new
Flow
  1. Crawl the changelog index
    Crawl <URL> with depth=1, return all post URLs and their dates. Limit to 50 most recent.✓ Copied
    → List of recent posts with dates
  2. Extract each post into a normalized format
    For posts published in the last 30 days, extract title, date, summary, and any feature-name mentions, into JSON.✓ Copied
    → Structured changelog you can diff against last week's run
  3. Highlight what's new vs last week
    Compare to the previous run [paste prior JSON]. What's new this week and what's the strategic implication?✓ Copied
    → Diff with strategic commentary

Outcome: A weekly competitor digest you can run as a scheduled job — never miss a feature drop.

Pitfalls
  • RSS feeds usually exist and are cheaper than scraping — Try <url>/feed.xml or <url>/rss first — only fall back to scraping if no feed
Combine with: notion

Enrich a list of company URLs with structured firmographic data

👤 Sales, marketing ops ⏱ ~30 min intermediate

When to use: You have a CSV of 200 company websites and need their employee count, industry, and tech stack to prioritize outreach.

Prerequisites
  • Source list of URLs — CSV or text file of homepage URLs
Flow
  1. Define enrichment schema
    Define a schema for: company_name, industry, employee_count_estimate, headquarters_location, primary_product_description (1 line), tech_stack_signals (list).✓ Copied
    → Strict JSON schema
  2. Extract from each URL with rate limiting
    For each URL in [list], run Firecrawl extract with the schema. Process in batches of 10 with 2-second pauses to stay polite.✓ Copied
    → Per-URL JSON, errors logged separately
  3. Output a clean CSV
    Convert results to CSV with the original URLs as the join key. Flag rows where extraction failed so I can retry manually.✓ Copied
    → CSV ready to import into your CRM

Outcome: A 200-row enriched lead list in ~10 minutes for ~$2 in Firecrawl credits.

Pitfalls
  • Some companies just have a one-page splash with no info — Have Claude flag those for manual review rather than hallucinating
  • Cost adds up at scale — 10k URLs = real money — Sample first to validate schema quality before running on full list
Combine with: filesystem

Combinations

Pair with other MCPs for X10 leverage

firecrawl + notion

Scrape, summarize, post directly to a Notion knowledge base

Scrape every post from anthropic.com/news in the last 30 days, summarize each in 2 sentences, and create a Notion page in 'AI News' database for each.✓ Copied
firecrawl + postgres

Scrape competitor data weekly and store in your DB for time-series analysis

Run my competitor-pricing extraction, then INSERT each row into the competitor_pricing table with today's date.✓ Copied
firecrawl + filesystem

Scrape docs sites and save as Markdown for offline RAG indexing

Crawl docs.stripe.com, save each page as a .md file under /knowledge/stripe/.✓ Copied

Tools

What this MCP exposes

ToolInputsWhen to callCost
firecrawl_scrape url: str, formats?: ['markdown'|'html'|'links'|'screenshot'] You need a single page's content as Markdown for the model 1 credit per page
firecrawl_crawl url, limit, includePaths?, excludePaths?, maxDepth? You need to scrape a whole section of a site 1 credit per page crawled
firecrawl_extract urls: str[], schema: JSONSchema, prompt? You want structured JSON, not raw text 5 credits per page (LLM-backed)
firecrawl_map url, search? Discover all URLs on a site without fetching content 1 credit

Cost & Limits

What this costs to run

API quota
Free tier: 500 credits, 10 concurrent. Hobby: $19/mo for 3000 credits.
Tokens per call
~2000 tokens average per scraped page (Markdown body)
Monetary
1 credit per scrape, 5 credits per structured extract, 1 per map. Credits don't roll over.
Tip
Use firecrawl_map first to plan, then only firecrawl_scrape the URLs you actually need. Cache aggressively — most pages don't change daily.

Security

Permissions, secrets, blast radius

Credential storage: API key in env var FIRECRAWL_API_KEY
Data egress: All requests go via Firecrawl's servers (US/EU regions). They proxy out to target sites.

Troubleshooting

Common errors and fixes

402 Payment Required

Out of credits. Top up at firecrawl.dev/dashboard or wait for monthly reset.

Empty markdown returned

Page may be JS-only; ensure formats: ['markdown'] is set and mobile: false. Try with actions: [{type:'wait', milliseconds: 3000}] to allow JS execution.

Crawl returns fewer pages than expected

Check excludePaths isn't too aggressive. Also: many sites have a robots.txt blocking crawlers. Firecrawl honors it by default.

429 Too Many Requests (target site)

Reduce concurrency in your crawl options. Some sites enforce request budgets per IP.

Alternatives

Firecrawl vs others

AlternativeWhen to use it insteadTradeoff
fetch MCPStatic HTML pages, no JS rendering needed, no schema extractionFree and fast but breaks on SPAs and gives you raw HTML to parse
Playwright MCPYou need to interact with the page (login, click through flows)More code, better for complex interactions; not optimized for bulk extraction
Brightdata MCPYou need residential proxies for sites that block datacenter IPsHeavyweight and expensive — only worth it for tough targets
Apify MCPYou need pre-built scrapers for specific sites (Amazon, LinkedIn structured data)Better for niche targets with prebuilt actors; more setup

More

Resources

📖 Read the official README on GitHub

🐙 Browse open issues

🔍 Browse all 400+ MCP servers and Skills