> ## Documentation Index
> Fetch the complete documentation index at: https://docs.firecrawl.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# モニタリング

> 定期的なチェックを設定し、変更を検出して、webhook またはメールで通知を受け取ります

Firecrawl のモニタリングは定期的なチェックを実行し、何かが変化したり新たに現れたりしたときに、あなたまたは agent に通知します。`/monitor` を使うと、[既知のページを監視](/ja/features/monitoring-page)したり、[スケジュールに従って Web サイトをクロール](/ja/features/monitoring-website)したり、ゴールに一致する新しい結果を見つけるために[常時稼働の Web 検索を実行](/ja/features/monitoring-web-scale)したりできます。

すべてのモニタータイプは同じワークフローを共有しています。1 つ以上の ターゲット を選択し、スケジュールを設定し、任意の自然言語のゴールを追加して、重要な変化があったときに webhook またはメール通知を受け取ります。このページでは共通の構成について説明します。ターゲット 固有の設定と例については、[Page](/ja/features/monitoring-page)、[Website](/ja/features/monitoring-website)、または [Web 全体規模の監視](/ja/features/monitoring-web-scale) のモニタリングページを参照してください。

<CardGroup cols={3}>
  <Card title="ページ監視" icon="file-lines" href="/ja/features/monitoring-page">
    1 つ以上の既知の URL を監視し、各スクレイピング結果を前回のスナップショットと diff し、意味のあるページ変更があれば alert を送信します。
  </Card>

  <Card title="Web サイト監視" icon="spider" href="/ja/features/monitoring-website">
    スケジュールに従ってサイトをクロールし、追加、変更、削除されたページを検出して、webhook または受信トレイに通知します。
  </Card>

  <Card title="Web 全体規模の監視" icon="globe" href="/ja/features/monitoring-web-scale">
    定期的に Web 検索を実行し、ゴールに一致する新しい結果が現れたときに alert を送信します。
  </Card>
</CardGroup>

各チェックでは、ページ単位の結果が `same`、`new`、`changed`、`removed`、`error` として記録されます。監視対象の各ページの処理完了時に webhook を受け取ることも、チェックが完了するたびに webhook を受け取ることも、変更やエラーが発生した際にメールで要約を受け取ることもでき、これらを自由に組み合わせることもできます。

<div className="firecrawl-cta-box" style={{ opacity: 0.6 }}>
  <div style={{ display: "flex", alignItems: "flex-start", gap: "8px", marginBottom: "8px" }}>
    <Icon icon="sack-dollar" color="#9ca3af" size={22} />

    <div className="firecrawl-cta-title" style={{ margin: 0, color: "#9ca3af" }}>
      <span>終了: /monitor フィードバック報酬</span>
    </div>
  </div>

  <p className="firecrawl-cta-description">
    報酬の対象となるすべてのインタビュー参加者には、すでにご連絡しています。今後の報酬キャンペーンはドキュメント内でご確認ください！
  </p>
</div>

<div id="targets">
  ## ターゲット
</div>

すべてのモニターには 1 つ以上の **ターゲット** があります。ターゲットの種類によって、各チェックで実行される内容が決まります:

| ターゲット    | 監視対象                 | セットアップ                                           |
| -------- | -------------------- | ------------------------------------------------ |
| `scrape` | 指定した既知の URL          | [ページ監視](/ja/features/monitoring-page)            |
| `crawl`  | クロールによって検出されたすべてのページ | [Web サイト監視](/ja/features/monitoring-website)     |
| `search` | Web 全体の新しい検索結果       | [Web 全体規模の監視](/ja/features/monitoring-web-scale) |

各モニターは 1～50 個のターゲットを受け付け、1 つのモニター内で異なる種類のターゲットを組み合わせることもできます。`retentionDays` のデフォルトは `30` で、最大 `365` まで設定できます。

create の各呼び出しでは、正規化された cron、計算済みの `nextRunAt`、および `estimatedCreditsPerMonth` を含む新しいモニターが返されます。判定が有効な場合、`estimatedCreditsPerMonth` は上限見積もりになります。これは、判定クレジットが実際に判定された変更ページに対してのみ課金されるためです:

