- 通过 sitemap 和递归链接遍历发现页面
- 支持路径过滤、深度限制以及对子域名/外部链接的控制
- 通过轮询、WebSocket 或 webhook 返回结果
在 Playground 中试用
在交互式 Playground 中测试爬取功能——无需代码。
安装
基本用法
POST /v2/crawl 并提供起始 URL,即可提交爬取任务。该端点会返回一个任务 ID,你可以用它轮询结果。
每爬取 1 个页面会消耗 1 个额度。爬取的默认
limit 为 10,000 个页面。在开始之前,爬取端点会检查你的剩余额度是否足以覆盖 limit;如果不足,则会返回 402 (需要付款) 错误。你可以设置更低的 limit 来匹配计划的爬取规模 (例如将 limit 设为 100) ,以避免这种情况。某些选项会额外消耗额度:JSON 模式每个页面额外消耗 4 个额度,PDF 解析每个 PDF 页面额外消耗 1 个额度。Scrape 选项
scrapeOptions (JS) / scrape_options (Python) 在 crawl 中使用。它们将应用于爬虫抓取的每个页面,包括 formats、代理、缓存、actions、location 和 tags。
检查爬取状态
任务结果在完成后 24 小时内可通过 API 获取。此后,你仍可以在活动日志中查看你的爬取历史和结果。
爬取结果中的
data 数组里包含的是 Firecrawl 成功抓取的页面,即使目标站点返回了 404 等 HTTP 错误。metadata.statusCode 字段显示的是目标站点返回的 HTTP 状态码。若要获取 Firecrawl 本身未能成功抓取的页面 (例如网络错误、超时或被 robots.txt 拦截) ,请使用专门的 Get Crawl Errors 端点 (GET /crawl/{id}/errors) 。响应处理
next URL 参数。你需要请求该 URL 以获取后续的每 10MB 数据。如果没有 next 参数,则表示爬取数据已结束。
仅在直接调用 API 时,
skip 和 next 参数才生效。
如果你使用 SDK,我们会代为处理,并一次性返回全部结果。SDK 方法
抓取并等待
crawl 方法会等待爬取完成并返回完整响应。自动处理分页。适用于大多数场景,推荐使用。
启动后稍后检查
startCrawl / start_crawl 方法会立即返回一个爬取 ID。随后你需要手动轮询状态。这适合长时间运行的爬取任务或自定义轮询逻辑。
使用 WebSocket 获取实时结果
Webhooks
cURL
事件类型
负载
验证 webhook 签名
X-Firecrawl-Signature 请求头,其中含有一个 HMAC-SHA256 签名。务必验证此签名,以确保 webhook 为真实请求且未被篡改。
- 在账户设置中的 Advanced (高级) 选项卡 获取你的 webhook 密钥 (secret)
- 从
X-Firecrawl-Signature请求头中提取签名 - 使用该密钥对原始请求体计算 HMAC-SHA256
- 使用时间安全函数 (timing-safe function) 将计算结果与签名请求头中的值进行比较
执行与结果统计
读取状态计数器
GET /v2/crawl/{id}) 返回的每个响应都包含用于描述本次运行的计数器:
data 数组仅包含 Firecrawl 成功抓取的页面。已尝试但未产生结果的页面不会出现在 data 中 —— 请从下文的 Get 爬取 Errors 中获取。
分页读取结果
next 会携带下一页结果的 URL。
next 并不单纯是“还有更多数据”的信号:只要 status 不是 completed,它就会出现,因此已进入终态 failed 或 cancelled 的爬取即便没有更多结果,也可能返回 next URL。不要把 next 是否缺失当作循环的退出条件——对失败或已取消的爬取来说,它永远不会消失。
真正的终止条件是 status 字段。要完整读取一次运行:
- 轮询
GET /v2/crawl/{id},直到status变为completed、failed或cancelled之一。 - 只要
next存在且上一页返回的data数组非空,就沿着next继续收集剩余结果。 - 当
next不存在,或某一页未返回新文档时,停止。
失败和被封禁的页面
GET /v2/crawl/{id}/errors) 会记录未进入 data 的页面,返回两个数组:
errors— 出错的抓取任务,每一项包含id、url、error(错误消息) 以及失败发生时的timestamp。这些是 Firecrawl 自身抓取失败的页面,例如网络错误、超时等。被有意跳过的外部站点首页链接也会在此上报,错误代码为EXTERNAL_LINK。robotsBlocked— 已尝试访问但被站点 robots.txt 封禁的 URL。
该列表并不保证完整列举每一次失败:目前部分内部失败类别会在构建响应之前从
errors 中被过滤掉。请将其视为 Firecrawl 上报的失败记录,而不能据此断定没有其他问题。上文提到的错误代码 (EXTERNAL_LINK) 目前会在错误对象中返回,但尚未纳入已发布的 GET /crawl/{id}/errors schema,相关 API Reference 文档待更新。data 中,并在 metadata.statusCode 中带有站点返回的状态码。
爬虫的可达范围
- 默认仅抓取子路径。 爬取会忽略不属于所提供 URL 子级的链接。使用
crawlEntireDomain抓取同级和上级路径,使用allowSubdomains抓取子域名,使用allowExternalLinks跟随跨域名的链接。 includePaths/excludePaths以正则表达式匹配 URL 的 pathname —— 而非完整 URL,也不包含查询参数。设置regexOnFullURL: true可改为匹配包含查询字符串的完整 URL。起始 URL 同样会与includePaths进行匹配:若不匹配,爬取可能返回 0 个页面。- sitemap 模式。 使用默认的
sitemap: "include"时,URL 来自 sitemap 以及递归的链接发现。"skip"仅使用 HTML 链接,因此会遗漏仅存在于 sitemap 中的页面,例如 PDF 或层级很深的页面。"only"则只抓取 sitemap 加起始 URL,不从 HTML 中发现链接。 maxDiscoveryDepth限制从根节点起可跟随的链接发现跳数。处于最大深度的页面仍会被抓取,但不会再跟随其中发现的链接。limit限制页面数量,默认值为10000。ignoreQueryParameters可避免对查询参数不同的同一路径重复抓取。- 遵守 robots.txt,除非启用
ignoreRobotsTxt(仅限企业版) 。
maxConcurrency 默认为你团队的 concurrency 上限,该上限由你的 plan 决定 —— 请参见限流。
当多次运行结果不一致时
maxDiscoveryDepth 值较高时。
要让运行结果更可复现:
- 将
maxConcurrency设置为1。如配置参考所述,maxConcurrency表示“最大并发抓取数”——它限制同时进行的请求数量。这会减少依赖时序的交错执行,但并不能消除运行间的差异:sitemap 发现的入队不受该上限约束,嵌套 sitemap 会作为独立任务获取,且返回的data数组按完成时间而非发现顺序排列。设置delay也会将并发数强制为 1。 - 如果站点拥有完整的 sitemap,请使用
sitemap: "only",这样 URL 集合来自 sitemap 而非链接发现。
判断爬取何时完成
crawl.page,运行结束时会触发 crawl.completed (或 crawl.failed) 。任务结果在完成后的 24 小时内可通过 API 获取;超过该时限后,可在活动日志中查看。
配置参考
重要说明
- sitemap 发现:默认情况下,爬虫会包含网站的 sitemap 来发现 URL (
sitemap: "include") 。如果设置sitemap: "skip",则只会发现可通过根 URL 的 HTML 链接访问到的页面。像 PDF 这类资源,或列在 sitemap 中但未在 HTML 中直接链接的深层页面,都会被遗漏。为了获得最大覆盖率,建议保留默认设置。 - 额度消耗:每爬取一个页面消耗 1 个额度。JSON 模式每页额外消耗 4 个额度,PDF 解析则每个 PDF 页面消耗 1 个额度。
- 结果过期时间:任务结果在完成后的 24 小时内可通过 API 获取。此后,请在活动日志中查看结果。
- 爬取错误:
data数组包含 Firecrawl 成功抓取的页面。使用 Get Crawl Errors 端点可获取因网络错误、超时或被 robots.txt 封禁而失败的页面。
- 外部链接:设置
allowExternalLinks: true后,爬虫会跟随指向域名外部的链接,并对每个链接页面抓取一次——不会继续爬取这些外部页面中的链接。指向外部站点主页的链接 (不含路径的根 URL,例如https://example.com/) 会被特意跳过,以避免抓取整个无关站点;这些链接会以代码EXTERNAL_LINK显示在 Get Crawl Errors 中。重定向会被跟随至其目标地址——包括解析为其规范 URL 的链接 (例如http → https或www变体) ——因此,只有最终跳转至外部主页的重定向会被跳过。
- 非确定性结果:同一配置在多次运行之间的爬取结果可能会有所不同,因为页面是并发抓取的,链接发现顺序取决于网络时序。关于哪些方面会发生变化以及如何让运行更可复现,请参见执行与结果统计。
你是需要 Firecrawl API 密钥的 AI 代理吗?请参阅 firecrawl.dev/agent-onboarding/SKILL.md 了解自动化接入说明。

