mcpField
F
firecrawl-scraper

firecrawl-scraper

github.com/jezwebデータ・データベース1.1k518 回インストール3 週間前に更新
リポジトリ

firecrawl-scraper について

firecrawl-scraperは、FirecrawlのウェブデータAPIとSDKでサイトの内容を取得し、構造化する方法を解説するスキルです。単一ページのスクレイピング、サイト巡回、検索、抽出、自律的な収集、一括処理、変更追跡を扱います。

主な機能

  1. 01ページを複数形式でスクレイピング
  2. 02サイト巡回とURL検出
  3. 03ウェブ検索と構造化データ抽出
  4. 04自律エージェントによるデータ収集
  5. 05一括スクレイピングと変更追跡
  6. 06ブラウザー操作で動的ページに対応

活用シーン

  1. 01記事や商品ページを構造化データに変換
  2. 02サイト全体のドキュメントを索引化
  3. 03商品や企業の情報を検索・抽出
  4. 04価格ページやドキュメントの変更を追跡

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/jezweb/claude-skills --skill firecrawl-scraper

インストール後、Claude Code で/firecrawl-scraperを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

README.md
.claude-plugin/
plugin.json
references/
common-patterns.md
endpoints.md
templates/
firecrawl-crawl-example.py
firecrawl-scrape-python.py
firecrawl-scrape-typescript.ts
firecrawl-worker-fetch.ts

詳細

Firecrawl Web Scraper スキル

ステータス:本番環境で利用可能 最終更新日:2026-01-20 公式ドキュメント:https://docs.firecrawl.dev API バージョン:v2 SDK バージョン:firecrawl-py 4.13.0+、@mendable/firecrawl-js 4.11.1+


Firecrawl とは?

Firecrawl は、ウェブサイトを LLM に適した Markdown または構造化データに変換するAI 向けウェブデータ APIです。次の機能を提供します。

  • JavaScript レンダリング - クライアント側の JavaScript を実行し、動的コンテンツを取得します
  • ボット対策の回避 - CAPTCHA やボット検出システムを回避します
  • 形式変換 - Markdown、HTML、JSON、スクリーンショット、要約として出力します
  • ドキュメントの解析 - PDF、DOCX ファイル、画像を処理します
  • 自律型エージェント - URL を指定せずに、AI を活用してウェブデータを収集します
  • 変更の追跡 - コンテンツの経時的な変化を監視します
  • ブランディング情報の抽出 - 配色、タイポグラフィ、ロゴを抽出します

API エンドポイントの概要

エンドポイント目的ユースケース
/scrape単一ページ記事や商品ページの抽出
/crawlサイト全体ドキュメントのインデックス化、サイトのアーカイブ
/mapURL の検出すべてのページの検索、方針の策定
/searchウェブ検索+スクレイピング最新のデータを使った調査
/extract構造化データ商品価格、連絡先
/agent自律的なデータ収集URL 不要、AI がナビゲーション
/batch-scrape複数の URL一括処理

1. Scrape エンドポイント(/v2/scrape)

単一のウェブページをスクレイピングし、整形された構造化コンテンツを返します。

基本的な使い方
from firecrawl import Firecrawl
import os

app = Firecrawl(api_key=os.environ.get("FIRECRAWL_API_KEY"))

# Basic scrape
doc = app.scrape(
    url="https://example.com/article",
    formats=["markdown", "html"],
    only_main_content=True
)

print(doc.markdown)
print(doc.metadata)
import FirecrawlApp from '@mendable/firecrawl-js';

const app = new FirecrawlApp({ apiKey: process.env.FIRECRAWL_API_KEY });

const result = await app.scrapeUrl('https://example.com/article', {
  formats: ['markdown', 'html'],
  onlyMainContent: true
});

console.log(result.markdown);
出力形式
形式説明
markdownLLM に最適化されたコンテンツ
html完全な HTML
rawHtml未処理の HTML
screenshotページのキャプチャ(ビューポートオプション付き)
linksページ上のすべての URL
json構造化データの抽出
summaryAI が生成した要約
brandingデザインシステムのデータ
changeTrackingコンテンツの変更検出
詳細オプション
doc = app.scrape(
    url="https://example.com",
    formats=["markdown", "screenshot"],
    only_main_content=True,
    remove_base64_images=True,
    wait_for=5000,  # Wait 5s for JS
    timeout=30000,
    # Location & language
    location={"country": "AU", "languages": ["en-AU"]},
    # Cache control
    max_age=0,  # Fresh content (no cache)
    store_in_cache=True,
    # Stealth mode for complex sites
    stealth=True,
    # Custom headers
    headers={"User-Agent": "Custom Bot 1.0"}
)
ブラウザー操作