```json Response theme={null}
{
  "success": true,
  "data": {
    "id": "019df960-06e7-7383-9d89-82c0113dc31a",
    "name": "Hacker News AI monitor",
    "status": "active",
    "schedule": {
      "cron": "*/30 * * * *",
      "timezone": "UTC"
    },
    "nextRunAt": "2026-05-17T16:00:00.000Z",
    "lastRunAt": null,
    "currentCheckId": null,
    "goal": "Alert when a new Hacker News story related to AI enters the top 10. Ignore changes to stories that are not about AI. Do not alert on changes outside the top 10.",
    "judgeEnabled": true,
    "targets": [
      {
        "id": "019df960-09bb-7c11-8001-1f12f50ab1c2",
        "type": "scrape",
        "urls": ["https://news.ycombinator.com"]
      }
    ],
    "webhook": null,
    "notification": {
      "email": {
        "enabled": true,
        "recipients": ["alerts@example.com"],
        "includeDiffs": true
      }
    },
    "retentionDays": 30,
    "estimatedCreditsPerMonth": 2880,
    "lastCheckSummary": null,
    "createdAt": "2026-05-17T15:30:00.000Z",
    "updatedAt": "2026-05-17T15:30:00.000Z"
  }
}
```

<div id="goals-and-judging">
  ## ゴールと判定
</div>

意味のある変更があったときだけ通知を受けたい場合は、平易な表現で `goal` を追加します。`goal` が指定されていて `judgeEnabled` が省略されている場合、Firecrawl は自動的に判定を有効にします。判定は変更のあったページで実行され、`meaningful`、`confidence`、`reason`、`meaningfulChanges` を含む `judgment` を返します。

