关于 firecrawl
Firecrawl 是面向开发者和 AI Agent 的网页数据 API,提供搜索、抓取、页面交互、站点爬取和文档解析,并可输出 Markdown、结构化 JSON 或截图。
主要功能
- 01搜索网页并获取页面内容
- 02将 URL 抓取为 Markdown、JSON 或截图
- 03通过操作或提示词与页面交互
- 04爬取网站并发现其 URL
- 05解析 PDF 和 DOCX 等文档
- 06批量抓取 URL 并监测内容变化
适用场景
- 01收集网页搜索结果中的页面内容
- 02从网站或文档提取结构化数据
- 03提取前导航并操作网页
- 04收集站点页面或检查内容变化
MCP 相关
Firecrawl 可通过 firecrawl-mcp 服务连接兼容 MCP 的客户端,为客户端提供网页搜索、抓取和页面交互能力。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
🔥 Firecrawl
用于大规模搜索、抓取和交互网页的 API。Firecrawl 是面向 AI Agent 的上下文 API。🔥 开源,并提供托管服务。
悄悄说:嘿,说的就是你,来加入我们的星标用户吧 :)
为什么选择 Firecrawl?
- 业界领先的可靠性:覆盖 96% 的网页,包括 JavaScript 内容繁多的页面——无需为代理烦恼,只获取干净的数据(查看基准测试)
- 速度极快:数百万个页面的 P95 延迟为 3.4 秒,专为实时 Agent 和动态应用打造
- 适用于大模型的输出:提供干净的 Markdown、结构化 JSON、截图等——减少 token 消耗,打造更出色的 AI 应用
- 棘手问题交给我们:轮换代理、编排、速率限制、受 JavaScript 阻止的内容等,均无需配置
- 适用于 Agent:只需一条命令,即可将 Firecrawl 连接到任意 AI Agent 或 MCP 客户端
- 文档解析:将 PDF、DOCX 和其他文档转换为干净的 Markdown 或结构化 JSON
- 操作:提取内容前,可点击、滚动、输入、等待和按键
- 开源:以透明、协作的方式开发——加入我们的社区
功能概览
核心端点
| 功能 | 说明 |
|---|---|
| 搜索 | 搜索网页并获取搜索结果中的完整页面内容 |
| 抓取 | 将任意 URL 转换为 Markdown、HTML、截图或结构化 JSON |
| 交互 | 抓取页面,然后使用 AI 提示词或代码与页面交互 |
更多功能
| 功能 | 说明 |
|---|---|
| 解析 | 将 PDF、DOCX 和其他文档转换为干净的 Markdown 或结构化 JSON |
| Agent | 自动收集数据,只需描述你的需求 |
| 爬取 | 通过一次请求抓取网站上的所有 URL |
| 映射 | 即时发现网站上的所有 URL |
| 批量抓取 | 异步抓取数千个 URL |
| 监控 | 网站内容发生变化时收到通知 |
快速开始
在 firecrawl.dev 注册以获取 API 密钥。前往 playground 试用。
搜索
搜索网络并获取搜索结果的完整内容。
from firecrawl import Firecrawl
app = Firecrawl(api_key="fc-YOUR_API_KEY")
search_result = app.search("firecrawl", limit=5)
Node.js / cURL / CLI
Node.js
import { Firecrawl } from 'firecrawl';
const app = new Firecrawl({apiKey: "fc-YOUR_API_KEY"});
app.search("firecrawl", { limit: 5 })
cURL
curl -X POST 'https://api.firecrawl.dev/v2/search' \
-H 'Authorization: Bearer fc-YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"query": "firecrawl",
"limit": 5
}'
CLI
firecrawl search "firecrawl" --limit 5
输出:
[
{
"url": "https://firecrawl.dev",
"title": "Firecrawl",
"markdown": "Turn websites into..."
},
{
"url": "https://docs.firecrawl.dev",
"title": "Firecrawl Docs",
"markdown": "# Getting Started..."
}
]
抓取
从任意网站获取适用于大模型的上下文——Markdown、JSON、屏幕截图等。
from firecrawl import Firecrawl
app = Firecrawl(api_key="fc-YOUR_API_KEY")
result = app.scrape('firecrawl.dev')
Node.js / cURL / CLI
Node.js
import { Firecrawl } from 'firecrawl';
const app = new Firecrawl({ apiKey: "fc-YOUR_API_KEY" });
app.scrape('firecrawl.dev')
cURL
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"
}'
CLI
firecrawl scrape https://firecrawl.dev
firecrawl https://firecrawl.dev --only-main-content
输出:
# Firecrawl
Firecrawl helps AI agents search, scrape, and interact with the web.
## Features
- Search: Find information across the web
- Scrape: Clean data from any page
- Interact: Click, navigate, and operate pages
- Agent: Autonomous data gathering
交互
抓取页面,然后使用 AI 提示词或代码与其交互。
from firecrawl import Firecrawl
app = Firecrawl(api_key="fc-YOUR_API_KEY")
result = app.scrape("https://amazon.com")
scrape_id = result.metadata.scrape_id
app.interact(scrape_id, prompt="Search for 'mechanical keyboard'")
app.interact(scrape_id, prompt="Click the first result")
Node.js / cURL / CLI
Node.js
import { Firecrawl } from 'firecrawl';
const app = new Firecrawl({apiKey: "fc-YOUR_API_KEY"});
const result = await app.scrape("https://amazon.com");
await app.interact(result.metadata.scrapeId, {
prompt: "Search for 'mechanical keyboard'"
});
await app.interact(result.metadata.scrapeId, {
prompt: "Click the first result"
});
cURL
# 1. Scrape the page
curl -X POST 'https://api.firecrawl.dev/v2/scrape' \
-H 'Authorization: Bearer fc-YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"url": "https://amazon.com"}'
# 2. Interact with the page (use scrapeId from step 1)
curl -X POST 'https://api.firecrawl.dev/v2/scrape/SCRAPE_ID/interact' \
-H 'Authorization: Bearer fc-YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"prompt": "Search for mechanical keyboard"}'
CLI
firecrawl scrape https://amazon.com
firecrawl interact exec --prompt "Search for 'mechanical keyboard'"
firecrawl interact exec --prompt "Click the first result"
输出:
{
"success": true,
"output": "Keyboard available at $100",
"liveViewUrl": "https://liveview.firecrawl.dev/..."
}
为 Agent 提供动力
只需几分钟,即可将 Firecrawl 连接到任意 AI Agent 或 MCP 客户端。
Skill
只需一条命令,即可让 Agent 轻松获取实时网络数据。
npx -y firecrawl-cli@latest init --all --browser
安装后重启 Agent。支持 Claude Code、Antigravity、OpenCode 等。
MCP
只需几秒,即可将任意兼容 MCP 的客户端连接到网络。
{
"mcpServers": {
"firecrawl-mcp": {
"command": "npx",
"args": ["-y", "firecrawl-mcp"],
"env": {
"FIRECRAWL_API_KEY": "fc-YOUR_API_KEY"
}
}
}
}
Agent 入门指南
你是 AI Agent 吗?获取此 Skill,为用户注册、获取 API 密钥,并开始使用 Firecrawl 构建。
curl -s https://firecrawl.dev/agent-onboarding/SKILL.md
所有可用命令请参阅 Skill + CLI 文档。MCP 相关内容请参阅 firecrawl-mcp-server。
更多端点
Agent
从网络获取数据的最简单方式。 描述你需要的内容,我们的 AI Agent 会搜索、浏览并获取数据。无需提供 URL。
Agent 是我们 /extract 端点的升级版:速度更快、更可靠,而且无需事先知道 URL。
curl -X POST 'https://api.firecrawl.dev/v2/agent' \
-H 'Authorization: Bearer fc-YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"prompt": "Find the pricing plans for Notion"
}'
响应:
{
"success": true,
"data": {
"result": "Notion offers the following pricing plans:\n\n1. Free - $0/month...\n2. Plus - $10/seat/month...\n3. Business - $18/seat/month...",
"sources": ["https://www.notion.so/pricing"]
}
}
使用结构化输出的 Agent
使用架构获取结构化数据:
from firecrawl import Firecrawl
from pydantic import BaseModel, Field
from typing import List, Optional
app = Firecrawl(api_key="fc-YOUR_API_KEY")
class Founder(BaseModel):
name: str = Field(description="Full name of the founder")
role: Optional[str] = Field(None, description="Role or position")
class FoundersSchema(BaseModel):
founders: List[Founder] = Field(description="List of founders")
result = app.agent(
prompt="Find the founders of Firecrawl",
schema=FoundersSchema
)
print(result.data)
{
"founders": [
{"name": "Eric Ciarla", "role": "Co-founder"},
{"name": "Nicolas Camara", "role": "Co-founder"},
{"name": "Caleb Peffer", "role": "Co-founder"}
]
}
指定 URL 的 Agent(可选)
让 Agent 专注于特定页面:
result = app.agent(
urls=["https://docs.firecrawl.dev", "https://firecrawl.dev/pricing"],
prompt="Compare the features and pricing information"
)
选择工作量
设置 Agent 在任务上投入的推理量:
| 工作量 | 适用场景 |
|---|---|
low | 在一个网站上进行简单查询 |
medium | 在少数几个页面上执行多步骤任务 |
high | 深度研究、复杂浏览、关键数据 |
result = app.agent(
prompt="Compare enterprise features across Firecrawl, Apify, and ScrapingBee",
effort="high"
)
每个工作量级别都使用 spark-2 模型。工作量调整的是推理
预算,而不是模型。
模型
每次 Agent 运行默认都使用 spark-2,因此无需设置
model。为保持向后兼容,已停用的 spark-1-pro 和 spark-1-mini 名称仍可使用,
但它们已弃用,实际运行时会使用 spark-2。
在我们的 Agent 文档中了解有关 Spark 模型的更多信息。
抓取
抓取整个网站并获取所有页面的内容。
curl -X POST 'https://api.firecrawl.dev/v2/crawl' \
-H 'Authorization: Bearer fc-YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"url": "https://docs.firecrawl.dev",
"limit": 100,
"scrapeOptions": {
"formats": ["markdown"]
}
}'
返回一个任务 ID:
{
"success": true,
"id": "123-456-789",
"url": "https://api.firecrawl.dev/v2/crawl/123-456-789"
}
检查抓取状态
curl -X GET 'https://api.firecrawl.dev/v2/crawl/123-456-789' \
-H 'Authorization: Bearer fc-YOUR_API_KEY'
{
"status": "completed",
"total": 50,
"completed": 50,
"creditsUsed": 50,
"data": [
{
"markdown": "# Page Title\n\nContent...",
"metadata": {"title": "Page Title", "sourceURL": "https://..."}
}
]
}
注意: SDK 会自动处理轮询,以提供更好的开发体验。
映射
立即发现网站上的所有 URL。
curl -X POST 'https://api.firecrawl.dev/v2/map' \
-H 'Authorization: Bearer fc-YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"url": "https://firecrawl.dev"}'
响应:
{
"success": true,
"links": [
{"url": "https://firecrawl.dev", "title": "Firecrawl", "description": "The context API for AI agents"},
{"url": "https://firecrawl.dev/pricing", "title": "Pricing", "description": "Firecrawl pricing plans"},
{"url": "https://firecrawl.dev/blog", "title": "Blog", "description": "Firecrawl blog"}
]
}
使用搜索的映射
在网站中查找特定 URL:
from firecrawl import Firecrawl
app = Firecrawl(api_key="fc-YOUR_API_KEY")
result = app.map("https://firecrawl.dev", search="pricing")
# Returns URLs ordered by relevance to "pricing"
批量抓取
一次抓取多个 URL:
from firecrawl import Firecrawl
app = Firecrawl(api_key="fc-YOUR_API_KEY")
job = app.batch_scrape([
"https://firecrawl.dev",
"https://docs.firecrawl.dev",
"https://firecrawl.dev/pricing"
], formats=["markdown"])
for doc in job.data:
print(doc.metadata.source_url)
SDK
我们的 SDK 提供了便捷的方式来使用 Firecrawl 的所有功能,并会自动处理异步操作的轮询。
Python
安装 SDK:
pip install firecrawl
from firecrawl import Firecrawl
app = Firecrawl(api_key="fc-YOUR_API_KEY")
# Scrape a single URL
doc = app.scrape("https://firecrawl.dev", formats=["markdown"])
print(doc.markdown)
# Use the Agent for autonomous data gathering
result = app.agent(prompt="Find the founders of Stripe")
print(result.data)
# Crawl a website (automatically waits for completion)
docs = app.crawl("https://docs.firecrawl.dev", limit=50)
for doc in docs.data:
print(doc.metadata.source_url, doc.markdown[:100])
# Search the web
results = app.search("best AI data tools 2024", limit=10)
print(results)
Node.js
安装 SDK:
npm install firecrawl
import { Firecrawl } from 'firecrawl';
const app = new Firecrawl({ apiKey: 'fc-YOUR_API_KEY' });
// Scrape a single URL
const doc = await app.scrape('https://firecrawl.dev', { formats: ['markdown'] });
console.log(doc.markdown);
// Use the Agent for autonomous data gathering
const result = await app.agent({ prompt: 'Find the founders of Stripe' });
console.log(result.data);
// Crawl a website (automatically waits for completion)
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
const results = await app.search('best AI data tools 2024', { limit: 10 });
results.data.web.forEach(result => {
console.log(`${result.title}: ${result.url}`);
});
Go
安装 SDK:
go get github.com/firecrawl/firecrawl/apps/go-sdk
package main
import (
"context"
"fmt"
"log"
firecrawl "github.com/firecrawl/firecrawl/apps/go-sdk"
"github.com/firecrawl/firecrawl/apps/go-sdk/option"
)
func main() {
// Create a client (reads FIRECRAWL_API_KEY from environment)
client, err := firecrawl.NewClient(option.WithAPIKey("fc-YOUR_API_KEY"))
if err != nil {
log.Fatal(err)
}
ctx := context.Background()
// Scrape a single URL
doc, err := client.Scrape(ctx, "https://firecrawl.dev", &firecrawl.ScrapeOptions{
Formats: []string{"markdown"},
})
if err != nil {
log.Fatal(err)
}
fmt.Println(doc.Markdown)
// Use the Agent for autonomous data gathering
agent, err := client.Agent(ctx, &firecrawl.AgentOptions{
Prompt: "Find the founders of Stripe",
})
if err != nil {
log.Fatal(err)
}
fmt.Println(agent.Data)
// Crawl a website (automatically waits for completion)
job, err := client.Crawl(ctx, "https://docs.firecrawl.dev", &firecrawl.CrawlOptions{
Limit: firecrawl.Int(50),
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("Crawled %d pages\n", len(job.Data))
// Search the web
results, err := client.Search(ctx, "best AI data tools 2024", &firecrawl.SearchOptions{
Limit: firecrawl.Int(10),
})
if err != nil {
log.Fatal(err)
}
fmt.Println(results)
}
Java
添加依赖(Gradle/Maven):
repositories {
mavenCentral()
maven { url 'https://jitpack.io' }
}
dependencies {
implementation 'com.github.firecrawl:firecrawl-java-sdk:2.0'
}
import dev.firecrawl.client.FirecrawlClient;
import dev.firecrawl.model.*;
FirecrawlClient client = new FirecrawlClient(
System.getenv("FIRECRAWL_API_KEY"), null, null
);
// Scrape a single URL
ScrapeParams scrapeParams = new ScrapeParams();
scrapeParams.setFormats(new String[]{"markdown"});
FirecrawlDocument doc = client.scrapeURL("https://firecrawl.dev", scrapeParams);
System.out.println(doc.getMarkdown());
// Use the Agent for autonomous data gathering
AgentParams agentParams = new AgentParams("Find the founders of Stripe");
AgentResponse start = client.createAgent(agentParams);
AgentStatusResponse result = client.getAgentStatus(start.getId());
System.out.println(result.getData());
// Crawl a website (polls until completion)
CrawlParams crawlParams = new CrawlParams();
crawlParams.setLimit(50);
CrawlStatusResponse job = client.crawlURL("https://docs.firecrawl.dev", crawlParams, null, 10);
for (FirecrawlDocument page : job.getData()) {
System.out.println(page.getMetadata().get("sourceURL"));
}
// Search the web
SearchParams searchParams = new SearchParams("best AI data tools 2024");
searchParams.setLimit(10);
SearchResponse results = client.search(searchParams);
for (SearchResult r : results.getResults()) {
System.out.println(r.getTitle() + ": " + r.getUrl());
}
Elixir
添加依赖:
def deps do
[
{:firecrawl, "~> 1.0"}
]
end
# Scrape a URL
{:ok, response} = Firecrawl.scrape_and_extract_from_url(
url: "https://firecrawl.dev",
formats: ["markdown"]
)
# Crawl a website
{:ok, response} = Firecrawl.crawl_urls(
url: "https://docs.firecrawl.dev",
limit: 50
)
# Search the web
{:ok, response} = Firecrawl.search_and_scrape(
query: "best AI data tools 2024",
limit: 10
)
# Map URLs
{:ok, response} = Firecrawl.map_urls(url: "https://example.com")
Rust
添加依赖:
[dependencies]
firecrawl = "2"
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }
use firecrawl::{Client, ScrapeOptions, Format, CrawlOptions};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = Client::new("fc-YOUR_API_KEY")?;
// Scrape a URL
let document = client.scrape("https://firecrawl.dev", None).await?;
println!("{:?}", document.markdown);
// Crawl a website
let options = CrawlOptions {
limit: Some(50),
..Default::default()
};
let result = client.crawl("https://docs.firecrawl.dev", options).await?;
println!("Crawled {} pages", result.data.len());
// Search the web
let response = client.search("best web scraping tools 2024", None).await?;
println!("{:?}", response.data);
Ok(())
}
Ruby
安装 SDK:
gem install firecrawl-sdk
require "firecrawl"
client = Firecrawl::Client.new(api_key: "fc-YOUR_API_KEY")
# Scrape a single URL
doc = client.scrape("https://firecrawl.dev",
Firecrawl::Models::ScrapeOptions.new(formats: ["markdown"]))
puts doc.markdown
# Use the Agent for autonomous data gathering
result = client.agent(
Firecrawl::Models::AgentOptions.new(prompt: "Find the founders of Stripe"))
puts result.data
# Crawl a website (automatically waits for completion)
job = client.crawl("https://docs.firecrawl.dev",
Firecrawl::Models::CrawlOptions.new(limit: 50))
job.data.each { |d| puts d.metadata.source_url }
# Search the web
results = client.search("best AI data tools 2024",
Firecrawl::Models::SearchOptions.new(limit: 10))
puts results
.NET
安装 SDK:
dotnet add package firecrawl-sdk
using Firecrawl;
using Firecrawl.Models;
var client = new FirecrawlClient("fc-YOUR_API_KEY");
// Scrape a single URL
var doc = await client.ScrapeAsync("https://firecrawl.dev",
new ScrapeOptions { Formats = new List<object> { "markdown" } });
Console.WriteLine(doc.Markdown);
// Crawl a website (automatically waits for completion)
var job = await client.CrawlAsync("https://docs.firecrawl.dev",
new CrawlOptions { Limit = 50 });
Console.WriteLine($"Crawled {job.Data.Count} pages");
// Search the web
var results = await client.SearchAsync("best AI data tools 2024",
new SearchOptions { Limit = 10 });
Console.WriteLine(results);
PHP
安装 SDK:
composer require firecrawl/firecrawl-sdk
<?php
use Firecrawl\Client\FirecrawlClient;
use Firecrawl\Models\ScrapeOptions;
use Firecrawl\Models\CrawlOptions;
use Firecrawl\Models\SearchOptions;
$client = FirecrawlClient::create(apiKey: 'fc-YOUR_API_KEY');
// Scrape a single URL
$doc = $client->scrape('https://firecrawl.dev', ScrapeOptions::with(
formats: ['markdown'],
));
echo $doc->getMarkdown();
// Crawl a website (automatically waits for completion)
$job = $client->crawl('https://docs.firecrawl.dev', CrawlOptions::with(limit: 50));
foreach ($job->getData() as $page) {
echo $page->getMetadata()['sourceURL'] . "\n";
}
// Search the web
$results = $client->search('best AI data tools 2024', SearchOptions::with(limit: 10));
print_r($results);
集成
Agent 和 AI 工具
- Firecrawl 技能目录 — 使用
npx skills add firecrawl/skills安装 - Firecrawl CLI
- Firecrawl MCP
构建技能(将 Firecrawl 集成到产品代码中)在本仓库的 skills/ 下编写,并通过 CI 同步到目录。想要贡献技能?CLI 技能(包括 research/developer 索引技能)→ 向 firecrawl/cli 提交 PR。构建/SDK 技能 → 向本仓库(skills/)提交 PR。工作流技能 → 向 firecrawl/firecrawl-workflows 提交 PR。目录(firecrawl/skills)为只读 — 请勿直接向其提交 PR。
平台
没找到你喜欢的工具? 提交 issue 告诉我们!
资源
开源版与云端版
Firecrawl 基于 AGPL-3.0 许可证开源。firecrawl.dev 上的云端版本包含更多功能:

如需在本地运行,请参阅贡献指南。如需自托管,请参阅自托管指南。
贡献
我们欢迎贡献!提交拉取请求前,请阅读我们的贡献指南。
贡献者
许可证
本项目主要基于 GNU Affero 通用公共许可证 v3.0(AGPL-3.0)授权。SDK 和部分 UI 组件基于 MIT 许可证授权。详情请参阅各目录中的 LICENSE 文件。
最终用户有责任在抓取网站时遵守网站政策。 建议用户遵守适用的隐私政策和使用条款。默认情况下,Firecrawl 会遵守 robots.txt 指令。使用 Firecrawl 即表示你同意遵守这些条件。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。