スクレイピングの前に操作を実行します。

doc = app.scrape(
    url="https://example.com",
    actions=[
        {"type": "click", "selector": "button.load-more"},
        {"type": "wait", "milliseconds": 2000},
        {"type": "scroll", "direction": "down"},
        {"type": "write", "selector": "input#search", "text": "query"},
        {"type": "press", "key": "Enter"},
        {"type": "screenshot"}  # Capture state mid-action
    ]
)
JSON モード(構造化データの抽出)
# With schema
doc = app.scrape(
    url="https://example.com/product",
    formats=["json"],
    json_options={
        "schema": {
            "type": "object",
            "properties": {
                "title": {"type": "string"},
                "price": {"type": "number"},
                "in_stock": {"type": "boolean"}
            }
        }
    }
)

# Without schema (prompt-only)
doc = app.scrape(
    url="https://example.com/product",
    formats=["json"],
    json_options={
        "prompt": "Extract the product name, price, and availability"
    }
)
ブランディング情報の抽出

デザインシステムとブランドアイデンティティを抽出します。

doc = app.scrape(
    url="https://example.com",
    formats=["branding"]
)

# Returns:
# - Color schemes and palettes
# - Typography (fonts, sizes, weights)
# - Spacing and layout metrics
# - UI component styles
# - Logo and imagery URLs
# - Brand personality traits

2. Crawl エンドポイント(/v2/crawl)

開始 URL からアクセス可能なすべてのページをクロールします。

result = app.crawl(
    url="https://docs.example.com",
    limit=100,
    max_depth=3,
    allowed_domains=["docs.example.com"],
    exclude_paths=["/api/*", "/admin/*"],
    scrape_options={
        "formats": ["markdown"],
        "only_main_content": True
    }
)

for page in result.data:
    print(f"Scraped: {page.metadata.source_url}")
    print(f"Content: {page.markdown[:200]}...")
Webhook を使った非同期クロール
# Start crawl (returns immediately)
job = app.start_crawl(
    url="https://docs.example.com",
    limit=1000,
    webhook="https://your-domain.com/webhook"
)

print(f"Job ID: {job.id}")

# Or poll for status
status = app.check_crawl_status(job.id)

3. Map エンドポイント(/v2/map)

コンテンツをスクレイピングせずに、ウェブサイト上のすべての URL をすばやく検出します。

urls = app.map(url="https://example.com")

print(f"Found {len(urls)} pages")
for url in urls[:10]:
    print(url)

サイトマップの検出、クロール計画、ウェブサイト監査に使用します。


4. Search エンドポイント(/search)- 新機能

ウェブ検索を実行し、検索結果のスクレイピングも必要に応じて一度の操作で行います。

# Basic search
results = app.search(
    query="best practices for React server components",
    limit=10
)

for result in results:
    print(f"{result.title}: {result.url}")

# Search + scrape results
results = app.search(
    query="React server components tutorial",
    limit=5,
    scrape_options={
        "formats": ["markdown"],
        "only_main_content": True
    }
)

for result in results:
    print(f"{result.title}")
    print(result.markdown[:500])
検索オプション
results = app.search(
    query="machine learning papers",
    limit=20,
    # Filter by source type
    sources=["web", "news", "images"],
    # Filter by category
    categories=["github", "research", "pdf"],
    # Location
    location={"country": "US"},
    # Time filter
    tbs="qdr:m",  # Past month (qdr:h=hour, qdr:d=day, qdr:w=week, qdr:y=year)
    timeout=30000
)

料金:検索結果 10 件につき 2 クレジット。スクレイピングを有効にした場合は、別途スクレイピング料金がかかります。


5. Extract エンドポイント(/v2/extract)

単一ページ、複数ページ、またはドメイン全体から、AI を活用して構造化データを抽出します。

単一ページ
from pydantic import BaseModel

class Product(BaseModel):
    name: str
    price: float
    description: str
    in_stock: bool

result = app.extract(
    urls=["https://example.com/product"],
    schema=Product,
    system_prompt="Extract product information"
)

print(result.data)
複数ページ/ドメインからの抽出
# Extract from entire domain using wildcard
result = app.extract(
    urls=["example.com/*"],  # All pages on domain
    schema=Product,
    system_prompt="Extract all products"
)

