Command-line interface for Firecrawl. Scrape, crawl, and extract data from any website directly from your terminal.
npm install -g firecrawl-cliOr set up everything in one command (install CLI globally, authenticate, and add skills):
npx -y firecrawl-cli@latest init --all --browser--allinstalls the firecrawl skill to every detected AI coding agent--browseropens the browser for Firecrawl authentication automatically
If you are using an AI coding agent like Claude Code, you can also install the skill individually with:
firecrawl setup skillsTo install the Firecrawl MCP server into your editors (Cursor, Claude Code, VS Code, etc.):
firecrawl setup mcpOr directly via npx:
npx skills add firecrawl/cli
npx add-mcp "npx -y firecrawl-mcp" --name firecrawlJust run a command - the CLI will prompt you to authenticate if needed:
firecrawl https://example.comOn first run, you'll be prompted to authenticate:
🔥 firecrawl cli
Turn websites into LLM-ready data
Welcome! To get started, authenticate with your Firecrawl account.
1. Login with browser (recommended)
2. Enter API key manually
Tip: You can also set FIRECRAWL_API_KEY environment variable
Enter choice [1/2]:
# Interactive (prompts automatically when needed)
firecrawl
# Browser login
firecrawl login
# Direct API key
firecrawl login --api-key fc-your-api-key
# Environment variable
export FIRECRAWL_API_KEY=fc-your-api-key
# Per-command API key
firecrawl scrape https://example.com --api-key fc-your-api-keyFor self-hosted Firecrawl instances or local development, use the --api-url option:
# Use a local Firecrawl instance (no API key required)
firecrawl --api-url http://localhost:3002 scrape https://example.com
# Or set via environment variable
export FIRECRAWL_API_URL=http://localhost:3002
firecrawl scrape https://example.com
# Self-hosted with API key
firecrawl --api-url https://firecrawl.mycompany.com --api-key fc-xxx scrape https://example.comWhen using a custom API URL (anything other than https://api.firecrawl.dev), authentication is automatically skipped, allowing you to use local instances without an API key.
Extract content from any webpage. Pass multiple URLs to scrape them concurrently -- each result is saved to .firecrawl/ automatically.
# Basic usage (outputs markdown)
firecrawl https://example.com
firecrawl scrape https://example.com
# Get raw HTML
firecrawl https://example.com --html
firecrawl https://example.com -H
# Multiple formats (outputs JSON)
firecrawl https://example.com --format markdown,links,images
# Save to file
firecrawl https://example.com -o output.md
firecrawl https://example.com --format json -o data.json --pretty
# Multiple URLs (scraped concurrently, each saved to .firecrawl/)
firecrawl scrape https://firecrawl.dev https://firecrawl.dev/blog https://docs.firecrawl.dev| Option | Description |
|---|---|
-f, --format <formats> |
Output format(s), comma-separated |
-H, --html |
Shortcut for --format html |
-S, --summary |
Shortcut for --format summary |
--only-main-content |
Extract only main content (removes navs, footers, etc.) |
--wait-for <ms> |
Wait time before scraping (for JS-rendered content) |
--screenshot |
Take a screenshot |
--full-page-screenshot |
Take a full page screenshot |
--include-tags <tags> |
Only include specific HTML tags |
--exclude-tags <tags> |
Exclude specific HTML tags |
--max-age <milliseconds> |
Maximum age of cached content in milliseconds |
-o, --output <path> |
Save output to file |
--json |
Output as JSON format |
--pretty |
Pretty print JSON output |
--timing |
Show request timing info |
| Format | Description |
|---|---|
markdown |
Clean markdown (default) |
html |
Cleaned HTML |
rawHtml |
Original HTML |
links |
All links on the page |
images |
All images on the page |
screenshot |
Screenshot as base64 |
summary |
AI-generated summary |
json |
Structured JSON extraction |
changeTracking |
Track changes on the page |
attributes |
Page attributes and metadata |
branding |
Brand identity extraction |
# Extract only main content as markdown
firecrawl https://blog.example.com --only-main-content
# Wait for JS to render, then scrape
firecrawl https://spa-app.com --wait-for 3000
# Get all links from a page
firecrawl https://example.com --format links
# Screenshot + markdown
firecrawl https://example.com --format markdown --screenshot
# Extract specific elements only
firecrawl https://example.com --include-tags article,main
# Exclude navigation and ads
firecrawl https://example.com --exclude-tags nav,aside,.adSearch the web and optionally scrape content from search results.
# Basic search
firecrawl search "firecrawl web scraping"
# Limit results
firecrawl search "AI news" --limit 10
# Search news sources
firecrawl search "tech startups" --sources news
# Search images
firecrawl search "landscape photography" --sources images
# Multiple sources
firecrawl search "machine learning" --sources web,news,images
# Filter by category (GitHub, research papers, PDFs)
firecrawl search "web scraping python" --categories github
firecrawl search "transformer architecture" --categories research
firecrawl search "machine learning" --categories github,research
# Time-based search
firecrawl search "AI announcements" --tbs qdr:d # Past day
firecrawl search "tech news" --tbs qdr:w # Past week
# Location-based search
firecrawl search "restaurants" --location "San Francisco,California,United States"
firecrawl search "local news" --country DE
# Search and scrape results
firecrawl search "firecrawl tutorials" --scrape
firecrawl search "API documentation" --scrape --scrape-formats markdown,links
# Output as pretty JSON
firecrawl search "web scraping"| Option | Description |
|---|---|
--limit <n> |
Maximum results (default: 5, max: 100) |
--sources <sources> |
Comma-separated: web, images, news (default: web) |
--categories <categories> |
Comma-separated: github, research, pdf |
--tbs <value> |
Time filter: qdr:h (hour), qdr:d (day), qdr:w (week), qdr:m (month), qdr:y (year) |
--location <location> |
Geo-targeting (e.g., "Germany", "San Francisco,California,United States") |
--country <code> |
ISO country code (default: US) |
--timeout <ms> |
Timeout in milliseconds (default: 60000) |
--ignore-invalid-urls |
Exclude URLs invalid for other Firecrawl endpoints |
--scrape |
Enable scraping of search results |
--scrape-formats <formats> |
Scrape formats when --scrape enabled (default: markdown) |
--only-main-content |
Include only main content when scraping (default: true) |
-o, --output <path> |
Save to file |
--json |
Output as compact JSON |
# Research a topic with recent results
firecrawl search "React Server Components" --tbs qdr:m --limit 10
# Find GitHub repositories
firecrawl search "web scraping library" --categories github --limit 20
# Search and get full content
firecrawl search "firecrawl documentation" --scrape --scrape-formats markdown --json -o results.json
# Find research papers
firecrawl search "large language models" --categories research --json
# Search with location targeting
firecrawl search "best coffee shops" --location "Berlin,Germany" --country DE
# Get news from the past week
firecrawl search "AI startups funding" --sources news --tbs qdr:w --limit 15Quickly discover all URLs on a website without scraping content.
# List all URLs (one per line)
firecrawl map https://example.com
# Output as JSON
firecrawl map https://example.com --json
# Search for specific URLs
firecrawl map https://example.com --search "blog"
# Limit results
firecrawl map https://example.com --limit 500| Option | Description |
|---|---|
--limit <n> |
Maximum URLs to discover |
--search <query> |
Filter URLs by search query |
--sitemap <mode> |
include, skip, or only |
--include-subdomains |
Include subdomains |
--ignore-query-parameters |
Dedupe URLs with different params |
--timeout <seconds> |
Request timeout |
--json |
Output as JSON |
-o, --output <path> |
Save to file |
# Find all product pages
firecrawl map https://shop.example.com --search "product"
# Get sitemap URLs only
firecrawl map https://example.com --sitemap only
# Save URL list to file
firecrawl map https://example.com -o urls.txt
# Include subdomains
firecrawl map https://example.com --include-subdomains --limit 1000Crawl multiple pages from a website.
# Start a crawl (returns job ID)
firecrawl crawl https://example.com
# Wait for crawl to complete
firecrawl crawl https://example.com --wait
# With progress indicator
firecrawl crawl https://example.com --wait --progress
# Check crawl status
firecrawl crawl <job-id>
# Limit pages
firecrawl crawl https://example.com --limit 100 --max-depth 3| Option | Description |
|---|---|
--wait |
Wait for crawl to complete |
--progress |
Show progress while waiting |
--limit <n> |
Maximum pages to crawl |
--max-depth <n> |
Maximum crawl depth |
--include-paths <paths> |
Only crawl matching paths |
--exclude-paths <paths> |
Skip matching paths |
--sitemap <mode> |
include, skip, or only |
--allow-subdomains |
Include subdomains |
--allow-external-links |
Follow external links |
--crawl-entire-domain |
Crawl entire domain |
--ignore-query-parameters |
Treat URLs with different params as same |
--delay <ms> |
Delay between requests |
--max-concurrency <n> |
Max concurrent requests |
--timeout <seconds> |
Timeout when waiting |
--poll-interval <seconds> |
Status check interval |
# Crawl blog section only
firecrawl crawl https://example.com --include-paths /blog,/posts
# Exclude admin pages
firecrawl crawl https://example.com --exclude-paths /admin,/login
# Crawl with rate limiting
firecrawl crawl https://example.com --delay 1000 --max-concurrency 2
# Deep crawl with high limit
firecrawl crawl https://example.com --limit 1000 --max-depth 10 --wait --progress
# Save results
firecrawl crawl https://example.com --wait -o crawl-results.json --pretty# Show credit usage
firecrawl credit-usage
# Output as JSON
firecrawl credit-usage --json --prettyRun an AI agent that autonomously browses and extracts structured data from the web based on natural language prompts.
Note: Agent tasks typically take 2 to 5 minutes to complete, and sometimes longer for complex extractions. Use sparingly and consider
--max-creditsto limit costs.
# Basic usage (returns job ID immediately)
firecrawl agent "Find the pricing plans for Firecrawl"
# Wait for completion
firecrawl agent "Extract all product names and prices from this store" --wait
# Focus on specific URLs
firecrawl agent "Get the main features listed" --urls https://example.com/features
# Use structured output with JSON schema
firecrawl agent "Extract company info" --schema '{"type":"object","properties":{"name":{"type":"string"},"employees":{"type":"number"}}}'
# Load schema from file
firecrawl agent "Extract product data" --schema-file ./product-schema.json --wait
# Check status of an existing job
firecrawl agent <job-id>
firecrawl agent <job-id> --wait| Option | Description |
|---|---|
--urls <urls> |
Comma-separated URLs to focus extraction on |
--model <model> |
spark-1-mini (default, cheaper) or spark-1-pro (accurate) |
--schema <json> |
JSON schema for structured output (inline JSON string) |
--schema-file <path> |
Path to JSON schema file for structured output |
--max-credits <number> |
Maximum credits to spend (job fails if exceeded) |
--status |
Check status of existing agent job |
--wait |
Wait for agent to complete before returning results |
--poll-interval <seconds> |
Polling interval in seconds when waiting (default: 5) |
--timeout <seconds> |
Timeout in seconds when waiting (default: no timeout) |
-o, --output <path> |
Save output to file |
--json |
Output as JSON format |
--pretty |
Pretty print JSON output |
# Research task with timeout
firecrawl agent "Find the top 5 competitors of Notion and their pricing" --wait --timeout 300
# Extract data with cost limit
firecrawl agent "Get all blog post titles and dates" --urls https://blog.example.com --max-credits 100 --wait
# Use higher accuracy model for complex extraction
firecrawl agent "Extract detailed technical specifications" --model spark-1-pro --wait --pretty
# Save structured results to file
firecrawl agent "Extract contact information" --schema-file ./contact-schema.json --wait -o contacts.json --pretty
# Check job status without waiting
firecrawl agent abc123-def456-... --json
# Poll a running job until completion
firecrawl agent abc123-def456-... --wait --poll-interval 10Launch and control cloud browser sessions. By default, commands are sent to agent-browser (pre-installed in every sandbox). Use --python or --node to run Playwright code directly instead.
# 1. Launch a session
firecrawl browser launch --stream
# 2. Execute agent-browser commands (default)
firecrawl browser execute "open https://example.com"
firecrawl browser execute "snapshot"
firecrawl browser execute "click @e5"
firecrawl browser execute "scrape"
# 3. Execute Playwright Python or JavaScript
firecrawl browser execute --python "await page.goto('https://example.com'); print(await page.title())"
firecrawl browser execute --node "await page.goto('https://example.com'); await page.title()"
# 4. List sessions
firecrawl browser list
# 5. Close
firecrawl browser close| Option | Description |
|---|---|
--ttl <seconds> |
Total session TTL in seconds (default: 300) |
--ttl-inactivity <seconds> |
Inactivity TTL in seconds |
--stream |
Enable live view streaming |
-o, --output <path> |
Save output to file |
--json |
Output as JSON format |
| Option | Description |
|---|---|
--python |
Execute as Playwright Python code |
--node |
Execute as Playwright JavaScript code |
--bash |
Execute bash commands in the sandbox (agent-browser pre-installed) |
--session <id> |
Target a specific session (auto-saved on launch) |
-o, --output <path> |
Save output to file |
--json |
Output as JSON format |
By default (no flag), commands are sent to agent-browser. --python, --node, and --bash are mutually exclusive.
# agent-browser commands (default mode)
firecrawl browser execute "open https://example.com"
firecrawl browser execute "snapshot"
firecrawl browser execute "click @e5"
firecrawl browser execute "fill @e3 'search query'"
firecrawl browser execute "scrape"
# Playwright Python
firecrawl browser execute --python "await page.goto('https://example.com'); print(await page.title())"
# Playwright JavaScript
firecrawl browser execute --node "await page.goto('https://example.com'); await page.title()"
# Bash (arbitrary commands in the sandbox)
firecrawl browser execute --bash "ls /tmp"
# Launch with extended TTL
firecrawl browser launch --ttl 900 --ttl-inactivity 120
# JSON output
firecrawl browser execute --json "snapshot"# Configure with custom API URL
firecrawl config --api-url https://firecrawl.mycompany.com
firecrawl config --api-url http://localhost:3002 --api-key fc-xxx# View current configuration and authentication status
firecrawl view-configShows authentication status and stored credentials location.
# Login
firecrawl login
firecrawl login --method browser
firecrawl login --method manual
firecrawl login --api-key fc-xxx
# Login to self-hosted instance
firecrawl login --api-url https://firecrawl.mycompany.com
firecrawl login --api-url http://localhost:3002 --api-key fc-xxx
# Logout
firecrawl logoutThese options work with any command:
| Option | Description |
|---|---|
--status |
Show version, auth, concurrency, and credits |
-k, --api-key <key> |
Use specific API key |
--api-url <url> |
Use custom API URL (for self-hosted/local development) |
-V, --version |
Show version |
-h, --help |
Show help |
firecrawl --status 🔥 firecrawl cli v1.4.0
● Authenticated via stored credentials
Concurrency: 0/100 jobs (parallel scrape limit)
Credits: 500,000 / 1,000,000 (50% left this cycle)
# Output to stdout (default)
firecrawl https://example.com
# Pipe to another command
firecrawl https://example.com | head -50
# Save to file
firecrawl https://example.com -o output.md
# JSON output
firecrawl https://example.com --format links --pretty- Single format: Outputs raw content (markdown text, HTML, etc.)
- Multiple formats: Outputs JSON with all requested data
# Raw markdown output
firecrawl https://example.com --format markdown
# JSON output with multiple formats
firecrawl https://example.com --format markdown,links,images# Just pass multiple URLs -- results are saved to .firecrawl/
firecrawl scrape https://firecrawl.dev https://firecrawl.dev/blog https://docs.firecrawl.dev# Extract links and process with jq
firecrawl https://example.com --format links | jq '.links[].url'
# Convert to PDF (with pandoc)
firecrawl https://example.com | pandoc -o document.pdf
# Search within scraped content
firecrawl https://example.com | grep -i "keyword"# Set API key via environment
export FIRECRAWL_API_KEY=${{ secrets.FIRECRAWL_API_KEY }}
firecrawl crawl https://docs.example.com --wait -o docs.json
# Use self-hosted instance
export FIRECRAWL_API_URL=${{ secrets.FIRECRAWL_API_URL }}
firecrawl scrape https://example.com -o output.mdA convenience command that combines map + scrape to save a site as local files. Maps the site first to discover pages, then scrapes each one into nested directories under .firecrawl/. All scrape options work with download. Run without flags for an interactive wizard that walks you through format, screenshot, and path selection.
# Interactive wizard (picks format, screenshots, paths for you)
firecrawl download https://docs.firecrawl.dev
# Download with screenshots
firecrawl download https://docs.firecrawl.dev --screenshot --limit 20 -y
# Full page screenshots
firecrawl download https://docs.firecrawl.dev --full-page-screenshot --limit 20 -y
# Multiple formats (each saved as its own file per page)
firecrawl download https://docs.firecrawl.dev --format markdown,links --screenshot --limit 20 -y
# Creates per page: index.md + links.txt + screenshot.png
# Download as HTML
firecrawl download https://docs.firecrawl.dev --html --limit 20 -y
# Main content only
firecrawl download https://docs.firecrawl.dev --only-main-content --limit 50 -y
# Filter to specific paths
firecrawl download https://docs.firecrawl.dev --include-paths "/features,/sdks"
# Skip localized pages
firecrawl download https://docs.firecrawl.dev --exclude-paths "/zh,/ja,/fr,/es,/pt-BR"
# Include subdomains
firecrawl download https://firecrawl.dev --allow-subdomains
# Combine everything
firecrawl download https://docs.firecrawl.dev \
--include-paths "/features,/sdks" \
--exclude-paths "/zh,/ja,/fr,/es,/pt-BR" \
--only-main-content \
--screenshot \
-y| Option | Description |
|---|---|
--limit <number> |
Max pages to download |
--search <query> |
Filter pages by search query |
--include-paths <paths> |
Only download matching paths (comma-separated) |
--exclude-paths <paths> |
Skip matching paths (comma-separated) |
--allow-subdomains |
Include subdomains when mapping |
-y, --yes |
Skip confirmation prompt and wizard |
All scrape options also work with download (formats, screenshots, tags, geo-targeting, etc.)
Each format is saved as its own file per page:
.firecrawl/
docs.firecrawl.dev/
features/
scrape/
index.md # markdown content
links.txt # one link per line
screenshot.png # actual PNG image
crawl/
index.md
screenshot.png
sdks/
python/
index.md
The CLI collects anonymous usage data during authentication to help improve the product:
- CLI version, OS, and Node.js version
- Detect development tools (e.g., Cursor, VS Code, Claude Code)
No command data, URLs, or file contents are collected via the CLI.
To disable telemetry, set the environment variable:
export FIRECRAWL_NO_TELEMETRY=1Launch pre-built AI workflows that combine Firecrawl's web capabilities with your coding agent. One command spins up an interactive session with the right system prompt, tools, and instructions -- like ollama run but for web research agents. All workflows spawn parallel subagents to divide the work and finish faster.
# Claude Code (available now)
firecrawl claude competitor-analysis
firecrawl claude deep-research
firecrawl claude lead-research
firecrawl claude seo-audit
firecrawl claude qa
# Codex and OpenCode -- coming soon
firecrawl codex competitor-analysis
firecrawl opencode competitor-analysisSee the full documentation: Experimental Workflows ->
After building the CLI (pnpm run build), every workflow works with all three backends — just swap the command name:
# Help
firecrawl claude --help
firecrawl codex --help
firecrawl opencode --helpfirecrawl claude qa https://myapp.com
firecrawl codex qa https://myapp.com
firecrawl opencode qa https://myapp.comfirecrawl claude demo https://resend.com
firecrawl codex demo https://neon.tech
firecrawl opencode demo https://linear.appfirecrawl claude competitor-analysis https://firecrawl.dev
firecrawl codex competitor-analysis https://crawlee.dev
firecrawl opencode competitor-analysis https://apify.comfirecrawl claude deep-research "RAG pipeline data ingestion tools"
firecrawl codex deep-research "web scraping best practices 2025"
firecrawl opencode deep-research "browser automation frameworks comparison"# Lead research
firecrawl claude lead-research "Vercel"
firecrawl codex lead-research "Stripe"
# SEO audit
firecrawl opencode seo-audit https://example.com
# Knowledge base
firecrawl claude knowledge-base https://docs.langchain.com
# Research papers
firecrawl codex research-papers "web scraping compliance HIPAA"
# Shopping
firecrawl claude shop "best mechanical keyboard for developers"firecrawl claude "scrape the firecrawl docs and summarize"
firecrawl codex "find pricing for crawlee vs scrapy"
firecrawl opencode "compare Firecrawl and Apify features"Add -y to any command to auto-approve tool permissions (maps to --dangerously-skip-permissions for Claude, --full-auto for Codex).
Use firecrawl browser launch --json to get a live view URL, then pass it to your agent so you can watch it work in real-time:
# Launch a browser session and grab the live view URL
LIVE_URL=$(firecrawl browser launch --json | jq -r '.liveViewUrl')
# Pass it to Claude Code
claude --append-system-prompt "A cloud browser session is running. Live view: $LIVE_URL -- use \`firecrawl browser\` commands to interact." \
--dangerously-skip-permissions \
"QA test https://myapp.com using the cloud browser"
# Pass it to Codex
codex --full-auto \
--config "instructions=A cloud browser session is running. Live view: $LIVE_URL -- use \`firecrawl browser\` commands to interact." \
"walk through the signup flow on https://example.com"
# Or use the built-in workflow commands (session is auto-saved for firecrawl browser)
firecrawl browser launch --json | jq -r '.liveViewUrl'
firecrawl claude demo https://resend.comEach backend requires its CLI to be installed separately:
| Backend | Install |
|---|---|
| Claude | npm install -g @anthropic-ai/claude-code |
| Codex | npm install -g @openai/codex |
| OpenCode | opencode.ai/docs/cli |
For more details, visit the Firecrawl Documentation.