
Change Tracking (変更追跡) は、ページの現在のコンテンツを最後にスクレイプしたときの状態と比較します。ページが新規か、変更なし (unchanged) か、変更あり (modified) かを検出するために changeTracking を formats 配列に追加し、必要に応じて「何が変わったか」の構造化された差分を取得できます。
/scrape、/crawl、/batch/scrapeで動作- 2 つの diff モード: 行単位の変更用
git-diff、フィールド単位の比較用json - チームごとにスコープされ、必要に応じて渡したタグごとにもスコープ可能
仕組み#
changeTracking が有効なすべてのスクレイプ実行時にスナップショットが保存され、その URL に対する前回のスナップショットと比較されます。スナップショットは永続的に保存され、有効期限がないため、スクレイプ間でどれだけ時間が空いても比較結果の精度が維持されます。
| Scrape | Result |
|---|---|
| First time | changeStatus: "new" (前のバージョンが存在しない) |
| Content unchanged | changeStatus: "same" (コンテンツに変更なし) |
| Content modified | changeStatus: "changed" (コンテンツが変更され、差分データあり) |
| Page removed | changeStatus: "removed" (ページが削除された) |
レスポンスには、changeTracking オブジェクト内に次のフィールドが含まれます。
| Field | Type | Description |
|---|---|---|
previousScrapeAt | string | null | 前回スクレイプのタイムスタンプ (初回スクレイプ時は null) |
changeStatus | string | "new"、"same"、"changed"、または "removed" |
visibility | string | "visible" (リンクやサイトマップ経由で検出可能) または "hidden" (URL は有効だが、もはやリンクされていない) |
diff | object | undefined | 行レベルの差分 (ステータスが "changed" のときに git-diff モードでのみ含まれる) |
json | object | undefined | フィールドレベルの比較 (ステータスが "changed" のときに json モードでのみ含まれる) |
基本的な使い方#
formats 配列には markdown と changeTracking の両方を指定します。変更追跡ではページの markdown コンテンツを比較するため、markdown フォーマットは必須です。
レスポンス#
初回のスクレイプでは、changeStatus は "new"、previousScrapeAt は null になります。
以降のスクレイプでは、changeStatus にコンテンツが変更されたかどうかが反映されます。
Git-diff モード#
git-diff モードは、git diff に似た形式で行単位の変更差分を返します。formats 配列内に modes: ["git-diff"] を含むオブジェクトを指定します。
レスポンス#
diff オブジェクトには、プレーンテキスト形式の diff と構造化された JSON 表現の両方が含まれます。
構造化された diff.json オブジェクトには次の要素が含まれます:
files: 変更されたファイルの配列 (通常はウェブページごとに1つ)chunks: ファイル内の変更箇所を表すセクションchanges: 個々の行ごとの変更。type("add"、"del"、または"normal") 、行番号 (ln) 、およびcontentを含む
JSONモード#
json モードは、定義したスキーマを使って、ページの現在のバージョンと前回のバージョンの両方から特定のフィールドを抽出します。これは、ページ全体の差分を解析することなく、価格、在庫レベル、メタデータなどの構造化データの変更を追跡するのに便利です。
抽出するフィールドを定義する schema とともに modes: ["json"] を渡します:
レスポンス#
スキーマ内の各フィールドは、previous と current の値を含めて返されます。
また、任意の prompt を渡して、スキーマとあわせて LLM による抽出をガイドすることもできます。
JSONモードは LLM 抽出を使用し、1ページあたり5クレジットかかります。基本的な変更追跡と git-diff モードには追加コストは発生しません。
デフォルトでは、変更追跡 (change tracking) は、チームによって同じ URL に対して実行された直近のスクレイプ結果と比較します。タグを使うと、同じ URL に対して別々の追跡履歴を維持できます。同じページを異なる間隔や異なるコンテキストで監視したい場合に便利です。
change tracking を利用したクロール#
サイト全体の変更を監視するために、クロール処理に change tracking を追加します。scrapeOptions 内で changeTracking フォーマットを指定します。
changeTracking を使ったバッチスクレイプ#
特定の URL 群を監視するには、batch scrape を使用します:
変更追跡のスケジュール設定#
変更追跡は、定期的にスクレイピングを行う場合に最も効果を発揮します。cron、クラウドスケジューラ、ワークフローツールなどで自動化できます。
Cronジョブ#
URLをスクレイピングし、変更を検知したらアラートを送るスクリプトを作成します。
crontab -e でスケジュールを設定します:
| スケジュール | 表現 |
|---|---|
| 毎時 | 0 * * * * |
| 6時間ごと | 0 */6 * * * |
| 毎日午前9時 | 0 9 * * * |
| 毎週月曜日午前8時 | 0 8 * * 1 |
クラウドおよびサーバーレスのスケジューラー#
- AWS: EventBridge ルールによる Lambda 関数のトリガー
- GCP: Cloud Scheduler による Cloud Function のトリガー
- Vercel / Netlify: Cron によってトリガーされるサーバーレス関数
- GitHub Actions:
scheduleおよびcronトリガーによるスケジュールされたワークフロー
ワークフロー自動化#
n8n、Zapier、Make のようなノーコードプラットフォームから、スケジュール実行で Firecrawl API を呼び出し、結果を Slack、メール、データベースなどに送信できます。ワークフロー自動化ガイドも参照してください。
Webhooks#
crawl や batch scrape のような非同期処理では、ポーリングするのではなく webhooks を使用して、到着しだい changeTracking の結果を受け取れます。
crawl.page イベントのペイロードには、各ページごとに changeTracking オブジェクトが含まれています。
Webhook の構成の詳細 (ヘッダー、メタデータ、イベント、再試行、署名検証) については、Webhook ドキュメントを参照してください。
設定リファレンス#
changeTracking フォーマットオブジェクトを渡すときに利用できるオプション一覧:
| Parameter | Type | Default | Description |
|---|---|---|---|
type | string | (required) | "changeTracking" でなければなりません |
modes | string[] | [] | 有効化する差分モード: "git-diff"、"json"、またはその両方 |
schema | object | (none) | フィールド単位の比較用の JSON Schema (json モードでは必須) |
prompt | string | (none) | LLM による抽出を制御するためのカスタムプロンプト (json モードで使用) |
tag | string | null | 独立したトラッキング履歴用の識別子 |
データモデル#
重要な詳細#
changeTracking を使う場合は、必ず markdown フォーマットも同時に指定してください。変更追跡は、ページをその markdown コンテンツに基づいて比較します。
- スナップショットの保持: スナップショットは永続的に保存され、有効期限はありません。前回のスクレイプから数か月後に再度スクレイプを実行しても、以前のスナップショットと正しく比較されます。
- スコープ: 比較はチーム内に限定されます。任意の URL をチームとして初めてスクレイプした場合は、他のユーザーが同じ URL をスクレイプしていても
"new"が返されます。 - URL のマッチング: 過去のスクレイプは、ソース URL、チーム ID、
markdownフォーマット、tagが完全一致したものと照合されます。スクレイプ間で URL を一貫させてください。 - パラメータの一貫性: 同じ URL に対して異なる
includeTags、excludeTags、onlyMainContent設定を使うと、比較結果が信頼できなくなります。 - 比較アルゴリズム: このアルゴリズムは、空白やコンテンツ順序の変化に強く設計されています。CAPTCHA やボット対策によるランダム化に対応するため、iframe のソース URL は無視されます。
- キャッシュ:
changeTrackingを指定したリクエストは、インデックス キャッシュをバイパスします。maxAgeパラメータは無視されます。 - エラー処理: レスポンス内の
warningフィールドを監視し、changeTrackingオブジェクトが存在しない可能性を考慮して処理してください (これは、前回スクレイプのデータベース検索がタイムアウトした場合に発生することがあります) 。
料金#
| モード | 料金 |
|---|---|
| 基本的な変更追跡 | 追加料金なし (通常のスクレイプクレジットを使用) |
git-diff モード | 追加料金なし |
json モード | 1ページあたり 5 クレジット |
Firecrawl API キーが必要な AI エージェントですか?自動オンボーディング手順については、firecrawl.dev/agent-onboarding/SKILL.md を参照してください。