ゴールの適用方法は ターゲット によって異なります。[page](/ja/features/monitoring-page) と [website](/ja/features/monitoring-website) のモニターでは変更されたページを判定し、[entire web-scale monitors](/ja/features/monitoring-web-scale#judging) では新しい各 search result を判定します。

変更の判定はまだ行わず、ゴールだけを保存したい場合は、`judgeEnabled: false` を使用します。判定が実行されるのは、モニター に `judgeEnabled` と空でない `goal` の両方が設定されている場合だけです。

<Note>
  `search` ターゲット (entire web-scale monitoring) では、`judgeEnabled: false` を設定しない限り `goal` が必要です。`scrape` と `crawl` ターゲット では 任意 です。
</Note>

<Note>
  各 チェック では、常に元となるスクレイピングまたはクロールの料金が発生します。判定が有効な場合、judge は検証した変更済みページごとに 1 クレジット を追加で消費します。変更されたページがない チェック では、judge クレジット は消費されません。
</Note>

適切なゴールは、短く明確であることが重要です。何を alert のトリガーにするかを示し、top N、価格、役割の種類、会社、地域、トピック、status、またはエンティティなどの対象範囲も明記してください。除外条件は、意図に含まれる場合にのみ追加します。ゴールが広い場合は、その広さを保ってください。たとえば、"any change" の場合は、変更を見逃すようなノイズ除去の絞り込みを加えるべきではありません。

たとえば、次のような goal を持つ モニター では:

```text theme={null}
AIに関連する新しいHacker Newsのストーリーがトップ10に入ったときに通知する。AIに関係のないストーリーの変更は無視する。トップ10外の変更には通知しない。
```

一致するストーリーが監視対象に入ると、このような `monitor.page` webhook が生成されることがあります:

```json monitor.page theme={null}
{
  "success": true,
  "type": "monitor.page",
  "id": "019df960-5f2a-75fb-a98b-bd2d32ca67d4",
  "webhookId": "f1e2d3c4-0000-0000-0000-000000000000",
  "data": [
    {
      "monitorId": "019df960-06e7-7383-9d89-82c0113dc31a",
      "checkId": "019df960-5f2a-75fb-a98b-bd2d32ca67d4",
      "url": "https://news.ycombinator.com",
      "status": "changed",
      "previousScrapeId": "019df94f-82c3-7e41-81f0-00c72b2d9c52",
      "currentScrapeId": "019df960-73ee-7ac2-97a9-fb0e442c21f1",
      "error": null,
      "isMeaningful": true,
      "judgment": {
        "meaningful": true,
        "confidence": "high",
        "reason": "A new AI-related story entered the Hacker News top 10.",
        "meaningfulChanges": [
          {
            "type": "added",
            "after": "4. Show HN: Open-source AI coding assistant",
            "reason": "This is a new AI-related story inside the top 10."
          }
        ]
      },
      "diff": {
        "text": "--- previous\n+++ current\n@@ -1,5 +1,6 @@\n # Hacker News\n 1. Database internals for beginners\n 2. A new approach to CSS\n 3. Building reliable queues\n+4. Show HN: Open-source AI coding assistant\n"
      }
    }
  ],
  "metadata": {
    "environment": "production"
  }
}
```

<div id="schedules">
  ## スケジュール
</div>

スケジュールは、cron またはシンプルな自然言語テキストで指定できます。

<CodeGroup>
  ```json Cron theme={null}
  {
    "schedule": {
      "cron": "*/30 * * * *",
      "timezone": "UTC"
    }
  }
  ```

  ```json Text theme={null}
  {
    "schedule": {
      "text": "every 30 minutes",
      "timezone": "UTC"
    }
  }
  ```
</CodeGroup>

サポートされている自然言語の例:

* `every 30 minutes`
* `every 15 minutes starting at :07`
* `hourly`
* `every 2 hours`
* `daily`
* `daily at 9:00`
* `daily at 9am`
* `daily at 5:30 PM`
* `weekly`

最小間隔は 5 分です。API レスポンスでは常に正規化された cron 式が返されます。テキストによるスケジュールでは、`timezone` が `daily at 9am` のような表現の実行時刻を制御します。テキストによるスケジュールは、cron に変換される前にモニター ID ごとに分散されるため、多数のモニターがまったく同じタイミングで実行されることはありません。

<div id="change-tracking">
  ## 変更追跡
</div>

[Page](/ja/features/monitoring-page) と [Web サイト](/ja/features/monitoring-website) のモニターでは、デフォルトで各ページの Markdown の差分を比較し、`same`、`changed`、`new`、`removed`、`error` のいずれかを返します。**特定の構造化フィールド** (価格、見出し、在庫フラグ、リスト内の項目など) の変更を検出したい場合は、対象の `scrapeOptions` に `modes: ["json"]` を指定した `changeTracking` フォーマットを追加して、JSONモードの変更追跡を有効にします。

<Note>
  変更追跡は `scrape` ターゲットと `crawl` ターゲットに適用されます。Web スケール全体の (`search`) モニターは、既知のページの差分を比較するのではなく、新しい結果が見つかったときにアラートを送信します。詳しくは [ステータスと重複排除](/ja/features/monitoring-web-scale#statuses-and-dedup) を参照してください。
</Note>

<div id="markdown-mode-default">
  ### Markdown モード (デフォルト)
</div>

`scrapeOptions.formats` が `["markdown"]` のみの場合、チェック レスポンス内の変更された各ページには、unified 形式のテキスト差分と、[parseDiff](https://github.com/sergeyt/parse-diff) スタイルの AST が含まれます。

```json Markdown-mode diff theme={null}
{
  "diff": {
    "text": "--- previous\n+++ current\n@@ -1,3 +1,3 @@\n # Pricing\n-Starter — $19/mo\n+Starter — $24/mo\n",
    "json": {
      "files": [
        {
          "from": "previous",
          "to": "current",
          "chunks": [
            {
              "content": "@@ -1,3 +1,3 @@",
              "changes": []
            }
          ]
        }
      ]
    }
  }
}
```

<div id="json-mode">
  ### JSONモード
</div>

`modes: ["json"]` を指定した `changeTracking` フォーマットを、注目するフィールドを定義した JSON schema (または `prompt`) とあわせて渡します。Firecrawl はチェックのたびにその JSON を抽出し、フィールドパスをキーとする**フィールド単位の差分**を出力します。さらに、利用側で元のスクレイピング結果を再取得しなくて済むよう、現在の抽出結果全体を含む `snapshot.json` も出力します。

<CodeGroup>
  ```python Python theme={null}
  from firecrawl import Firecrawl
  from pydantic import BaseModel
  from typing import List

  firecrawl = Firecrawl(api_key="fc-YOUR-API-KEY")


  class Plan(BaseModel):
      name: str
      price: str
      features: List[str]


  class Pricing(BaseModel):
      plans: List[Plan]


  monitor = firecrawl.create_monitor(
      name="Pricing monitor",
      schedule={"text": "hourly", "timezone": "UTC"},
      goal="Notify me when a pricing tier, price, or headline feature changes",
      targets=[
          {
              "type": "scrape",
              "urls": ["https://example.com/pricing"],
              "scrapeOptions": {
                  "formats": [
                      {
                          "type": "changeTracking",
                          "modes": ["json"],
                          "prompt": "Extract pricing tiers and headline features for each plan.",
                          "schema": Pricing.model_json_schema(),
                      }
                  ]
              },
          }
      ],
      notification={
          "email": {
              "enabled": True,
              "recipients": ["alerts@example.com"],
              "includeDiffs": True,
          }
      },
  )

  print(monitor.id)
  ```

  ```js Node theme={null}
  import Firecrawl from "@mendable/firecrawl-js";
  import { z } from "zod";

  const firecrawl = new Firecrawl({ apiKey: "fc-YOUR-API-KEY" });

  const pricingSchema = z.object({
    plans: z.array(
      z.object({
        name: z.string(),
        price: z.string(),
        features: z.array(z.string()),
      }),
    ),
  });

  const monitor = await firecrawl.createMonitor({
    name: "Pricing monitor",
    schedule: { text: "hourly", timezone: "UTC" },
    goal: "Notify me when a pricing tier, price, or headline feature changes",
    notification: {
      email: {
        enabled: true,
        recipients: ["alerts@example.com"],
        includeDiffs: true,
      },
    },
    targets: [
      {
        type: "scrape",
        urls: ["https://example.com/pricing"],
        scrapeOptions: {
          formats: [
            {
              type: "changeTracking",
              modes: ["json"],
              prompt: "Extract pricing tiers and headline features for each plan.",
              schema: pricingSchema,
            },
          ],
        },
      },
    ],
  });

  console.log(monitor.id);
  ```

  ```bash cURL theme={null}
  curl -s -X POST "https://api.firecrawl.dev/v2/monitor" \
    -H "Authorization: Bearer $FIRECRAWL_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "name": "Pricing monitor",
      "schedule": {
        "text": "hourly",
        "timezone": "UTC"
      },
      "goal": "Notify me when a pricing tier, price, or headline feature changes",
      "notification": {
        "email": {
          "enabled": true,
          "recipients": ["alerts@example.com"],
          "includeDiffs": true
        }
      },
      "targets": [
        {
          "type": "scrape",
          "urls": ["https://example.com/pricing"],
          "scrapeOptions": {
            "formats": [
              {
                "type": "changeTracking",
                "modes": ["json"],
                "prompt": "Extract pricing tiers and headline features for each plan.",
                "schema": {
                  "type": "object",
                  "properties": {
                    "plans": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "name": { "type": "string" },
                          "price": { "type": "string" },
                          "features": {
                            "type": "array",
                            "items": { "type": "string" }
                          }
                        }
                      }
                    }
                  }
                }
              }
            ]
          }
        }
      ]
    }'
  ```
</CodeGroup>

差分の ペイロード では、抽出結果内の JSON パスがキーとして使われます。各値は `{previous, current}` のペアです。

```json JSON-mode diff theme={null}
{
  "diff": {
    "json": {
      "plans[0].price": {
        "previous": "$19/mo",
        "current": "$24/mo"
      },
      "plans[1].features[2]": {
        "previous": "10 GB storage",
        "current": "25 GB storage"
      }
    }
  },
  "snapshot": {
    "json": {
      "plans": [
        {
          "name": "Starter",
          "price": "$24/mo",
          "features": ["Up to 3 users", "Basic analytics", "Email support"]
        },
        {
          "name": "Pro",
          "price": "$49/mo",
          "features": ["Unlimited users", "Advanced analytics", "25 GB storage"]
        }
      ]
    }
  }
}
```

<Note>
  追跡対象のフィールドに変更がなく、周囲の Markdown だけが変わった場合でも、git-diff も有効にしない限り (下記の mixed mode を参照) 、JSONモードのモニターは `same` を返します。この差分は、schema 内のフィールドだけに焦点を当てています。
</Note>

<div id="mixed-mode-json-git-diff">
  ### Mixedモード (JSON + git-diff)
</div>

構造化されたフィールド単位の差分 **と** 生の markdown の unified diff の両方が必要な場合は、両方のモードを指定します。

```json Mixed target (JSON + git-diff) theme={null}
{
  "type": "scrape",
  "urls": ["https://example.com/pricing"],
  "scrapeOptions": {
    "formats": [
      {
        "type": "changeTracking",
        "modes": ["json", "git-diff"],
        "prompt": "Extract pricing tiers and headline features for each plan.",
        "schema": {
          "type": "object",
          "properties": {
            "plans": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "name": { "type": "string" },
                  "price": { "type": "string" }
                }
              }
            }
          }
        }
      }
    ]
  }
}
```

すると、チェック レスポンスには `snapshot.json` の抽出結果に加えて、`diff.text` (markdown のサイドカー) と `diff.json` (フィールド単位の差分) の両方が含まれます。

```json Mixed-mode diff (JSON + git-diff) theme={null}
{
  "diff": {
    "text": "--- previous\n+++ current\n@@ -1,3 +1,3 @@\n # Pricing\n-Starter — $19/mo\n+Starter — $24/mo\n",
    "json": {
      "plans[0].price": {
        "previous": "$19/mo",
        "current": "$24/mo"
      }
    }
  },
  "snapshot": {
    "json": {
      "plans": [
        { "name": "Starter", "price": "$24/mo" },
        { "name": "Pro", "price": "$49/mo" }
      ]
    }
  }
}
```

mixed-mode のページでは、**いずれか** 一方でも変更があれば `changed` が報告されます。

<div id="notifications">
  ## 通知
</div>

<div id="webhooks">
  ### Webhooks
</div>

モニター に `webhook` が設定されている場合、Firecrawl は 2 つの モニター event を送信できます。

* `monitor.page`: 監視対象の各ページのスクレイピングが scrape worker で完了するたびに送信されます。
* `monitor.check.completed`: チェック全体の整合処理が完了した後に送信されます。チェック の status と集計数が含まれます。ページ単位の結果を確認するには、`monitor.page` event または モニター check API を使用してください。

`monitor.page` には、変更されたページに対して意味のある変更の判定が実行された場合、`isMeaningful` と `judgment` が含まれます。

```json Webhook config theme={null}
{
  "webhook": {
    "url": "https://example.com/webhooks/firecrawl",
    "headers": {
      "Authorization": "Bearer your-secret"
    },
    "metadata": {
      "environment": "production"
    },
    "events": ["monitor.page", "monitor.check.completed"]
  }
}
```

`monitor.page` の ペイロード:

```json monitor.page theme={null}
{
  "success": true,
  "type": "monitor.page",
  "id": "019df960-5f2a-75fb-a98b-bd2d32ca67d4",
  "webhookId": "f1e2d3c4-0000-0000-0000-000000000000",
  "data": [
    {
      "monitorId": "019df960-06e7-7383-9d89-82c0113dc31a",
      "checkId": "019df960-5f2a-75fb-a98b-bd2d32ca67d4",
      "url": "https://example.com/blog",
      "status": "changed",
      "previousScrapeId": "019df94f-82c3-7e41-81f0-00c72b2d9c52",
      "currentScrapeId": "019df960-73ee-7ac2-97a9-fb0e442c21f1",
      "error": null,
      "isMeaningful": true,
      "judgment": {
        "meaningful": true,
        "confidence": "high",
        "reason": "The page headline changed to announce a new release cadence.",
        "meaningfulChanges": [
          {
            "type": "changed",
            "before": "Welcome to our weekly update.",
            "after": "Welcome to our weekly update — now with daily releases!",
            "reason": "The headline changed in a way that matches the monitor goal."
          }
        ]
      },
      "diff": {
        "text": "--- previous\n+++ current\n@@ -1,3 +1,3 @@\n # Latest posts\n-Welcome to our weekly update.\n+Welcome to our weekly update — now with daily releases!\n"
      }
    }
  ],
  "metadata": {
    "environment": "production"
  }
}
```

`monitor.check.completed` の ペイロード:

```json monitor.check.completed theme={null}
{
  "success": true,
  "type": "monitor.check.completed",
  "id": "019df960-5f2a-75fb-a98b-bd2d32ca67d4",
  "webhookId": "f1e2d3c4-0001-0000-0000-000000000000",
  "data": [
    {
      "monitorId": "019df960-06e7-7383-9d89-82c0113dc31a",
      "checkId": "019df960-5f2a-75fb-a98b-bd2d32ca67d4",
      "status": "completed",
      "summary": {
        "totalPages": 2,
        "same": 1,
        "changed": 1,
        "new": 0,
        "removed": 0,
        "error": 0
      }
    }
  ],
  "metadata": {
    "environment": "production"
  }
}
```

`success` は、ページエラーなしで チェック が完了した場合に `true` です。失敗した チェック または部分的な チェック の場合は `false` となり、利用可能であれば `error` に失敗理由が含まれます。

<div id="email">
  ### メール
</div>

メールの要約は、チェックで変更・新規追加・削除・エラーのいずれかに該当するページがあった場合にのみ送信されます。

```json Email config theme={null}
{
  "notification": {
    "email": {
      "enabled": true,
      "recipients": ["alerts@example.com"],
      "includeDiffs": true
    }
  }
}
```

モニターでゴールが設定され、判定が有効になっている場合、メールの要約では重要な変更ページが優先されます。変更されたすべてのページがノイズと判定され、新規追加・削除・エラーに該当するページもない場合、メールは送信されません。

`recipients` を省略すると、Firecrawl はシステムアラートメールの受信対象となるチームメンバーに送信します。
明示的な受信者は最大 25 件まで設定できます。

<div id="recipient-confirmation-process">
  #### 受信者の確認手順
</div>

新しい受信者がモニターに追加されると、Firecrawl は確認リンクを含むメールを送信します。これにより、その受信者がそのモニターの通知を受け取ることに明確に同意したことを確認できます。受信者がすでにチームのメンバーである場合は、確認は不要です。

<div id="check-results">
  ## チェック結果
</div>

`GET /v2/monitor/{monitorId}/checks` でチェックの一覧を取得し、`GET /v2/monitor/{monitorId}/checks/{checkId}` で個別のチェック詳細を確認できます。SDKs はデフォルトで自動的にページネーションに対応しています。

<CodeGroup>
  ```python Python theme={null}
  from firecrawl import Firecrawl

  firecrawl = Firecrawl(api_key="fc-YOUR-API-KEY")

  check = firecrawl.get_monitor_check(monitor_id, check_id, limit=25, status="changed")

  for page in check.pages:
      print(page.url, page.status)

      if page.judgment:
          print(page.judgment.meaningful, page.judgment.reason)

      if page.diff and page.diff.text:
          print(page.diff.text)

      if page.snapshot and page.snapshot.json:
          print(page.snapshot.json)
  ```

  ```js Node theme={null}
  import Firecrawl from "@mendable/firecrawl-js";

  const firecrawl = new Firecrawl({ apiKey: "fc-YOUR-API-KEY" });

  const check = await firecrawl.getMonitorCheck(monitorId, checkId, {
    limit: 25,
    status: "changed",
  });

  for (const page of check.pages) {
    console.log(page.url, page.status);

    if (page.judgment) {
      console.log(page.judgment.meaningful, page.judgment.reason);
    }

    if (page.diff?.text) {
      console.log(page.diff.text);
    }

    if (page.snapshot?.json) {
      console.log(page.snapshot.json);
    }
  }
  ```

  ```bash cURL theme={null}
  curl "https://api.firecrawl.dev/v2/monitor/$MONITOR_ID/checks/$CHECK_ID?limit=25&status=changed" \
    -H "Authorization: Bearer $FIRECRAWL_API_KEY"
  ```
</CodeGroup>

チェック一覧は、チェックの `status` で絞り込めます: `queued`、`running`、`completed`、`failed`、`partial`、`skipped_overlap`。

チェック詳細のレスポンスには、`estimatedCredits`、`actualCredits`、集計件数、およびページネーションされた `pages` 配列が含まれます。`estimatedCredits` はそのチェックに対して上限として予約されるクレジット数で、`actualCredits` は Firecrawl が変更されたページ数と判定が必要なページ数を把握した後に確定する最終的な請求量です。結果の次のページを取得するには、トップレベルの `next` URL を使用します。これはクロールのページネーションと同じです。ページは `status` で絞り込めます: `same`、`new`、`changed`、`removed`、`error`。変更された各ページにはインラインの `diff` データが含まれます。JSONモードのモニターによるページには、現在の抽出結果を含む `snapshot` も含まれます。

<Tabs>
  <Tab title="Markdownモード">
    ```json Markdown-mode response theme={null}
    {
      "success": true,
      "next": "https://api.firecrawl.dev/v2/monitor/019df960-06e7-7383-9d89-82c0113dc31a/checks/019df960-5f2a-75fb-a98b-bd2d32ca67d4?skip=25&limit=25",
      "data": {
        "id": "019df960-5f2a-75fb-a98b-bd2d32ca67d4",
        "monitorId": "019df960-06e7-7383-9d89-82c0113dc31a",
        "status": "completed",
        "estimatedCredits": 2,
        "actualCredits": 2,
        "summary": {
          "totalPages": 1,
          "same": 0,
          "changed": 1,
          "new": 0,
          "removed": 0,
          "error": 0
        },
        "pages": [
          {
            "id": "019df960-7708-7c62-a5dc-6206f16ac122",
            "targetId": "019df960-09bb-7c11-8001-1f12f50ab1c2",
            "url": "https://example.com/blog",
            "status": "changed",
            "previousScrapeId": "019df94f-82c3-7e41-81f0-00c72b2d9c52",
            "currentScrapeId": "019df960-73ee-7ac2-97a9-fb0e442c21f1",
            "statusCode": 200,
            "error": null,
            "metadata": {
              "title": "Example Blog",
              "creditsUsed": 1
            },
            "judgment": {
              "meaningful": true,
              "confidence": "high",
              "reason": "The page headline changed to announce a new release cadence.",
              "meaningfulChanges": [
                {
                  "type": "changed",
                  "before": "Welcome to our weekly update.",
                  "after": "Welcome to our weekly update — now with daily releases!",
                  "reason": "The headline changed in a way that matches the monitor goal."
                }
              ]
            },
            "createdAt": "2026-05-17T15:35:00.000Z",
            "diff": {
              "text": "--- previous\n+++ current\n@@ -1,3 +1,3 @@\n # Latest posts\n-Welcome to our weekly update.\n+Welcome to our weekly update — now with daily releases!\n",
              "json": {
                "files": [
                  {
                    "from": "previous",
                    "to": "current",
                    "chunks": []
                  }
                ]
              }
            }
          }
        ],
        "next": "https://api.firecrawl.dev/v2/monitor/019df960-06e7-7383-9d89-82c0113dc31a/checks/019df960-5f2a-75fb-a98b-bd2d32ca67d4?skip=25&limit=25"
      }
    }
    ```
  </Tab>

  <Tab title="JSONモード">
    ```json JSON-mode response theme={null}
    {
      "success": true,
      "data": {
        "id": "019df960-5f2a-75fb-a98b-bd2d32ca67d4",
        "monitorId": "019df960-06e7-7383-9d89-82c0113dc31a",
        "status": "completed",
        "estimatedCredits": 2,
        "actualCredits": 2,
        "summary": {
          "totalPages": 1,
          "same": 0,
          "changed": 1,
          "new": 0,
          "removed": 0,
          "error": 0
        },
        "pages": [
          {
            "id": "019df960-7708-7c62-a5dc-6206f16ac122",
            "targetId": "019df960-09bb-7c11-8001-1f12f50ab1c2",
            "url": "https://example.com/pricing",
            "status": "changed",
            "previousScrapeId": "019df94f-82c3-7e41-81f0-00c72b2d9c52",
            "currentScrapeId": "019df960-73ee-7ac2-97a9-fb0e442c21f1",
            "statusCode": 200,
            "error": null,
            "metadata": {
              "title": "Pricing",
              "creditsUsed": 1
            },
            "judgment": {
              "meaningful": true,
              "confidence": "high",
              "reason": "The Starter plan price and Pro storage limit changed.",
              "meaningfulChanges": [
                {
                  "type": "changed",
                  "before": "$19/mo",
                  "after": "$24/mo",
                  "reason": "The Starter plan price changed."
                },
                {
                  "type": "changed",
                  "before": "10 GB storage",
                  "after": "25 GB storage",
                  "reason": "The Pro storage limit changed."
                }
              ]
            },
            "createdAt": "2026-05-17T15:35:00.000Z",
            "diff": {
              "json": {
                "plans[0].price": {
                  "previous": "$19/mo",
                  "current": "$24/mo"
                },
                "plans[1].features[2]": {
                  "previous": "10 GB storage",
                  "current": "25 GB storage"
                }
              }
            },
            "snapshot": {
              "json": {
                "plans": [
                  {
                    "name": "Starter",
                    "price": "$24/mo",
                    "features": ["Up to 3 users", "Basic analytics", "Email support"]
                  },
                  {
                    "name": "Pro",
                    "price": "$49/mo",
                    "features": ["Unlimited users", "Advanced analytics", "25 GB storage"]
                  }
                ]
              }
            }
          }
        ]
      }
    }
    ```
  </Tab>

  <Tab title="Mixedモード">
    ```json Mixed-mode response (JSON + git-diff) theme={null}
    {
      "success": true,
      "data": {
        "id": "019df960-5f2a-75fb-a98b-bd2d32ca67d4",
        "monitorId": "019df960-06e7-7383-9d89-82c0113dc31a",
        "status": "completed",
        "estimatedCredits": 2,
        "actualCredits": 2,
        "summary": {
          "totalPages": 1,
          "same": 0,
          "changed": 1,
          "new": 0,
          "removed": 0,
          "error": 0
        },
        "pages": [
          {
            "id": "019df960-7708-7c62-a5dc-6206f16ac122",
            "targetId": "019df960-09bb-7c11-8001-1f12f50ab1c2",
            "url": "https://example.com/pricing",
            "status": "changed",
            "previousScrapeId": "019df94f-82c3-7e41-81f0-00c72b2d9c52",
            "currentScrapeId": "019df960-73ee-7ac2-97a9-fb0e442c21f1",
            "statusCode": 200,
            "error": null,
            "metadata": {
              "title": "Pricing",
              "creditsUsed": 1
            },
            "judgment": {
              "meaningful": true,
              "confidence": "high",
              "reason": "The Starter plan price changed.",
              "meaningfulChanges": [
                {
                  "type": "changed",
                  "before": "Starter — $19/mo",
                  "after": "Starter — $24/mo",
                  "reason": "The Starter plan price changed."
                }
              ]
            },
            "createdAt": "2026-05-17T15:35:00.000Z",
            "diff": {
              "text": "--- previous\n+++ current\n@@ -1,3 +1,3 @@\n # Pricing\n-Starter — $19/mo\n+Starter — $24/mo\n",
              "json": {
                "plans[0].price": {
                  "previous": "$19/mo",
                  "current": "$24/mo"
                }
              }
            },
            "snapshot": {
              "json": {
                "plans": [
                  { "name": "Starter", "price": "$24/mo" },
                  { "name": "Pro", "price": "$49/mo" }
                ]
              }
            }
          }
        ]
      }
    }
    ```
  </Tab>
</Tabs>

<div id="pricing">
  ## 料金
</div>

モニター にモニターごとの個別料金はありません。各チェックでは、実行されるスクレイピング、クロール、または検索の分のクレジットが消費され、さらに有意な変更の判定を有効にしている場合は、判定で有意な変更ありと認められたページごとに追加で 1 クレジットが消費されます。

| コンポーネント                                          | クレジット                                             |
| ------------------------------------------------ | ------------------------------------------------- |
| スクレイピングモニター                                      | URL ごとに、チェック 1 回あたり 1 クレジット                       |
| クロールモニター                                         | 検出されたページごとに、チェック 1 回あたり 1 クレジット                   |
| ウェブモニター                                          | 10 件の結果ごとに、チェック 1 回あたり 2 クレジット                    |
| ウェブモニターの判定                                       | AI 判定が有効な場合、判定された結果ごとに 1 クレジット (結果のスクレイピングと評価を含む) |
| 有意な変更の判定が有効                                      | 判定で変更ありと認められたページごとに追加で 1 クレジット                    |
| Format アドオン (JSON、PDF、question、enhanced mode など) | 単体の[scrape](/ja/features/scrape)と同じ               |

<div id="api-reference">
  ## API リファレンス
</div>

* [モニターを作成](/ja/api-reference/endpoint/monitor-create)
* [モニター一覧](/ja/api-reference/endpoint/monitor-list)
* [モニターを取得](/ja/api-reference/endpoint/monitor-get)
* [モニターを更新](/ja/api-reference/endpoint/monitor-update)
* [モニターを削除](/ja/api-reference/endpoint/monitor-delete)
* [モニターを実行](/ja/api-reference/endpoint/monitor-run)
* [モニターチェック一覧](/ja/api-reference/endpoint/monitor-checks-list)
* [モニターチェックを取得](/ja/api-reference/endpoint/monitor-check-get)
* [モニターページの webhookペイロード](/ja/api-reference/endpoint/webhook-monitor-page)
* [モニターチェック完了の webhookペイロード](/ja/api-reference/endpoint/webhook-monitor-check-completed)