# Enable web search for additional context
result = app.extract(
    urls=["example.com/products"],
    schema=Product,
    enable_web_search=True  # Follow external links
)
プロンプトのみを使った抽出(スキーマなし)
result = app.extract(
    urls=["https://example.com/about"],
    prompt="Extract the company name, founding year, and key executives"
)
# LLM determines output structure

6. Agent エンドポイント(/agent)- 新機能

特定の URL を指定せずに、ウェブデータを自律的に収集します。エージェントは自然言語のプロンプトを使って検索、ナビゲーション、データ収集を行います。

# Basic agent usage
result = app.agent(
    prompt="Find the pricing plans for the top 3 headless CMS platforms and compare their features"
)

print(result.data)

# With schema for structured output
from pydantic import BaseModel
from typing import List

class CMSPricing(BaseModel):
    name: str
    free_tier: bool
    starter_price: float
    features: List[str]

result = app.agent(
    prompt="Find pricing for Contentful, Sanity, and Strapi",
    schema=CMSPricing
)

# Optional: focus on specific URLs
result = app.agent(
    prompt="Extract the enterprise pricing details",
    urls=["https://contentful.com/pricing", "https://sanity.io/pricing"]
)
エージェントのモデル
モデル最適な用途料金
spark-1-mini(デフォルト)シンプルな抽出、大量処理標準
spark-1-pro複雑な分析、曖昧なデータ60% 増
result = app.agent(
    prompt="Analyze competitive positioning...",
    model="spark-1-pro"  # For complex tasks
)
非同期エージェント
# Start agent (returns immediately)
job = app.start_agent(
    prompt="Research market trends..."
)

# Poll for results
status = app.check_agent_status(job.id)
if status.status == "completed":
    print(status.data)

注:Agent はリサーチプレビュー版です。毎日 5 件まで無料でリクエストでき、その後はクレジットベースの課金となります。


7. Batch Scrape - 新機能

1 回の操作で複数の URL を効率よく処理します。

同期(完了まで待機)
results = app.batch_scrape(
    urls=[
        "https://example.com/page1",
        "https://example.com/page2",
        "https://example.com/page3"
    ],
    formats=["markdown"],
    only_main_content=True
)

for page in results.data:
    print(f"{page.metadata.source_url}: {len(page.markdown)} chars")
非同期(Webhook を使用)
job = app.start_batch_scrape(
    urls=url_list,
    formats=["markdown"],
    webhook="https://your-domain.com/webhook"
)

# Webhook receives events: started, page, completed, failed
const job = await app.startBatchScrape(urls, {
  formats: ['markdown'],
  webhook: 'https://your-domain.com/webhook'
});

// Poll for status
const status = await app.checkBatchScrapeStatus(job.id);

8. 変更の追跡 - 新機能

スクレイピング結果を比較して、コンテンツの経時的な変化を監視します。

# Enable change tracking
doc = app.scrape(
    url="https://example.com/pricing",
    formats=["markdown", "changeTracking"]
)

# Response includes:
print(doc.change_tracking.status)  # new, same, changed, removed
print(doc.change_tracking.previous_scrape_at)
print(doc.change_tracking.visibility)  # visible, hidden
比較モード
# Git-diff mode (default)
doc = app.scrape(
    url="https://example.com/docs",
    formats=["markdown", "changeTracking"],
    change_tracking_options={
        "mode": "diff"
    }
)
print(doc.change_tracking.diff)  # Line-by-line changes

# JSON mode (structured comparison)
doc = app.scrape(
    url="https://example.com/pricing",
    formats=["markdown", "changeTracking"],
    change_tracking_options={
        "mode": "json",
        "schema": {"type": "object", "properties": {"price": {"type": "number"}}}
    }
)
# Costs 5 credits per page

変更状態:

  • new - 以前に確認されていないページ
  • same - 前回のスクレイピング以降、変更なし
  • changed - コンテンツが変更されました
  • removed - ページにアクセスできなくなりました

認証

# Get API key from https://www.firecrawl.dev/app
# Store in environment
FIRECRAWL_API_KEY=fc-your-api-key-here

API キーをハードコードしないでください!


Cloudflare Workers との統合

Firecrawl SDK は Cloudflare Workers では実行できません(Node.js が必要です)。REST API を直接使用してください。

interface Env {
  FIRECRAWL_API_KEY: string;
}

