# Monitoramento de site (/pt-BR/features/monitoring-website)

<!-- agent-signals: reading_time_min: 3 · est_tokens: 1661 · updated: 2026-07-30 -->
Related: [Busca](/pt-BR/features/search.md), [Destaques da Busca](/pt-BR/features/search-highlights.md), [Índice de research](/pt-BR/features/research.md), [Scraping](/pt-BR/features/scrape.md), [Raspagem mais rápida](/pt-BR/features/fast-scraping.md), [Raspagem em lote](/pt-BR/features/batch-scrape.md)

O monitoramento de site acompanha um site inteiro em vez de uma lista fixa de URLs. Cada verificação executa um rastreamento para a `url` de alvo, faz scraping de cada página descoberta e compara o resultado com o último snapshot armazenado. Isso detecta páginas adicionadas, alteradas e removidas, não apenas edições em páginas que você já definiu. É a escolha certa para sites de documentação, blogs, changelogs, centrais de ajuda e sites de concorrentes.

Esta página aborda o alvo `crawl`. Agendamento, objetivos e avaliação, acompanhamento de alterações, notificações e preços são compartilhados entre todos os tipos de monitor. Veja a [visão geral do monitoramento](/pt-BR/features/monitoring).

<div id="create-a-website-monitor">
  ## Crie um monitor de site [#crie-um-monitor-de-site]
</div>

Crie um monitor com um alvo `crawl` para gerar um diff de cada página descoberta por um rastreamento a cada verificação:

<CodeGroup>
  <CodeBlockTabs defaultValue="Python" groupId="curl+node+python">
    <CodeBlockTabsList>
      <CodeBlockTabsTrigger value="Python">
        Python
      </CodeBlockTabsTrigger>

      <CodeBlockTabsTrigger value="Node">
        Node
      </CodeBlockTabsTrigger>

      <CodeBlockTabsTrigger value="cURL">
        cURL
      </CodeBlockTabsTrigger>
    </CodeBlockTabsList>

    <CodeBlockTab value="Python">
      ```python  
      from firecrawl import Firecrawl

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

      monitor = firecrawl.create_monitor(
          name="Docs monitor",
          schedule={"cron": "7-59/15 * * * *", "timezone": "UTC"},
          goal="Notify me when docs pages add, remove, or materially change API behavior",
          targets=[
              {
                  "type": "crawl",
                  "url": "https://example.com/docs",
                  "crawlOptions": {
                      "limit": 100,
                      "maxDiscoveryDepth": 3,
                  },
              }
          ],
          webhook={
              "url": "https://example.com/webhooks/firecrawl",
              "events": ["monitor.page", "monitor.check.completed"],
          },
      )

      print(monitor.id)
      ```
    </CodeBlockTab>

    <CodeBlockTab value="Node">
      ```js  
      import Firecrawl from "@mendable/firecrawl-js";

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

      const monitor = await firecrawl.createMonitor({
        name: "Docs monitor",
        schedule: { cron: "7-59/15 * * * *", timezone: "UTC" },
        webhook: {
          url: "https://example.com/webhooks/firecrawl",
          events: ["monitor.page", "monitor.check.completed"],
        },
        goal: "Notify me when docs pages add, remove, or materially change API behavior",
        targets: [
          {
            type: "crawl",
            url: "https://example.com/docs",
            crawlOptions: {
              limit: 100,
              maxDiscoveryDepth: 3,
            },
          },
        ],
      });

      console.log(monitor.id);
      ```
    </CodeBlockTab>

    <CodeBlockTab value="cURL">
      ```bash  
      curl -s -X POST "https://api.firecrawl.dev/v2/monitor" \
        -H "Authorization: Bearer $FIRECRAWL_API_KEY" \
        -H "Content-Type: application/json" \
        -d '{
          "name": "Docs monitor",
          "schedule": {
            "cron": "7-59/15 * * * *",
            "timezone": "UTC"
          },
          "webhook": {
            "url": "https://example.com/webhooks/firecrawl",
            "events": ["monitor.page", "monitor.check.completed"]
          },
          "goal": "Notify me when docs pages add, remove, or materially change API behavior",
          "targets": [
            {
              "type": "crawl",
              "url": "https://example.com/docs",
              "crawlOptions": {
                "limit": 100,
                "maxDiscoveryDepth": 3
              }
            }
          ]
        }'
      ```
    </CodeBlockTab>
  </CodeBlockTabs>
</CodeGroup>

<div id="crawl-target">
  ## Alvo de rastreamento [#alvo-de-rastreamento]
</div>

Um alvo `crawl` requer `type` e uma única `url`. Use `crawlOptions` para definir o comportamento do rastreamento e `scrapeOptions` para definir como cada página descoberta é extraída:

```json title="Crawl target"
{
  "type": "crawl",
  "url": "https://example.com/docs",
  "crawlOptions": {
    "limit": 100,
    "includePaths": ["/docs"]
  },
  "scrapeOptions": {
    "formats": ["markdown"]
  }
}
```

Campos comuns de `crawlOptions`:

* `limit`: Número máximo de páginas que uma verificação pode rastrear.
* `maxDiscoveryDepth`: Quantos níveis de links, a partir da `url` inicial, devem ser explorados para descobrir páginas.
* `maxDepth`: Profundidade máxima de rastreamento.
* `includePaths`: Monitore apenas URLs que correspondam a estes padrões de caminho (por exemplo, `/docs`).
* `excludePaths`: Ignore URLs que correspondam a estes padrões de caminho.

Assim como nos monitores de página, os scrapes acionados pelo monitor usam `maxAge` como `0` por padrão, então cada verificação refaz o scraping das páginas descobertas, a menos que você defina um `maxAge` diferente em `scrapeOptions`.

<div id="what-each-check-reports">
  ## O que cada verificação informa [#o-que-cada-verificação-informa]
</div>

Uma verificação de rastreamento compara cada página descoberta com a verificação anterior e registra um status por página:

* `same`: A página foi descoberta novamente e não mudou.
* `changed`: A página foi descoberta novamente e mudou.
* `new`: A página foi descoberta pela primeira vez.
* `removed`: Uma página da verificação anterior não foi mais descoberta.
* `error`: Não foi possível verificar a página.

Para emitir alertas sobre campos estruturados específicos nas páginas rastreadas, adicione um formato `changeTracking` a `scrapeOptions`. Veja [Rastreamento de mudanças](/pt-BR/features/monitoring#change-tracking).

<div id="shared-configuration">
  ## Configuração compartilhada [#configuração-compartilhada]
</div>

* [Agendamentos](/pt-BR/features/monitoring#schedules): cron ou cadência em linguagem natural, com mínimo de 5 minutos.
* [Objetivos e avaliação](/pt-BR/features/monitoring#goals-and-judging): alertas apenas para mudanças significativas.
* [Notificações](/pt-BR/features/monitoring#notifications): envio por webhook e email.
* [Resultados das verificações](/pt-BR/features/monitoring#check-results): inspecione cada verificação e seus diffs por página.
* [Preços](/pt-BR/features/monitoring#pricing): 1 crédito por página descoberta em cada verificação, além da avaliação opcional.
