Firecrawlは、URLを渡すとLLMにそのまま渡せるMarkdownやJSONを返すWebデータAPIです。JavaScriptの描画、サイト内の巡回、URL一覧の取得までAPI側で処理します。本記事は2026年9月時点の公式ドキュメントと料金ページをもとに、料金プランとクレジットの減り方、Python SDK 4.44での使い方、セルフホスト版で使えない機能を整理しました。
まとめ:Firecrawlの料金と導入形態の要点
- 何をするツールか:scrape(1ページ)・crawl(サイト巡回)・map(URL一覧)・search(Web検索+取得)を1つのAPIで提供します。現行はAPI v2です。
- 料金:Freeは月1,000クレジットで無料。有料は年払い換算でHobby月16ドル(5,000クレジット)、Standard月83ドル(10万)、Growth月333ドル(50万)、Scale月599ドル(100万)です。
- クレジットの減り方:scrapeとcrawlは1ページ1クレジット、mapは1回1クレジット、LLMによるJSON抽出は1ページ+4クレジットです。キャッシュから返っても1クレジットかかります。
- セルフホスト:本体はAGPL-3.0で、Docker Composeで起動できます。ただしAgent・Interact・ダッシュボード・enhanced proxyはクラウド版だけの機能です。
- 選び方:月数千ページまでならクラウドのHobby以下、ブラウザ運用を自分で抱えられて費用を抑えたいならCrawl4AIやセルフホスト、と分けるのが現実的です。
FirecrawlとはURLをLLM向けデータに変えるWebデータAPI
本体はGitHubのfirecrawl/firecrawlでOSSとして公開されており、2026年9月26日時点でスター約18.5万です。公式は自らを「The web data API for AI agents」と説明しています。HTMLを取ってきてパーサーを書く代わりに、APIの戻り値がそのままLLMの入力になる形で返る点が、従来のスクレイピングライブラリとの違いです。
主なエンドポイントとクレジット消費
API v2の主要エンドポイントは次のとおりです。消費クレジットは全プラン共通です(公式Billingページ)。
| エンドポイント | 役割 | 消費クレジット |
|---|---|---|
| scrape | 1URLをMarkdown・HTML・JSON等で取得 | 1/ページ |
| crawl | リンクをたどってサイトを巡回取得 | 1/ページ |
| map | サイト内のURL一覧だけを取得 | 1/回 |
| search | Web検索(本文取得は任意) | 検索結果10件ごとに2+本文取得分 |
| interact | ブラウザを操作するセッション | 2〜7/分 |
| agent | URL指定なしの自律的な調査 | 変動(1日5回無料) |
このほか、PDFなどのファイルを変換するparse、ページの変化を定期確認するmonitor、複数URLをまとめて処理するbatch scrapeがあります。extractも残っていますが、2026年5月15日のv2.10で非推奨(deprecated)になりました。公式ドキュメントもagentを「the successor to /extract」と案内しています。新しく組むならagentか、scrapeのJSONフォーマットを使います。
BeautifulSoup・Playwrightで自作する場合との違い
自作のスクレイパーでは、HTML取得・JavaScript描画・本文抽出・ページ送り・リトライを自分で組みます。Firecrawlはこれらを1回のAPI呼び出しにまとめ、既定のonlyMainContentでヘッダーやナビゲーションを除いた本文を返します。反対に、特定のDOM要素をCSSセレクタで正確に抜きたい、1日数十万ページの取得条件を細かく制御したい、といった用途では自作も候補になります。費用はサーバー・プロキシ・開発保守工数を含めて比較します。自作の基本はBeautifulSoupの解説記事、ブラウザ操作が必要なケースはSeleniumの解説記事で扱っています。スクレイピング全般の法務上の注意はスクレイピングとは?クローリング・APIとの違いを参照してください。
Firecrawlの料金プランとクレジット計算
プラン別の月額・クレジット・上限
月額は年払い時の1か月あたりの金額です(公式Pricingページ、2026年9月26日取得)。月払いは割高で、Hobbyは月19ドルです。
| プラン | 月額(年払い) | 月間クレジット | 同時ブラウザ | scrape上限/分 | crawl上限/分 |
|---|---|---|---|---|---|
| Free | 0ドル | 1,000 | 2 | 10 | 2 |
| Hobby | 16ドル | 5,000 | 5 | 100 | 20 |
| Standard | 83ドル | 100,000 | 25 | 500 | 100 |
| Growth | 333ドル | 500,000 | 50 | 5,000 | 1,000 |
| Scale | 599ドル | 1,000,000 | 100 | 10,000 | 2,000 |
1,000ページあたりに直すと、Hobbyは3.2ドル、Standardは0.83ドル、Scaleは0.6ドルです。約4分の1という差は、各プランの月間クレジットをすべて使い切った場合の単価比較です。月5,000ページを少し超える程度なら、Hobbyに追加クレジットを購入するほうがStandardより支払額を抑えられます。請求は米ドル建てで、未使用のクレジットは翌月へ繰り越せません。例外は年払いのScale(1か月)とEnterprise(2か月)だけです。
ページ数とオプションで決まるクレジット計算
基本は「1ページ1クレジット」で、オプションごとに加算されます。加算は重ねがけです。
- JSONフォーマット(LLMによる構造化抽出):+4/ページ。1ページ5クレジットになります。
- PDFの解析:PDFの1ページごとに+1
- Zero Data Retention:+1/ページ
- enhanced proxy(ボット対策の強いサイト向け):+0。追加料金はかかりません。
見落としやすいのは次の3点です。まず、キャッシュから返った結果も1クレジットかかります。公式は「Caching improves speed and latency, not credit usage」と明記しており、maxAgeは速度対策であって節約策ではありません。次に、対象サイトが403や404を返してもFirecrawlが結果を返せば課金されます。metadata.statusCodeを見て、同じURLへの再試行を止めてください。通常のscrapeは、サイトが応答しないなどでドキュメントが返らなければ非課金です。ただし、プロンプトインジェクション検査の実行後は失敗しても5クレジット、lockdownのキャッシュミスは1クレジットなど、結果が返らなくても課金される例外があります。最後に、crawlはlimitを省くと既定値が10,000ページです。巡回範囲を見積もったうえでlimitを明示します。
クレジットが尽きたときの402と従量課金
残高がゼロになると、Freeプランと従量課金(pay-as-you-go)を切っている有料プランではHTTP 402が返ります。有料プランで従量課金を有効にすると、5ドル単位でクレジットが自動購入されます。5ドルで買えるクレジット数はHobbyが1,000、Standardが2,000、Growthが2,500、Scaleが5,000です。月の従量課金上限はダッシュボードで設定でき、APIキーごとに日・週・月単位のクレジット上限も付けられます。検証用のキーには上限を付けておくと、ループの誤りでクレジットを使い切る事故を防げます。
Firecrawlの使い方:Python SDKでの実装
APIキーの取得とSDKのインストール
firecrawl.devでアカウントを作ると、ダッシュボードにfc-で始まるAPIキーが表示されます。PythonはPyPIのfirecrawl-py(2026年9月20日公開の4.44.0)、Node.jsはnpmの@mendable/firecrawl-js(4.41.0)を使います。SDKのライセンスはどちらもMITです。
pip install firecrawl-py==4.44.0
export FIRECRAWL_API_KEY=fc-xxxxxxxx
公式ドキュメントは「APIキーなしでも始められる(keyless free tier)」と案内しています。しかしfirecrawl-py 4.44.0でFirecrawl()をキーなしで作ると、ValueError: No API key providedで止まります。互換用に同時に初期化されるv1クライアントがキーを必須にしているためです。SDKを使うなら、最初からキーを設定してください。
scrapeで1ページをMarkdownに変換
import os
from firecrawl import Firecrawl
fc = Firecrawl(api_key=os.environ["FIRECRAWL_API_KEY"])
doc = fc.scrape(
"https://docs.firecrawl.dev/introduction",
formats=["markdown"],
only_main_content=True, # ヘッダー・ナビ・フッターを除く
max_age=3600000, # 1時間以内のキャッシュがあれば使う(ミリ秒)
)
print(doc.metadata.status_code, doc.metadata.title)
print(doc.markdown[:300])
SDKはAPIのcamelCaseをsnake_caseに変換します(onlyMainContent→only_main_content、statusCode→status_code)。requestsをモックして送信内容を確かめたところ、max_ageを省いた場合はmaxAge: 14400000(4時間)が送られていました。OpenAPI定義の既定値2日(172800000)はAPIを直接呼んだ場合の値で、SDK経由では4時間になります。
JSONフォーマットで構造化データを抽出
Pydanticのモデルから作ったJSON Schemaをformatsに渡すと、LLMがページからその形でデータを抜き出します。1ページ5クレジットです。
from pydantic import BaseModel
class Plan(BaseModel):
name: str
monthly_credits: int
class Pricing(BaseModel):
plans: list[Plan]
doc = fc.scrape(
"https://www.firecrawl.dev/pricing",
formats=[{
"type": "json",
"schema": Pricing.model_json_schema(),
"prompt": "各プランの名前と月間クレジット数を抜き出す",
}],
)
print(doc.json)
取得先のページにプロンプトインジェクションが仕込まれていると、抽出結果が乗っ取られることがあります。外部サイトを無差別に処理する用途では、JSONフォーマットのオプションcheckPromptInjection(さらに+4クレジット)を検討してください。
mapとcrawlでサイト全体を取得
いきなりcrawlを回さず、mapで発見できたURLの一覧と構成を確認してから範囲を絞ります。ただしmapは全URLの網羅を保証せず、次の例も最大20件の取得なので、サイト全体の総数確認には使えません。mapは返すURLが何件でも1回1クレジットです。
# URL一覧だけを取得(1回1クレジット)
res = fc.map("https://docs.firecrawl.dev", search="billing", limit=20)
for link in res.links:
print(link.url)
# パスを絞って巡回(1ページ1クレジット)
job = fc.crawl(
"https://docs.firecrawl.dev/features",
include_paths=["^/features($|/.*)"],
exclude_paths=["^/features/enterprise.*"],
limit=30,
max_discovery_depth=2,
formats=["markdown"],
)
print(job.status, job.completed, job.credits_used)
include_pathsとexclude_pathsは既定ではURLのパス部分に対する正規表現で、ドメインやクエリ文字列は対象外です。SDKでregex_on_full_url=Trueを指定すると、クエリ文字列を含むURL全体を対象にできます。開始URLもinclude_pathsで判定されるため、開始URLが一致しないとページが0件で終わることがあります。上の例で^/features/.*と書くと、開始URLの/features自体が一致しません。既定のcrawlは開始URLより下の階層だけを巡回し、兄弟・親のパスまで広げるにはcrawl_entire_domain=Trueを指定します。
429と402のエラー処理
SDKにも再試行の仕組みはありますが、自動で再試行するのは502と通信例外だけです。レート制限の429はRateLimitError、残高不足の402はPaymentRequiredErrorとしてそのまま送出されます。
import time
from firecrawl.v2.utils.error_handler import PaymentRequiredError, RateLimitError
def scrape_with_retry(url, attempts=5):
for i in range(attempts):
try:
return fc.scrape(url, formats=["markdown"])
except RateLimitError:
if i == attempts - 1:
break
time.sleep(2 ** i) # 次の再試行まで1, 2, 4, 8秒と待つ
except PaymentRequiredError:
raise SystemExit("クレジット残高ゼロ(402)。プランか従量課金の上限を確認")
raise RuntimeError("429が解消しない")
レート制限はAPIキー単位ではなくチーム単位で数えられます。同じチームのキーを複数の処理で使うと、上限を分け合う点に注意してください。
MCPサーバーによるClaude・Cursor連携
公式のMCPサーバー(npmのfirecrawl-mcp、3.25.5)を使うと、Claude DesktopやCursorからscrape・search・crawlなどをツールとして呼べます。
env FIRECRAWL_API_KEY=fc-xxxxxxxx npx -y firecrawl-mcp
リモート接続ならhttps://mcp.firecrawl.dev/v2/mcpにAPIキーをBearerで付けて接続します。キーなしで接続した場合に使えるのはfirecrawl_scrape・firecrawl_search・firecrawl_parseの3ツールだけです。ツールをエージェントに組み込む設計はAIエージェントの作り方、ブラウザ操作系CLIとの比較にはagent-browserの解説が参考になります。
Firecrawlのセルフホスト手順とクラウド版との機能差
Docker Composeでの起動手順
公式のセルフホストガイドは、タグv2.11.162に固定して手順を検証しています。別のタグではComposeの構成が変わることがあるため、まずこのタグで動かします。
git clone https://github.com/firecrawl/firecrawl.git
cd firecrawl
git checkout v2.11.162
# リポジトリ直下に .env を作り、次の4行を書く
# USE_DB_AUTHENTICATION=false
# POSTGRES_USER=postgres
# POSTGRES_PASSWORD=32文字以上のランダム文字列
# POSTGRES_DB=postgres
docker compose up --build -d
curl http://localhost:3002/v0/health/readiness
curl -X POST http://localhost:3002/v2/scrape \
-H 'Content-Type: application/json' \
-d '{"url": "https://example.com", "formats": ["markdown"]}'
この構成はAPI認証を切った評価用で、TLS・永続化・冗長化はありません。公式も「not a production architecture」と明記しています。readinessは死活確認にすぎず、Redis・PostgreSQL・Playwrightが動いているかは見ていません。動作確認は最後のscrapeで行います。POSTGRES_DBは同梱のpg_cron設定がpostgresを前提にしているため、変えないでください。
クラウド限定の機能とAGPL-3.0の義務
| 機能 | セルフホスト | クラウド |
|---|---|---|
| scrape・crawl・map・search | あり | あり |
| Playwrightによる描画 | あり | あり |
| JSON抽出などLLM機能 | OpenAI互換APIかOllamaを自分で接続 | 込み |
| 高度なボット対策 | 別サービスを自分で用意 | enhanced proxy |
| Agent・Interact・ダッシュボード | なし | あり |
本体はAGPL-3.0です。AGPL-3.0の第13条では、改変版とネットワーク越しにやり取りするすべての利用者に、その版の「対応するソース」を無償で取得できる機会を明示する義務があります。対象は改変箇所だけではなく、社内利用という理由だけで適用対象外にもなりません。SDKはMITなので、クラウド版をSDKから呼ぶだけならAGPLの影響はありません。
セルフホストが向くのは、外部のLLM・プロキシ・解析サービスへの送信も制御したうえで取得データを自社管理下に置きたい、または取得量が多くクラウドのクレジットより自前のサーバー費のほうが安い場合です。サーバーの更新・監視・障害対応がすべて自社の作業になるため、月数万ページ程度で専任の運用担当を置けない場合は、Standardを比較の基準にできます。総コストは、クラウド利用料と、自前のサーバー・プロキシ・保守工数を合算して比較します。
Crawl4AI・Apifyとの比較と選び方
| 項目 | Firecrawl | Crawl4AI | Apify |
|---|---|---|---|
| 形態 | API+OSS | OSSライブラリ+ホスト版 | スクレイパー実行基盤 |
| ライセンス | AGPL-3.0(SDKはMIT) | Apache-2.0 | SaaS |
| 無料枠 | 月1,000クレジット | OSSは無料 | 月5ドル分の利用 |
| 有料の入口 | 月16ドル〜 | OSSは不要 | 月19ドル〜+従量 |
| 課金単位 | ページ・回数 | 自前のサーバー費 | compute unit |
Crawl4AI(unclecode/crawl4ai、2026年9月23日にv0.9.4)は、手元でPlaywrightのChromiumを動かしてMarkdownを作るPythonライブラリです。ライブラリとして組み込めるので、1ページあたりの費用はほぼサーバー代だけで済みます。代わりに、ブラウザの同時実行数・メモリ・ボット対策を自分で管理します。
Apifyは、公開されているスクレイパー(Actor)を選んで実行する基盤です。Starterは月19ドル分の利用枠付きで、計算資源の利用料は1 compute unit(1GBメモリ×1時間)あたり0.2ドルです。Actorごとの料金、プロキシ、ストレージ、データ転送なども利用枠を消費し、枠を超えた利用分が追加請求されます。InstagramやLinkedInの求人など、対象サイト専用のActorがあり、必要な項目を出力できる場合は、既存Actorを使うことで取得処理を自作する手間を省けます。
選び方は次のとおりです。LLMに渡すMarkdownを少ない実装で得たいならFirecrawl、大量取得で1ページあたりの費用を削りたく、ブラウザ運用を自分で抱えられるならCrawl4AI、対象サイト専用のスクレイパーが既にあるならApifyを選びます。ノーコードでRAGを組むならDifyのナレッジ取り込みにもFirecrawl連携があり、構成例はDifyでチャットボットを作る手順で扱っています。
Firecrawlを採用しないほうがよい場面と運用上の注意
- robots.txtで拒否されたページを取りたい:Firecrawlはrobots.txtを読み、ユーザーエージェント
FirecrawlAgentと*向けのルールに従います。SDKにはignore_robots_txt引数がありますが、OpenAPI定義上は「Enterprise only」で、通常プランでは使えません。 - ログインが必要なページが中心:scrapeにはヘッダー(Cookieを含む)を渡せ、ログイン操作もscrapeのactions(クリック・入力など。1リクエスト50個まで、待機の合計60秒まで)で組めます。ただし多段の認証や継続的なセッション操作ではinteract(1分2〜7クレジット)か自前のブラウザ自動化が候補になり、費用も実装量も単純なscrapeとは別物になります。
- 同じページを高頻度で取り直す:キャッシュでもクレジットは減ります。変化の検知が目的なら、monitorや自前の差分判定と組み合わせます。
- 外部利用者向けサービスに改変版を組み込む:改変版とネットワーク越しにやり取りする利用者には、AGPL-3.0第13条に従い、その版の対応するソースを無償で取得できる機会を明示する必要があります。
もう1つ、ドキュメント同士の記述が一致しない箇所があります。batch scrapeのレート制限を、料金ページとRate Limitsページは「crawlの上限を共有」、BillingページのFreeプラン節は「scrapeの上限を共有」と書いています。上限ぎりぎりで設計する前に、ダッシュボードの実測値かサポートで確認してください。
よくある質問
Firecrawlは無料で使えますか?
使えます。Freeプランは月1,000クレジットで、クレジットカードの登録は不要です。追加オプションなしのscrapeなら月1,000ページ分です。searchは1回あたり検索結果10件以内で本文取得を付けない場合に500回分となり、結果件数や本文取得の有無で消費量が増えます。従量課金は使えないため、使い切ると翌月のリセットまで402が返ります。
Firecrawlの料金はいくらですか?
年払いの場合、Hobbyが月16ドル(5,000クレジット)、Standardが月83ドル(10万)、Growthが月333ドル(50万)、Scaleが月599ドル(100万)です。月払いのHobbyは月19ドルです。JSON抽出を使うと1ページ5クレジットになるため、必要なクレジット数は「ページ数×オプション込みの単価」で見積もります。
セルフホスト版でもagentやJSON抽出は使えますか?
agentとinteractはクラウド版だけの機能です。JSON抽出などLLMを使う機能は、セルフホスト版でもOpenAI互換のAPIかOllamaを自分で接続すれば動かせます。ボット対策の強いサイト向けのenhanced proxyもクラウド版の機能です。
FirecrawlとCrawl4AIはどちらを選ぶべきですか?
実装と運用の手間を減らしたいならFirecrawl、ブラウザ運用を自分で担い、取得処理やインフラ費を調整したいならCrawl4AIが候補です。Crawl4AIはApache-2.0のライブラリで、自分の環境でブラウザを動かします。取得量が月数万ページまでで、ブラウザ運用を持ちたくないならFirecrawlのStandardが扱いやすい選択です。
Firecrawlは商用利用できますか?
クラウド版はプラン契約の範囲で商用利用できます。SDKはMITライセンスです。セルフホスト版の本体はAGPL-3.0です。改変版をネットワーク越しに利用させる場合、第13条に従い、その利用者に対応するソースを無償で取得できる機会を明示する必要があります。取得先サイトの利用規約と著作権は、Firecrawlの利用とは別に確認が必要です。