# Monitoramento de páginas (/pt-BR/features/monitoring-page)

<!-- agent-signals: reading_time_min: 3 · est_tokens: 1593 · 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 páginas acompanha URLs que você já conhece. Cada verificação faz scraping de cada URL no alvo, gera um diff em relação ao último snapshot retido e informa se a página está `same`, `changed`, `new`, `removed` ou `error`. É a escolha certa para páginas de preços, changelogs, páginas de documentação, anúncios de vagas, páginas de status ou qualquer URL conhecida em que uma pequena mudança faça diferença.

Esta página aborda o alvo `scrape`. Agendamento, objetivos e judging, rastreamento de mudanças, notificações e preços são compartilhados entre todos os tipos de monitoramento. Consulte a [visão geral do monitoramento](/pt-BR/features/monitoring).

<div id="create-a-page-monitor">
  ## Criar um monitor de página [#criar-um-monitor-de-página]
</div>

Crie um monitor com um alvo `scrape` que inclui uma ou mais URLs explícitas:

<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(
        # Endpoints de monitor requerem uma API key:
        api_key="fc-YOUR-API-KEY",
      )

      monitor = firecrawl.create_monitor(
          name="Hacker News AI monitor",
          schedule={"text": "every 30 minutes", "timezone": "UTC"},
          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."
          ),
          targets=[
              {
                  "type": "scrape",
                  "urls": ["https://news.ycombinator.com"],
              }
          ],
          notification={
              "email": {
                  "enabled": True,
                  "recipients": ["alerts@example.com"],
                  "includeDiffs": True,
              }
          },
      )

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

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

      const firecrawl = new Firecrawl({
        // Endpoints de monitor requerem uma API key:
        apiKey: "fc-YOUR-API-KEY",
      });

      const monitor = await firecrawl.createMonitor({
        name: "Hacker News AI monitor",
        schedule: { text: "every 30 minutes", timezone: "UTC" },
        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.",
        notification: {
          email: {
            enabled: true,
            recipients: ["alerts@example.com"],
            includeDiffs: true,
          },
        },
        targets: [
          {
            type: "scrape",
            urls: ["https://news.ycombinator.com"],
          },
        ],
      });

      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": "Hacker News AI monitor",
          "schedule": {
            "text": "every 30 minutes",
            "timezone": "UTC"
          },
          "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.",
          "notification": {
            "email": {
              "enabled": true,
              "recipients": ["alerts@example.com"],
              "includeDiffs": true
            }
          },
          "targets": [
            {
              "type": "scrape",
              "urls": ["https://news.ycombinator.com"]
            }
          ]
        }'
      ```
    </CodeBlockTab>
  </CodeBlockTabs>
</CodeGroup>

Você também pode criar monitores usando a CLI do Firecrawl:

```bash title="CLI"
firecrawl monitor create --name "Hacker News AI" \
  --schedule "every 30 minutes" \
  --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." \
  --page https://news.ycombinator.com
```

<div id="scrape-target">
  ## Alvo `scrape` [#alvo-scrape]
</div>

Um alvo `scrape` exige `type` e um array `urls` com pelo menos uma URL. As opções de scraping são repassadas para os jobs de scraping correspondentes. Os scrapes acionados pelo monitor usam `maxAge` com valor padrão `0`, então cada verificação executa um novo scraping, a menos que você defina explicitamente um `maxAge` diferente.

```json title="Scrape target"
{
  "type": "scrape",
  "urls": ["https://example.com/pricing"],
  "scrapeOptions": {
    "formats": ["markdown"],
    "maxAge": 0
  }
}
```

<div id="detecting-field-level-changes">
  ## Detectando mudanças em nível de campo [#detectando-mudanças-em-nível-de-campo]
</div>

Por padrão, um monitor de página faz o diff do markdown da página. Para alertar apenas quando um **campo específico** mudar, como um preço, uma manchete, um indicador de estoque ou os itens de uma lista, adicione o formato `changeTracking` a `scrapeOptions` do alvo. Consulte [Rastreamento de mudanças](/pt-BR/features/monitoring#change-tracking) para o modo JSON e o modo misto.

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

* [Agendamentos](/pt-BR/features/monitoring#schedules): cron ou intervalo em linguagem natural, com mínimo de 5 minutos.
* [Objetivos e avaliação](/pt-BR/features/monitoring#goals-and-judging): alerta apenas sobre mudanças relevantes.
* [Notificações](/pt-BR/features/monitoring#notifications): entrega 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 URL por verificação, além da avaliação opcional.
