Agende verificações recorrentes, detecte mudanças e receba notificações por webhook ou e-mail
O monitoramento do Firecrawl executa verificações recorrentes e notifica você ou seu agente quando algo muda ou aparece. Use /monitor para acompanhar páginas conhecidas, rastrear um site em um agendamento ou executar uma busca contínua na web por novos resultados que correspondam a uma meta.Todos os tipos de monitor compartilham o mesmo fluxo de trabalho: escolha um ou mais alvos, defina um agendamento, adicione uma meta opcional em linguagem simples e receba notificações por webhook ou e-mail quando algo importante acontecer. Esta página aborda a configuração compartilhada. Para configurações e exemplos específicos de alvo, acesse a página de monitoramento de Página, Site ou Toda a web em escala.
Monitoramento de páginas
Acompanhe uma ou mais URLs conhecidas, compare cada scraping com o último snapshot e gere alertas para mudanças significativas na página.
Monitoramento de sites
Faça o rastreamento de um site em um agendamento, detecte páginas adicionadas, alteradas ou removidas e notifique seu webhook ou caixa de entrada.
Monitoramento de toda a web em escala
Execute buscas na web recorrentes e gere alertas quando um novo resultado aparecer e corresponder à sua meta.
Cada verificação registra resultados por página como same, new, changed, removed ou error. Você pode receber um webhook quando cada página monitorada for concluída, um webhook para cada verificação concluída, resumos por email quando houver mudanças ou erros, ou qualquer combinação dessas notificações.
Encerrado: recompensa por feedback sobre /monitor
Todos os participantes elegíveis à recompensa já foram contatados. Fique de olho nas próximas recompensas em nossa documentação!
Cada monitor aceita de 1 a 50 alvos, e você pode misturar tipos de alvo em um único monitor. retentionDays tem valor padrão de 30 e pode ser definido em até 365.Cada chamada de criação retorna o novo monitor com o cron normalizado, nextRunAt calculado e estimatedCreditsPerMonth. Quando a avaliação está habilitada, estimatedCreditsPerMonth é uma estimativa de limite superior, porque os créditos de avaliação só são cobrados para páginas alteradas que de fato são avaliadas:
Response
{ "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" }}
Adicione um goal em linguagem simples quando quiser receber alertas apenas sobre mudanças significativas. Se goal estiver presente e judgeEnabled for omitido, o Firecrawl ativa a avaliação automaticamente. A avaliação é executada nas páginas alteradas e retorna um judgment com meaningful, confidence, reason e meaningfulChanges.Como a meta é aplicada depende do alvo: monitores de página e site avaliam páginas alteradas, enquanto monitores de toda a web em escala avaliam cada novo resultado de busca.Use judgeEnabled: false se quiser armazenar uma meta sem avaliar as mudanças ainda. O avaliador só é executado quando o monitor tem judgeEnabled e um goal não vazio.
Um goal é obrigatório para alvos search (monitoramento de toda a web em escala), a menos que você defina judgeEnabled: false. Ele é opcional para alvos scrape e crawl.
Cada verificação sempre cobra pelos scrapings ou rastreamentos subjacentes. Se a avaliação estiver habilitada, o avaliador adiciona 1 crédito para cada página alterada que ele valida. Verificações sem páginas alteradas não usam créditos do avaliador.
Boas metas são curtas e explícitas: diga o que deve acionar um alerta, reforce qualquer escopo, como top N, preço, tipo de cargo, empresa, região, tópico, status ou entidade, e inclua exclusões apenas quando fizerem parte da intenção. Se a meta for ampla, mantenha-a ampla; por exemplo, “qualquer mudança” não deve adicionar filtros de ruído que ocultem mudanças.Por exemplo, um monitor com esta meta:
Alerte quando uma nova história do Hacker News relacionada a IA entrar no top 10. Ignore mudanças em histórias que não sejam sobre IA. Não alerte sobre mudanças fora do top 10.
poderia gerar um webhook monitor.page como este quando uma história correspondente entrar no escopo:
monitor.page
{ "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" }}
O intervalo mínimo é de 5 minutos. As respostas da API sempre retornam a expressão cron normalizada. Para agendamentos em texto, timezone determina quando expressões como daily at 9am são executadas. Os agendamentos em texto são distribuídos com base no ID do monitor antes de serem convertidos para cron, para que vários monitores não sejam executados todos no mesmo instante.
Os monitores de Página e site comparam o markdown de cada página por padrão e informam same, changed, new, removed ou error. Quando quiser detectar mudanças em campos estruturados específicos (preço, manchete, indicador de disponibilidade em estoque, itens de uma lista etc.), habilite o rastreamento de mudanças no modo JSON adicionando um formato changeTracking com modes: ["json"] às scrapeOptions do alvo.
O rastreamento de mudanças se aplica a alvos scrape e crawl. Monitores de toda a web em escala completos (search) emitem alertas sobre novos resultados em vez de comparar páginas conhecidas. Veja Statuses and dedup.
Quando scrapeOptions.formats é apenas ["markdown"], cada página alterada na resposta da verificação inclui um diff de texto unificado e uma AST no estilo parseDiff:
Passe um formato changeTracking com modes: ["json"] junto com um schema JSON (ou um prompt) que descreva os campos que importam para você. O Firecrawl extrai esse JSON em cada verificação e gera um diff por campo identificado pelo caminho do campo, além de um snapshot.json com a extração atual completa, para que os consumidores não precisem buscar novamente o scraping subjacente.
from firecrawl import Firecrawlfrom pydantic import BaseModelfrom typing import Listfirecrawl = 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)
O payload do diff usa caminhos JSON na extração como chaves. Cada valor é um par {previous, current}:
Mesmo que nenhum campo rastreado tenha mudado, mas o markdown ao redor tenha sido alterado, os monitores no modo JSON ainda reportam same, a menos que você também habilite o git-diff (veja o modo misto abaixo). O diff se concentra exclusivamente nos campos do seu schema.
A resposta da verificação passa então a conter tanto diff.text (sidecar em markdown) quanto diff.json (diff por campo), junto com a extração snapshot.json:
Quando um monitor tem um webhook, o Firecrawl pode enviar dois eventos do monitor:
monitor.page: Enviado conforme cada scraping monitorado é concluído no worker de scraping.
monitor.check.completed: Enviado após a consolidação da verificação completa. Inclui o status da verificação e contagens de resumo. Use os eventos monitor.page ou a API de verificação do monitor para obter resultados por página.
monitor.page inclui isMeaningful e judgment quando a avaliação de alteração significativa é executada para uma página alterada.
success é true quando a verificação é concluída sem erros de página. É false em verificações com falha ou parciais, e error contém o motivo da falha quando disponível.
Quando um monitor tem uma meta e a avaliação está habilitada, os resumos por email priorizam páginas alteradas significativas. Se todas as páginas alteradas forem classificadas como ruído e não houver páginas novas, removidas ou com erro, o email não será enviado.Se recipients for omitido, o Firecrawl enviará para os membros da equipe aptos a receber emails de alerta do sistema.
Você pode configurar até 25 destinatários especificados.
Quando um novo destinatário é adicionado a um monitor, o Firecrawl envia um email com um link de confirmação. Isso garante que ele concorde explicitamente em receber notificações desse monitor. Se o destinatário já for membro da equipe, não será necessário confirmar.
Use GET /v2/monitor/{monitorId}/checks para listar verificações e GET /v2/monitor/{monitorId}/checks/{checkId} para inspecionar uma verificação. Os SDKs fazem paginação automática por padrão.
from firecrawl import Firecrawlfirecrawl = 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)
A lista de verificações pode ser filtrada pelo status da verificação: queued, running, completed, failed, partial ou skipped_overlap.A resposta de detalhes da verificação inclui estimatedCredits, actualCredits, contagens resumidas e um array pages paginado. estimatedCredits é a reserva no limite máximo para a verificação; actualCredits é o valor final cobrado depois que o Firecrawl determina quantas páginas mudaram e precisaram de avaliação. Use a URL next de nível superior para buscar a próxima página de resultados, seguindo a paginação do rastreamento. Você pode filtrar páginas por status: same, new, changed, removed ou error. Cada página alterada inclui dados de diff inline; páginas de monitores em modo JSON também incluem um snapshot com a extração atual.
Modo Markdown
Modo JSON
Modo misto
Markdown-mode response
{ "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" }}
Os monitores não têm uma cobrança separada por monitor. Cada verificação consome os créditos do scraping, do rastreamento ou da busca subjacente que ela executa, além de um crédito opcional por página alterada quando a avaliação de mudança significativa está ativada.
Componente
Créditos
Monitor de scraping
1 crédito por URL por verificação
Monitor de rastreamento
1 crédito por página descoberta por verificação
Monitor web
2 créditos por 10 resultados por verificação
Avaliação do monitor web
1 crédito por resultado avaliado, quando a avaliação por IA está ativada (cobre o scraping e a avaliação do resultado)
Mudança significativa ativada
1 crédito adicional por página alterada validada pelo avaliador
Complementos de formato (JSON, PDF, question, modo aprimorado etc.)