All skills
firecrawl avatar

/firecrawl-monitor

@06e2fd5 official
by firecrawlfirecrawl/cli643 stars
110

Alert by webhook/email on web changes — use for "monitor/watch/track/alert me when": recurring checks on known URLs (prefer over repeated one-off scrapes) or web-wide watches for new results (queries + goal).

Use this Skill: https://skilld.dev/gh/firecrawl/cli/firecrawl-monitor

This session only. Nothing lands on disk.

goals.md

≈1.2k tokens on demand. Your agent reads this file only when SKILL.md points to it.

Writing monitor goals and queries

Reference for authoring --goal (all monitors) and --queries (web monitors). Read from SKILL.md when creating or tuning a monitor.

Writing a good --goal

The goal is what the AI change judge uses to decide whether a page is changed vs same. Convert the user's intent into a concise 2-3 sentence goal:

  • Start with Alert when ... and state the trigger using the user's wording.
  • Restate any scope they mentioned: top N, price, role type, region, company, topic, status, or a specific entity.
  • Add an Ignore ... sentence only for intent-specific exclusions (e.g. points/comments for rankings, marketing copy for pricing, general company-page updates for job listings). The judge already handles generic noise — whitespace, casing, punctuation, encoding, formatting-only changes, request/session IDs, cache busters, tracking params, generic metadata, and unrelated page chrome — so leave those out.
  • Include only page-specific sections, entities, thresholds, exclusions, or business rules the user actually mentioned.
  • If the user is vague or asks for "any change", keep the goal broad with no exclusions. If the user mentions noise they do not care about, include that explicitly.
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.

Writing good --queries (web monitors)

For a web monitor, queries control recall (what the search retrieves) and the goal controls precision (which results alert). Tune both — a perfect goal can't alert on a result the queries never pulled in, and broad queries with a vague goal produce constant low-value alerts.

  • Write keywords, not sentences: OpenAI new model release, not tell me when OpenAI releases a new model.
  • Quote multi-word entities ("Llama 4"); group synonyms with OR (launch OR release OR announcement).
  • Keep each query tight (~2–6 terms). One broad query usually beats several narrow ones — extra queries split the --max-results budget without adding coverage.
  • One query per distinct subject. Several facets of one subject = one query; only split for genuinely separate entities (e.g. "OpenAI, Anthropic, and Google").
  • Restrict or exclude sources with --include-domains / --exclude-domains rather than site: operators in queries.
  • --search-window sets recency — 5m, 15m, 1h, 6h, 24h, 7d (default 24h). Widen it for niche topics that don't publish often.
  • --max-results caps results per query, 1–50 (default 10).
firecrawl monitor create --name "AI model releases" --schedule "daily at 9:00" \
  --queries "new AI model release,frontier model launch" \
  --goal "Alert when a major lab releases a new AI model. Ignore tutorials and listicles." \
  --search-window 7d --max-results 20 \
  --webhook-url https://example.com/hook

What good looks like: a healthy web monitor mostly returns new: 0 and alerts only on genuinely new, on-goal results. If many retrieved results are off-goal, the queries pull noise the goal rejects — tighten the queries. If a topic returns nothing for long stretches, the queries are too narrow or --search-window too tight — broaden them. If the user dismisses alerts, the goal is too broad — add an intent-specific Ignore .... The aim is high precision with enough recall: every alert worth acting on, nothing real missed.

Source: SKILL.md on GitHub

1 warning28d3 checks · Risk SAFE
  • Gen Agent Trust Hub28d

    This skill facilitates automated website monitoring and change detection through the Firecrawl service. It allows for the configuration of recurring web scrapes or searches with notifications delivered via webhook or email. The primary security consideration is the inherent risk of indirect prompt injection, as the tool processes and analyzes untrusted content from the public web.

  • Socket28d

    No alerts

  • Snyk28d

    Risk: MEDIUM · 1 issue

Signed by skilld at 06e2fd5. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 18 hours ago.

Activeupdated last month
What it can do
Runs commands
All 2 allowed tools
Bash(firecrawl *)Bash(npx firecrawl-cli *)
  • firecrawl
  • monitoring
  • web-scraping
  • change-detection
  • webhooks
  • notifications
  • pricing-tracking
  • content-monitoring

README badge

README badge for firecrawl/cli/firecrawl-monitor

Monitors website content for changes and sends notifications via webhook or email, with AI-powered filtering to ignore formatting and tracking noise. Use this for tracking pricing changes, new job postings, docs updates, competitor sites, or any URL where you need alerts when content actually changes rather than repeated manual checks.

Generated from the current SKILL.md.

Does this work with webhook notifications or just email?
Both. Use `--webhook-url` with `--webhook-events monitor.page,monitor.check.completed` for webhooks, or `--email` for email summaries. Webhooks fire as each page finishes and after the full check is reconciled.
What's the minimum check interval?
15 minutes. Schedules can be natural-language (`every 30 minutes`, `hourly`, `daily`) or cron expressions.
How does the AI change judge decide whether a page actually changed?
You set a `--goal` in plain language (e.g. 'Alert when pricing changes'). The judge ignores formatting, whitespace, timestamps, tracking params, and unrelated page chrome, firing notifications only on substantive content changes matching your goal.
Can I monitor multiple pages in one monitor?
Yes. Use `--scrape-urls` for a comma-separated list, or `--crawl-url` to monitor every page discovered on a site. Each page in a check gets labeled `same`, `new`, `changed`, `removed`, or `error`.
Does this support structured per-field diffs instead of markdown diffs?
Yes, via JSON-mode change tracking. Pass a JSON body with a schema and extraction prompt to `monitor create`, and you'll get keyed diffs like `plans[0].price: '$19/mo' → '$24/mo'` instead of unified diff.

Generated from the current SKILL.md. These answers refresh after source changes.