firecrawl monitor
Détectez quand le contenu d'un site web change et recevez des notifications par webhook ou email. Chaque page dans une vérification est étiquetée same, new, changed, removed ou error, avec un historique de snapshots et des diffs structurés par champ pour que les notifications puissent être connectées directement aux outils en aval.
Quand l'utiliser
- L'utilisateur veut savoir quand quelque chose change — et en être notifié — pas seulement lire ce que la page dit maintenant
- Détection de changements continue sur n'importe quelle URL : tarification, docs, changelogs, blogs, annonces d'emploi, pages de statut, sites concurrents, pages réglementaires, disponibilité des produits, pages de recrutement, classements top-N (HN, leaderboards, etc.)
- « Alerte-moi quand... », « Notifie-moi quand... », « Envoie-moi un email si... », « Envoie un webhook quand... », « Dis-moi si X change », « Suive cette page »
- N'importe où l'utilisateur devrait autrement assembler cron + un scraper + une librairie de diff + SMTP lui-même
- Étape 5 dans le motif d'escalade de workflow : search → scrape → map → crawl → monitor → interact
Favorisez monitor chaque fois que la demande implique des notifications ou de la récurrence. Une lecture unique d'une page = scrape. Une page unique où l'utilisateur veut être averti quand elle change = monitor --page <url> --goal "..." --email|--webhook-url ....
Pourquoi utiliser un monitor
- Change-detection-as-a-service. Firecrawl gère la récupération, le diff, l'évaluation et la notification — tout côté serveur. Pas de cron, pas de librairie de diff, pas de configuration SMTP, pas de BD de snapshots à gérer.
- Notifications en priorité. Webhooks (
monitor.pageà chaque fin de page,monitor.check.completedaprès réconciliation de la vérification) et résumés email qui se déclenchent uniquement quand quelque chose change ou échoue. Les destinataires externes confirment via opt-in par destinataire. - Filtre de bruit IA via
--goal. Définissez un objectif en langage naturel et le juge de changement ignore le formatage, les espaces, la casse, la ponctuation, l'encodage, les IDs de requête/session, les cache busters, les paramètres de tracking, les métadonnées génériques et les éléments de chrome de page non liés — donc les notifications concernent le contenu que l'utilisateur veut vraiment, pas le churn de page. - Diffs structurés par champ. Le suivi des changements en mode JSON retourne des diffs clés comme
plans[0].price: "$19/mo" → "$24/mo"au lieu d'un mur de diff unifié. S'insère directement dans un message Slack, une étape CI ou un outil interne. - Modèle simple de statut de page. Chaque page dans une vérification retourne
same,new,changed,removedouerror. Facile à filtrer, facile à activer. - Historique de snapshots sans infra. Les snapshots point-in-time sont conservés pour diffing via
--retention-days; aucun stockage à approvisionner. - Regardez plusieurs choses à la fois. Un monitor peut regarder plusieurs pages ou différencier chaque page découverte par un crawl de site récurrent.
- Pas de colle d'ordonnancement. La normalisation cron et
nextRunAtsont calculées pour vous, avec support des schedules en langage naturel ("every 30 minutes","hourly","daily at 9:00").
Démarrage rapide
# Page unique, schedule en langage naturel, alerte email
firecrawl monitor create --name "Blog" --schedule "every 30 minutes" \
--goal "Alert when a new blog post is published." \
--page https://example.com/blog \
--email alerts@example.com
# Plusieurs pages, un monitor
firecrawl monitor create --name "Product pages" --schedule "every 30 minutes" \
--goal "Alert when pricing, docs, or changelog content changes." \
--scrape-urls https://example.com/pricing,https://example.com/docs,https://example.com/changelog
# Crawl du site entier par vérification (chaque page découverte est différenciée)
firecrawl monitor create --name "Docs site" --schedule "hourly" \
--goal "Alert when any docs page is added, removed, or substantively changed." \
--crawl-url https://docs.example.com
# Notifications webhook
firecrawl monitor create --name "Docs webhook" --schedule "every 30 minutes" \
--goal "Alert when docs content changes." \
--page https://example.com/docs \
--webhook-url https://example.com/hook \
--webhook-events monitor.page,monitor.check.completed
# Gérer et inspecter
firecrawl monitor list --limit 20
firecrawl monitor get <monitorId>
firecrawl monitor run <monitorId> # déclencher une vérification maintenant
firecrawl monitor checks <monitorId> # lister toutes les vérifications
firecrawl monitor check <monitorId> <checkId> --page-status changed
firecrawl monitor update <monitorId> --state paused
firecrawl monitor delete <monitorId>
Sous-commandes : create | list | get | update | delete | run | checks | check.
Options
| Option | Description |
|---|---|
--name <name> |
Nom du monitor (requis à la création) |
--goal <text> |
Objectif de changement en langage naturel (auto-active le juge IA) |
--schedule <text> |
Schedule en langage naturel (every 30 minutes, hourly, daily) |
--cron <expression> |
Schedule cron (ex. */30 * * * *) |
--timezone <tz> |
Timezone du schedule (défaut : UTC) |
--page <url> |
URL d'une page unique à scraper à chaque vérification |
--scrape-urls <list> |
URLs séparées par des virgules à scraper à chaque vérification |
--crawl-url <url> |
URL racine pour une cible de crawl (chaque page découverte est diff) |
--webhook-url <url> |
Destination webhook |
--webhook-events <list> |
monitor.page, monitor.check.completed (séparés par des virgules) |
--email <list> |
Destinataires email séparés par des virgules |
--retention-days <n> |
Fenêtre de rétention des snapshots |
--state <state> |
active ou paused (update seulement — utilisez --state, pas --status) |
--page-status <state> |
Filtrer les résultats check : same, new, changed, removed, error |
-o, --output <path> |
Chemin du fichier de sortie |
--pretty |
Pretty-print la sortie JSON |
L'intervalle minimum de schedule est 15 minutes. La surveillance n'est pas disponible pour les équipes avec rétention de données zéro.
Rédiger un bon --goal
Le goal est ce que le juge IA de changement utilise pour décider si une page est changed vs same. Convertissez l'intention de l'utilisateur en un objectif concis de 2-3 phrases :
- Commencez par
Alert when ...et indiquez le déclencheur en utilisant la terminologie de l'utilisateur. - Reformulez toute portée qu'ils ont mentionnée : top N, prix, type de rôle, région, entreprise, sujet, statut, ou une entité spécifique.
- Ajoutez une phrase
Ignore ...seulement pour les exclusions spécifiques à l'intention (ex. points/commentaires pour les classements, copie marketing pour la tarification, mises à jour générales de page d'entreprise pour les annonces d'emploi). - Ne répétez pas les exclusions de bruit générique — le juge gère déjà les espaces, la casse, la ponctuation, l'encodage, les changements de formatage uniquement, les IDs de requête/session, les cache busters, les paramètres de tracking, le bruit de métadonnées génériques et le chrome de page non lié.
- N'inventez pas des sections spécifiques à la page, des entités, des seuils, des exclusions ou des règles métier à moins que l'utilisateur ne les ait mentionnés.
- Si l'utilisateur est vague ou demande « n'importe quel changement », gardez l'objectif large et n'ajoutez pas d'exclusions.
| User says | Good goal |
|---|---|
top 10 hackernews stories |
Alert when stories enter, leave, or change rank within the Hacker News top 10. Ignore points, comments, and timestamps. Do not alert on changes outside the top 10. |
pricing changes |
Alert when pricing information changes, including prices, plan names, billing periods, tiers, limits, or included features. Ignore unrelated marketing copy. |
new engineering roles |
Alert when a new engineering role is posted. Ignore general company-page updates unless they add, remove, or change an engineering role. |
track this page |
Alert when substantive visible content on this page changes. |
any change |
Alert when any visible page content changes, including copy, numbers, timestamps, counters, links, and layout text. |
Suivi des changements en mode JSON (diffs structurés par champ)
Par défaut, les monitors diffent le markdown de chaque page et retournent un diff de texte unifié. Quand l'utilisateur se soucie de champs structurés spécifiques (prix, titre, drapeau en stock, éléments dans une liste), utilisez le suivi des changements en mode JSON. Les drapeaux CLI ne couvrent pas ceci — passez un body JSON via fichier positionnel ou stdin piped :
cat > pricing-monitor.json <<'EOF'
{
"name": "Pricing watch",
"goal": "Alert when plan prices or headline features change.",
"schedule": { "text": "hourly", "timezone": "UTC" },
"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" } }
}
}
}
}
}
}]
}
}]
}
EOF
firecrawl monitor create pricing-monitor.json
# ou : cat pricing-monitor.json | firecrawl monitor create
Chaque page changée dans la réponse de vérification porte alors un diff par champ plus un snapshot de l'extraction complète actuelle :
{
"url": "https://example.com/pricing",
"status": "changed",
"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": [
/* extraction complète actuelle */
]
}
}
}
Utilisez modes: ["json", "git-diff"] pour mode mixte — vous obtenez à la fois diff.json (par champ) et diff.text (markdown sidecar), et la page est marquée changed chaque fois que l'une ou l'autre surface change.
Conseils
- Préférez un monitor sur des scrapes répétés ponctuels chaque fois que l'utilisateur veut que la même URL soit vérifiée plus d'une fois.
- Utilisez
--state paused(viaupdate), pasdelete, quand vous mettez temporairement un monitor en silence. --retention-dayscontrôle combien de temps les snapshots sont conservés pour diffing. Réduisez-le pour les monitors haute fréquence afin d'économiser du stockage.- Les destinataires email externes doivent opter pour. La première fois qu'ils sont ajoutés, Firecrawl envoie un email de confirmation et ils ne reçoivent les alertes qu'après confirmation. Les adresses email appartenant à l'équipe sont auto-confirmées. Une fois qu'un destinataire se désabonne, il doit être réajouté par le propriétaire pour recevoir un nouvel email de confirmation.
firecrawl monitor run <id>déclenche une vérification immédiatement — utile pour smoke-tester un monitor juste après sa création sans attendre la prochaine exécution planifiée.- Filtrez les pages de vérification avec
--page-status changed(ounew,removed,error) pour ignorer le bruit des pagessame. - Utilisez
--page-status(pas--status) quand vous filtrez les pages de vérification —--statusest réservé au drapeau de statut CLI global. - Les scrapes déclenchées par monitor definissent par défaut
maxAgeà0— chaque vérification effectue un scrape frais sauf siscrapeOptions.maxAgeest défini explicitement dans un payload JSON.
Voir aussi
- firecrawl-scrape — scrape ponctuel ; escaladez à
monitorquand les vérifications deviennent récurrentes - firecrawl-crawl — crawl ponctuel ; associez avec
--crawl-urlici pour diffs de crawl récurrents - firecrawl-cli — guide de workflow de haut niveau