export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    const { url } = await request.json<{ url: string }>();

    const response = await fetch('https://api.firecrawl.dev/v2/scrape', {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${env.FIRECRAWL_API_KEY}`,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        url,
        formats: ['markdown'],
        onlyMainContent: true
      })
    });

    const result = await response.json();
    return Response.json(result);
  }
};

レート制限と料金

警告:ステルスモードの料金変更(2025年5月)

ステルスモードを積極的に使用すると、リクエストごとに 5 クレジットが必要になりました。デフォルトの動作では「auto」モードが使用され、基本モードで失敗した場合にのみステルスクレジットが課金されます。

推奨パターン:

# Use auto mode (default) - only charges 5 credits if stealth is needed
doc = app.scrape(url, formats=["markdown"])

# Or conditionally enable stealth for specific errors
if error_status_code in [401, 403, 500]:
    doc = app.scrape(url, formats=["markdown"], proxy="stealth")
統合課金(2025年11月)

クレジットとトークンが単一のシステムに統合されました。Extract エンドポイントではクレジットを使用します(15 トークン = 1 クレジット)。

料金プラン
プラン月間クレジット数備考
無料500テストに適しています
ホビー3,000月額 $19
スタンダード100,000月額 $99
グロース500,000月額 $399

クレジットコスト:

  • スクレイピング:1 クレジット(基本)、5 クレジット(ステルス)
  • クロール:ページあたり 1 クレジット
  • 検索:10 件の結果あたり 2 クレジット
  • Extract:ページあたり 5 クレジット(v2.6.0 でトークンから変更)
  • Agent:動的(複雑さに基づく)
  • Change Tracking の JSON モード:+5 クレジット

よくある問題と解決策

問題原因解決策
コンテンツが空JS が読み込まれていないwait_for: 5000 を追加するか、actions を使用します
レート制限を超過クォータ超過ダッシュボードを確認し、プランをアップグレードします
タイムアウトエラーページの応答が遅いtimeout を延長し、stealth: true を使用します
ボット検出スクレイピング対策stealth: true を使用し、location を追加します
API キーが無効形式が間違っているfc- で始まる必要があります

既知の問題の防止

このスキルは、文書化されている 10 件の問題を防ぎます。

問題 #1:ステルスモードの料金変更(2025年5月)

エラー:ステルスモード使用時にクレジットコストが予想外に増加する 出典:ステルスモードのドキュメント | 変更履歴 発生理由:2025年5月8日以降、ステルスモードのプロキシリクエストにはリクエストごとに 5 クレジットが必要です(以前は標準料金に含まれていました)。これは大幅な料金変更です。 防止策:デフォルトの auto モードを使用します。基本モードで失敗した場合にのみステルスクレジットが課金されます。

# RECOMMENDED: Use auto mode (default)
doc = app.scrape(url, formats=['markdown'])
# Auto retries with stealth (5 credits) only if basic fails

# Or conditionally enable based on error status
try:
    doc = app.scrape(url, formats=['markdown'], proxy='basic')
except Exception as e:
    if e.status_code in [401, 403, 500]:
        doc = app.scrape(url, formats=['markdown'], proxy='stealth')

ステルスモードのオプション:

  • auto(デフォルト):基本モードで失敗した後、ステルスモードが成功した場合にのみ 5 クレジットが課金されます
  • basic:標準プロキシを使用し、1 クレジットが必要です
  • stealth:積極的に使用すると、リクエストごとに 5 クレジットが必要です

問題 #2:v2.0.0 の破壊的変更 — メソッド名の変更

エラー:AttributeError: 'FirecrawlApp' object has no attribute 'scrape_url' 出典:v2.0.0 リリース | 移行ガイド 発生理由:v2.0.0(2025年8月)では、すべての言語の SDK メソッド名が変更されました 防止策:新しいメソッド名を使用します

JavaScript/TypeScript:

  • scrapeUrl() → scrape()
  • crawlUrl() → crawl() または startCrawl()
  • asyncCrawlUrl() → startCrawl()
  • checkCrawlStatus() → getCrawlStatus()

Python:

  • scrape_url() → scrape()
  • crawl_url() → crawl() または start_crawl()
# OLD (v1)
doc = app.scrape_url("https://example.com")

# NEW (v2)
doc = app.scrape("https://example.com")

問題 #3:v2.0.0 の破壊的変更 — フォーマットの変更

エラー:'extract' is not a valid format 出典:v2.0.0 リリース 発生理由:以前の "extract" フォーマットは、v2.0.0 で "json" に名称が変更されました 防止策:JSON 抽出には新しいオブジェクト形式を使用します

# OLD (v1)
doc = app.scrape_url(
    url="https://example.com",
    params={
        "formats": ["extract"],
        "extract": {"prompt": "Extract title"}
    }
)

# NEW (v2)
doc = app.scrape(
    url="https://example.com",
    formats=[{"type": "json", "prompt": "Extract title"}]
)

# With schema
doc = app.scrape(
    url="https://example.com",
    formats=[{
        "type": "json",
        "prompt": "Extract product info",
        "schema": {
            "type": "object",
            "properties": {
                "title": {"type": "string"},
                "price": {"type": "number"}
            }
        }
    }]
)

スクリーンショット形式も変更されました:

# NEW: Screenshot as object
formats=[{
    "type": "screenshot",
    "fullPage": True,
    "quality": 80,
    "viewport": {"width": 1920, "height": 1080}
}]

Issue #4: v2.0.0 の破壊的変更 — クロールオプション

エラー: 'allowBackwardCrawling' is not a valid parameter 出典: v2.0.0 リリース 発生理由: v2.0.0 で複数のクロールパラメーターの名前が変更または削除されました 防止策: 新しいパラメーター名を使用してください

パラメーターの変更:

  • allowBackwardCrawling → 代わりに crawlEntireDomain を使用
  • maxDepth → 代わりに maxDiscoveryDepth を使用
  • ignoreSitemap(bool)→ sitemap("only", "skip", "include")
# OLD (v1)
app.crawl_url(
    url="https://docs.example.com",
    params={
        "allowBackwardCrawling": True,
        "maxDepth": 3,
        "ignoreSitemap": False
    }
)

# NEW (v2)
app.crawl(
    url="https://docs.example.com",
    crawl_entire_domain=True,
    max_discovery_depth=3,
    sitemap="include"  # "only", "skip", or "include"
)

Issue #5: v2.0.0 のデフォルト動作の変更

エラー: 古いキャッシュ済みコンテンツが予期せず返される 出典: v2.0.0 リリース 発生理由: v2.0.0 では複数のデフォルト値が変更されました 防止策: 新しいデフォルト値に注意してください

デフォルト値の変更:

  • maxAge のデフォルト値が 2 日 になりました(デフォルトでキャッシュされます)
  • blockAds、skipTlsVerification、removeBase64Images がデフォルトで有効になりました
# Force fresh data if needed
doc = app.scrape(url, formats=['markdown'], max_age=0)

# Disable cache entirely
doc = app.scrape(url, formats=['markdown'], store_in_cache=False)

Issue #6: ジョブステータスの競合状態

エラー: 作成直後にクロールのステータスを確認すると "Job not found" が発生する 出典: GitHub Issue #2662 発生理由: ジョブ作成からステータスエンドポイントが利用可能になるまでの間に、データベースのレプリケーション遅延が発生します 防止策: 最初のステータス確認まで 1〜3 秒待つか、再試行ロジックを実装してください

import time

# Start crawl
job = app.start_crawl(url="https://docs.example.com")
print(f"Job ID: {job.id}")

# REQUIRED: Wait before first status check
time.sleep(2)  # 1-3 seconds recommended

# Now status check succeeds
status = app.get_crawl_status(job.id)

# Or implement retry logic
def get_status_with_retry(job_id, max_retries=3, delay=1):
    for attempt in range(max_retries):
        try:
            return app.get_crawl_status(job_id)
        except Exception as e:
            if "Job not found" in str(e) and attempt < max_retries - 1:
                time.sleep(delay)
                continue
            raise

status = get_status_with_retry(job.id)

Issue #7: DNS エラーで HTTP 200 が返される

エラー: DNS 解決に失敗しても 4xx ではなく、HTTP 200 ステータスとともに success: false が返される 出典: GitHub Issue #2402 | v2.7.0 で修正済み 発生理由: 一貫したエラー処理のため、v2.7.0 で変更されました 防止策: success フィールドと code フィールドを確認し、HTTP ステータスだけに依存しないでください

const result = await app.scrape('https://nonexistent-domain-xyz.com');

// DON'T rely on HTTP status code
// Response: HTTP 200 with { success: false, code: "SCRAPE_DNS_RESOLUTION_ERROR" }

// DO check success field
if (!result.success) {
    if (result.code === 'SCRAPE_DNS_RESOLUTION_ERROR') {
        console.error('DNS resolution failed');
    }
    throw new Error(result.error);
}

注: DNS 解決エラーが発生した場合も、失敗したにもかかわらず 1 クレジットが課金されます。


Issue #8: ボット検出が引き続きクレジットを消費する

エラー: Cloudflare のエラーページが「成功した」スクレイピングとして返され、クレジットが課金される 出典: GitHub Issue #2413 発生理由: ボット検出によってアクセスが阻止されても、Fire-1 エンジンはクレジットを課金します 防止策: 処理前にコンテンツがエラーページではないことを検証し、保護されたサイトにはステルスモードを使用してください

# First attempt without stealth
doc = app.scrape(url="https://protected-site.com", formats=["markdown"])

# Validate content isn't an error page
if "cloudflare" in doc.markdown.lower() or "access denied" in doc.markdown.lower():
    # Retry with stealth (costs 5 credits if successful)
    doc = app.scrape(url, formats=["markdown"], stealth=True)

コストへの影響: 基本のスクレイピングでは失敗時も 1 クレジットが課金され、ステルスモードで再試行するとさらに 5 クレジットが課金されます。


Issue #9: セルフホスト環境でのアンチボットフィンガープリント対策の弱さ

エラー: アンチボット対策が施されたサイトで "All scraping engines failed!"(SCRAPE_ALL_ENGINES_FAILED)が発生する 出典: GitHub Issue #2257 発生理由: セルフホスト版の Firecrawl には、クラウドサービスに備わっている高度なアンチフィンガープリント技術がありません 防止策: 強力なアンチボット対策が施されたサイトには Firecrawl のクラウドサービスを使用するか、プロキシを設定してください

# Self-hosted fails on Cloudflare-protected sites
curl -X POST 'http://localhost:3002/v2/scrape' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-d '{
  "url": "https://www.example.com/",
  "pageOptions": { "engine": "playwright" }
}'
# Error: "All scraping engines failed!"

# Workaround: Use cloud service instead
# Cloud service has better anti-fingerprinting

注: これは、デフォルトの docker-compose 設定を使用するセルフホスト版 v2.3.0 以降に影響します。次の警告が表示されます:「⚠️ 警告:プロキシサーバーが指定されていません。IP アドレスがブロックされる可能性があります。」


Issue #10: キャッシュパフォーマンスのベストプラクティス(コミュニティ提供)

非効率な方法: キャッシュを活用しないと、リクエストが 500% 遅くなる可能性があります 出典: 高速スクレイピングのドキュメント | ブログ記事 重要な理由: v2 以降、maxAge のデフォルト値は 2 日ですが、用途によっては異なる戦略が必要です 防止策: コンテンツの種類に応じた適切なキャッシュ戦略を使用してください

# Fresh data (real-time pricing, stock prices)
doc = app.scrape(url, formats=["markdown"], max_age=0)

# 10-minute cache (news, blogs)
doc = app.scrape(url, formats=["markdown"], max_age=600000)  # milliseconds

# Use default cache (2 days) for static content
doc = app.scrape(url, formats=["markdown"])  # maxAge defaults to 172800000

# Don't store in cache (one-time scrape)
doc = app.scrape(url, formats=["markdown"], store_in_cache=False)

# Require minimum age before re-scraping (v2.7.0+)
doc = app.scrape(url, formats=["markdown"], min_age=3600000)  # 1 hour minimum

パフォーマンスへの影響:

  • キャッシュ済みの応答:ミリ秒
  • 新規スクレイピング:秒
  • 速度の差:最大 500%

パッケージのバージョン

パッケージバージョン最終確認日
firecrawl-py4.13.0+2026-01-20
@mendable/firecrawl-js4.11.1+2026-01-20
API バージョンv2現行

公式ドキュメント


トークン削減率: 手動での統合と比べて約65% エラー防止: 文書化された問題10件(v2への移行、ステルスモードの料金、ジョブステータスの競合状態、DNS エラー、ボット検出時の課金、セルフホスト版の制限、キャッシュの最適化) 本番環境対応: はい 最終確認日: 2026-01-21 | スキルバージョン: 2.0.0 | 変更点: TIER 1-2 の調査結果に基づき、文書化された10件のエラーを含む「既知の問題の防止」セクションを追加。v2 への移行ガイダンスを追加。ステルスモードの料金変更と統一された課金モデルを文書化

コメント