Programmez des vérifications récurrentes, détectez les changements et recevez des notifications par webhook ou e-mail
Le monitoring Firecrawl exécute des vérifications récurrentes et vous avertit, vous ou votre agent, lorsque quelque chose change ou apparaît. Utilisez /monitor pour surveiller des pages connues, lancer un crawl planifié sur un site web ou exécuter une recherche web continue afin d’obtenir de nouveaux résultats correspondant à un objectif.Tous les types de moniteur suivent le même workflow : choisissez une ou plusieurs cibles, définissez une planification, ajoutez un objectif optionnel en langage clair, puis recevez des notifications par webhook ou e-mail lorsque quelque chose d’important se produit. Cette page couvre la configuration commune. Pour la configuration et les exemples propres à chaque cible, consultez les pages de monitoring Page, Website ou Entire web-scale.
surveillance de page
Surveillez une ou plusieurs URL connues, comparez chaque scrape au dernier instantané et recevez une alerte en cas de changements significatifs sur la page.
surveillance de site web
Lancez un crawl planifié sur un site, détectez les pages ajoutées, modifiées ou supprimées, et recevez des notifications par webhook ou e-mail.
surveillance du web à grande échelle
Exécutez des recherches web récurrentes et recevez une alerte lorsqu’un nouveau résultat correspondant à votre objectif apparaît.
Chaque vérification enregistre, pour chaque page, un résultat same, new, changed, removed ou error. Vous pouvez recevoir un webhook dès qu’une page surveillée a fini d’être traitée, un webhook pour chaque vérification terminée, des récapitulatifs par e-mail lorsque des changements ou des erreurs surviennent, ou n’importe quelle combinaison de ces notifications.
Expirée : prime pour les retours sur /monitor
Toutes les personnes interrogées éligibles à la prime ont été contactées. Gardez un œil sur les prochaines primes dans notre documentation !
Chaque moniteur accepte de 1 à 50 cibles, et vous pouvez mélanger plusieurs types de cibles dans un même moniteur. retentionDays est défini par défaut sur 30 et peut être configuré jusqu’à 365.Chaque appel de création renvoie le nouveau moniteur avec son cron normalisé, son nextRunAt calculé et estimatedCreditsPerMonth. Lorsque l’évaluation est activée, estimatedCreditsPerMonth est une estimation maximale, car les crédits d’évaluation ne sont facturés que pour les pages modifiées effectivement évaluées :
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" }}
Ajoutez un goal en langage clair si vous souhaitez être alerté uniquement en cas de changements significatifs. Si goal est présent et que judgeEnabled est omis, Firecrawl active automatiquement l’évaluation. L’évaluation s’exécute sur les pages modifiées et renvoie un judgment avec meaningful, confidence, reason et meaningfulChanges.La manière dont l’objectif est appliqué dépend de la cible : les moniteurs page et website évaluent les pages modifiées, tandis que les moniteurs à l’échelle du Web évaluent chaque nouveau résultat de recherche.Utilisez judgeEnabled: false si vous souhaitez enregistrer un objectif sans encore évaluer les changements. L’évaluation ne s’exécute que lorsque le moniteur comporte à la fois judgeEnabled et un goal non vide.
Un goal est requis pour les cibles search (monitoring à l’échelle du Web) sauf si vous définissez judgeEnabled: false. Il est facultatif pour les cibles scrape et crawl.
Chaque vérification facture toujours les scrapes ou crawls sous-jacents. Si l’évaluation est activée, elle ajoute 1 crédit pour chaque page modifiée qu’elle valide. Les vérifications sans page modifiée n’utilisent pas de crédits d’évaluation.
Les bons objectifs sont courts et explicites : indiquez ce qui doit déclencher une alerte, précisez tout critère de portée comme top N, prix, type de poste, entreprise, région, sujet, état ou entité, et n’incluez des exclusions que lorsqu’elles font partie de l’intention. Si l’objectif est large, laissez-le large ; par exemple, “any change” ne doit pas ajouter de filtres antiparasite qui masqueraient des changements.Par exemple, un moniteur avec cet objectif :
Alerter lorsqu'un nouvel article Hacker News lié à l'IA entre dans le top 10. Ignorer les modifications d'articles qui ne concernent pas l'IA. Ne pas alerter pour les modifications en dehors du top 10.
pourrait produire un webhook monitor.page comme celui-ci lorsqu’un article correspondant entre dans le champ défini :
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" }}
L’intervalle minimal est de 5 minutes. Les réponses de l’API renvoient toujours l’expression cron normalisée. Pour les planifications en texte libre, timezone détermine quand des expressions comme daily at 9am s’exécutent. Les planifications en texte libre sont réparties selon l’identifiant du moniteur avant d’être converties en cron, afin que de nombreux moniteurs ne s’exécutent pas tous au même instant.
Les moniteurs Page et website calculent par défaut les différences dans le markdown de chaque page et indiquent same, changed, new, removed ou error. Si vous souhaitez détecter des modifications dans des champs structurés précis (prix, titre, indicateur de disponibilité, éléments d’une liste, etc.), activez le suivi des modifications en mode JSON en ajoutant le format suiviDesModifications avec modes: ["json"] aux scrapeOptions de la cible.
Le suivi des modifications s’applique aux cibles scrape et crawl. Les moniteurs web à grande échelle (search) génèrent des alertes sur les nouveaux résultats plutôt que de calculer des différences sur des pages connues. Voir Statuses and dedup.
Lorsque scrapeOptions.formats vaut simplement ["markdown"], chaque page modifiée dans la réponse de vérification inclut un diff textuel unifié ainsi qu’un AST au format parseDiff :
Transmettez un format suiviDesModifications avec modes: ["json"], ainsi qu’un schéma JSON (ou un prompt) décrivant les champs qui vous intéressent. Firecrawl extrait ce JSON à chaque vérification et génère un diff par champ indexé par le chemin du champ, ainsi qu’un snapshot.json contenant l’extraction complète actuelle, afin que les consommateurs n’aient pas à récupérer à nouveau le scrape sous-jacent.
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)
Le payload du diff utilise comme clés des chemins JSON dans l’extraction. Chaque valeur est une paire {previous, current} :
Même si aucun champ suivi n’a changé, mais que le markdown environnant a changé, les moniteurs en mode JSON continuent de signaler same, sauf si vous activez aussi git-diff (voir le mode mixte ci-dessous). Le diff se concentre uniquement sur les champs de votre schéma.
La réponse de vérification contient alors à la fois diff.text (sidecar Markdown) et diff.json (diff champ par champ), ainsi que l’extraction snapshot.json :
Lorsqu’un moniteur dispose d’un webhook, Firecrawl peut envoyer deux événements de moniteur :
monitor.page : envoyé à mesure que chaque scrape surveillé se termine dans le worker de scrape.
monitor.check.completed : envoyé une fois la vérification complète consolidée. Inclut l’état de la vérification et des totaux récapitulatifs. Utilisez les événements monitor.page ou l’API de vérification du moniteur pour obtenir des résultats au niveau des pages.
monitor.page inclut isMeaningful et judgment lorsque l’évaluation des changements significatifs a été exécutée pour une page modifiée.
success vaut true lorsque la vérification s’est terminée sans erreur de page. Il vaut false pour les vérifications en échec ou partielles, et error contient la raison de l’échec lorsqu’elle est disponible.
Lorsqu’un moniteur a un objectif et que l’évaluation est activée, les résumés par e-mail donnent la priorité aux pages modifiées pertinentes. Si toutes les pages modifiées sont considérées comme du bruit et qu’il n’y a aucune page nouvelle, supprimée ou en erreur, l’e-mail n’est pas envoyé.Si recipients est omis, Firecrawl envoie les e-mails aux membres de l’équipe autorisés à recevoir les e-mails d’alerte système.
Vous pouvez configurer jusqu’à 25 destinataires spécifiés explicitement.
Lorsqu’un nouveau destinataire est ajouté à un moniteur, Firecrawl lui envoie un e-mail contenant un lien de confirmation. Cela garantit qu’il accepte explicitement de recevoir des notifications pour ce moniteur. Si le destinataire est déjà membre de l’équipe, aucune confirmation n’est requise.
Utilisez GET /v2/monitor/{monitorId}/checks pour lister les vérifications, et GET /v2/monitor/{monitorId}/checks/{checkId} pour consulter le détail d’une vérification. Les SDKs gèrent automatiquement la pagination par défaut.
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)
La liste des vérifications peut être filtrée selon le status de la vérification : queued, running, completed, failed, partial ou skipped_overlap.La réponse détaillée d’une vérification inclut estimatedCredits, actualCredits, des compteurs récapitulatifs et un tableau pages paginé. estimatedCredits correspond au plafond réservé pour la vérification ; actualCredits correspond au montant final facturé une fois que Firecrawl sait combien de pages ont changé et ont nécessité une analyse. Utilisez l’URL next au niveau racine pour récupérer la page de résultats suivante, conformément à la pagination du crawl. Vous pouvez filtrer les pages par status : same, new, changed, removed ou error. Chaque page modifiée inclut des données diff inline ; les pages des moniteurs en mode JSON incluent également un snapshot avec l’extraction actuelle.
Mode Markdown
Mode JSON
Mode mixte
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" }}
Les moniteurs n’entraînent pas de frais distincts par moniteur. Chaque vérification consomme les crédits du scrape, du crawl ou de la recherche sous-jacents qu’elle exécute, plus un crédit optionnel par page modifiée lorsque l’évaluation des changements significatifs est activée.
Composant
Crédits
Moniteur de scrape
1 crédit par URL et par vérification
Moniteur de crawl
1 crédit par page découverte et par vérification
Moniteur web
2 crédits par 10 résultats et par vérification
Évaluation du moniteur web
1 crédit par résultat évalué, lorsque l’évaluation par IA est activée (couvre le scraping et l’évaluation du résultat)
Évaluation des changements significatifs activée
1 crédit supplémentaire par page modifiée validée par l’évaluateur
Options de format (JSON, PDF, question, mode avancé, etc.)