Watch known URLs and get alerted on meaningful page changes
Page monitoring watches URLs you already know about. Each check scrapes every URL in the target, diffs it against the last retained snapshot, and reports whether the page is same, changed, new, removed, or error. It’s the right choice for pricing pages, changelogs, docs pages, job posts, status pages, or any known URL where a small change matters.This page covers the scrape target. Scheduling, goals and judging, change tracking, notifications, and pricing are shared across all monitor types. See the Monitoring overview.
Expired: Bounty for /monitor feedback
All interviewees eligible for the bounty reward have been contacted. Keep an eye on future bounties within our docs!
Create a monitor with a scrape target that lists one or more explicit URLs:
from firecrawl import Firecrawlfirecrawl = Firecrawl( # Monitor endpoints require an 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)
import Firecrawl from "@mendable/firecrawl-js";const firecrawl = new Firecrawl({ // Monitor endpoints require an 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);
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"] } ] }'
You can also create monitors from the Firecrawl CLI:
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
A scrape target requires type and a urls array with at least one URL. Scrape options are passed through to the underlying scrape jobs. Monitor-triggered scrapes default maxAge to 0, so each check performs a fresh scrape unless you explicitly set a different maxAge.
By default a page monitor diffs the page’s markdown. To alert only when a specific field changes, such as a price, a headline, an in-stock flag, or the items in a list, add a changeTracking format to the target’s scrapeOptions. See Change tracking for JSON mode and mixed mode.