3 competitor pages changed this week
Rival A raised Pro from $49 to $59 a month and dropped the 14-day trial. Rival B shipped a Slack integration. 8 other pages unchanged, 1 removed.
Every Monday: the competitor pages that changed since last week, with each change in one line: new prices, new features, removed plans.
What lands on your board
Rival A raised Pro from $49 to $59 a month and dropped the 14-day trial. Rival B shipped a Slack integration. 8 other pages unchanged, 1 removed.
Competitors rarely announce a price increase. The pricing page just changes one day, and you hear about it from a prospect on a call. Feature pages and changelogs move the same way: quietly, and faster than anyone on the team has time to check by hand.
The agent keeps a list of the pages that matter, scrapes each one weekly with Firecrawl's change tracking, and reads only the diffs. Cosmetic edits are dropped; a new plan, a higher price, a removed free tier or a feature you also sell each get one line, with the page to open.
Store 5 to 30 URLs in a file the skill reads, such as competitors.md, each with a competitor name and a page type: pricing, features, changelog, homepage or careers. One page per line; fewer, well-chosen pages beat a whole site.
For each URL, POST https://api.firecrawl.dev/v2/scrape with formats: ["markdown", { "type": "changeTracking", "modes": ["git-diff"], "tag": "weekly" }], and onlyMainContent: true. A request with change tracking always fetches the page fresh; maxAge is ignored. The Firecrawl MCP server's scrape tool takes the same formats option.
Read changeTracking.changeStatus: same needs nothing, new is the first snapshot (the baseline), removed means the page is gone, and changed comes with a line diff in changeTracking.diff.
Ignore dates, counters, rotating testimonials and cookie text. Report price and plan changes with old and new values, features added or removed, limits that moved, and new changelog entries. One line each, in plain words.
Changed pages first, grouped by competitor, then removed pages, then a count of unchanged ones. Add the line the team should hear first, usually a pricing move.
With BRIEFKIN_TOKEN set, the agent sends the result as one card that updates in place every run. Without it, you get the report in the chat.
Pick your agent, where the data comes from and how to schedule it; the commands below follow.
One command. It puts the SKILL.md in ~/.claude/skills and in ~/.agents/skills, which Codex, Cursor, Gemini CLI, Copilot CLI and OpenCode read too.
shellcurl -fsSL https://briefkin.dev/skills/firecrawl-competitor-website-changes/install | shAsk Claude Code:
promptRun the firecrawl-competitor-website-changes skillOr paste the prompt instead of installing:
promptFor each URL in my competitors list, scrape the page with the Firecrawl API (v2 scrape, formats markdown plus changeTracking in git-diff mode with tag "weekly", onlyMainContent true). Use changeTracking.changeStatus: skip "same", note "new" as a first snapshot, report "removed", and for "changed" read the diff. Ignore dates, counters, testimonials and cookie text. Report price and plan changes with old and new values, features added or removed, changed limits and new changelog entries, one line each, grouped by competitor. End with a count of unchanged pages and the one change sales or product should hear first.Mondays at 8:00, from cron on any machine where Claude Code is signed in:
crontab0 8 * * 1 claude -p "Run the firecrawl-competitor-website-changes skill"Add it with crontab -e. A laptop asleep at that time runs it when it wakes if you use launchd or Task Scheduler instead; GitHub Actions works for the API route.
Connect Briefkin once with curl -fsSL https://briefkin.dev/install | sh and every run lands on your board as a report card. How setup works
SKILL.md---
name: firecrawl-competitor-website-changes
description: "Every Monday: the competitor pages that changed since last week, with each change in one line: new prices, new features, removed plans. Use when the user asks for this, or when it runs on a schedule."
---
# Competitor website change monitor
Every Monday: the competitor pages that changed since last week, with each change in one line: new prices, new features, removed plans.
Competitors rarely announce a price increase. The pricing page just changes one day, and you hear about it from a prospect on a call. Feature pages and changelogs move the same way: quietly, and faster than anyone on the team has time to check by hand.
The agent keeps a list of the pages that matter, scrapes each one weekly with Firecrawl's change tracking, and reads only the diffs. Cosmetic edits are dropped; a new plan, a higher price, a removed free tier or a feature you also sell each get one line, with the page to open.
## Two ways to get the data
Use the API or MCP route when you have an MCP server, a CLI or an API token for the app. Otherwise, if you can drive a browser the user is signed in to (Claude in Chrome, a Playwright or Chrome DevTools MCP server), use the browser route. Say which one you used.
## Route A: API or MCP server
### What you need
- A Firecrawl API key in `FIRECRAWL_API_KEY`; each scrape uses credits, so a weekly run over 20 pages stays small.
- Or the Firecrawl MCP server: `https://mcp.firecrawl.dev/v2/mcp` works without a key at low rate limits, and `https://mcp.firecrawl.dev/<FIRECRAWL_API_KEY>/v2/mcp` with the key for the full tool set.
If something is missing, say what and stop; do not invent numbers.
### Steps
1. **Keep a watch list**: Store 5 to 30 URLs in a file the skill reads, such as `competitors.md`, each with a competitor name and a page type: pricing, features, changelog, homepage or careers. One page per line; fewer, well-chosen pages beat a whole site.
2. **Scrape with change tracking** (Firecrawl): For each URL, `POST https://api.firecrawl.dev/v2/scrape` with `formats: ["markdown", { "type": "changeTracking", "modes": ["git-diff"], "tag": "weekly" }]`, and `onlyMainContent: true`. A request with change tracking always fetches the page fresh; `maxAge` is ignored. The Firecrawl MCP server's `scrape` tool takes the same `formats` option.
3. **Sort by change status**: Read `changeTracking.changeStatus`: `same` needs nothing, `new` is the first snapshot (the baseline), `removed` means the page is gone, and `changed` comes with a line diff in `changeTracking.diff`.
4. **Read the diffs like an analyst**: Ignore dates, counters, rotating testimonials and cookie text. Report price and plan changes with old and new values, features added or removed, limits that moved, and new changelog entries. One line each, in plain words.
5. **Post the digest**: Changed pages first, grouped by competitor, then removed pages, then a count of unchanged ones. Add the line the team should hear first, usually a pricing move.
## Route B: the browser
### What you need
- No sign-in: the pages are public. The agent needs a folder it can read and write for the saved copies, and the first week only records a baseline.
If something is missing, say what and stop; do not invent numbers.
### Steps
Start at https://web.archive.org/. The user is signed in already; never type passwords or codes, and ask if a sign-in page appears.
1. **Keep the list and last week's copies**: The browser does the scraping itself, so there is no Firecrawl page to open. Keep the watch list (5 to 30 URLs with competitor name and page type) in a file such as `competitors.md`, and next to it a folder where the agent saves each page's text after every run.
2. **Open each page and read the main content**: Open each URL in turn, wait for the pricing table or feature grid to load, dismiss the cookie banner, and read the main content (skip the header, footer and chat widget). Save the text as this week's copy.
3. **Compare with last week**: Diff this week's text against last week's saved copy. With no saved copy, open `https://web.archive.org/web/*/<url>` in the Wayback Machine, pick the snapshot closest to 7 days ago and compare with that instead; say on the card when the comparison came from the archive.
4. **Read the diffs like an analyst**: Ignore dates, counters, rotating testimonials and cookie text. Report price and plan changes with old and new values, features added or removed, limits that moved and new changelog entries, one line each. A page that returns a 404 counts as removed.
5. **Post the digest**: Changed pages first, grouped by competitor, then removed pages, then a count of unchanged ones, and the line sales or product should hear first.
Note: A browser sees the page after JavaScript runs, so prices behind a monthly and annual toggle still need their own URL. Wayback snapshots are often days or weeks old or missing for small sites, so the first week is usually a baseline only. Thirty pages take several minutes; past that, the API route is the better one.
## The report
- **Changed pages**, grouped by competitor, with one line per meaningful change and old and new values.
- **Removed pages**, which often means a plan or product was retired.
- **Unchanged**: a count, so you know the check ran.
- One line on what to tell sales or product first.
## Post it to Briefkin
When `BRIEFKIN_TOKEN` is set, or `~/.config/briefkin/env` exists (the installer from https://briefkin.dev/docs writes it), also send the result to the user's Briefkin board as one card. Keep the `item_key` the same on every run so the card updates in place, use a new `event_id` per run, and put today's real numbers in place of the example ones. If the request fails, say so once and carry on.
```bash
[ -n "${BRIEFKIN_TOKEN:-}" ] || . ~/.config/briefkin/env
curl -sS -X POST "${BRIEFKIN_URL:-https://briefkin.dev}/v1/events" \
-H "authorization: Bearer $BRIEFKIN_TOKEN" \
-H "content-type: application/json" \
-d @- <<'JSON'
{
"v": 1,
"event_id": "firecrawl-competitor-website-changes/<date of this run, e.g. 2026-10-16>",
"item_key": "firecrawl-competitor-website-changes",
"project": "Acme",
"source": "Competitor website change monitor skill",
"kind": "update",
"title": "3 competitor pages changed this week",
"summary": "**Rival A** raised Pro from $49 to **$59** a month and dropped the 14-day trial. **Rival B** shipped a Slack integration. 8 other pages unchanged, 1 removed.",
"widget": [
{
"type": "Table",
"props": {
"columns": [
"Competitor",
"Page",
"What changed"
],
"rows": [
[
"Rival A",
"Pricing",
"Pro $49 to $59/month; \"14-day free trial\" removed"
],
[
"Rival A",
"Features",
"SSO moved from Pro to Enterprise"
],
[
"Rival B",
"Changelog",
"New: Slack integration with two-way sync"
],
[
"Rival C",
"Integrations",
"Page removed (404)"
]
]
}
},
{
"type": "Badges",
"props": {
"items": [
{
"label": "3 changed",
"tone": "warn"
},
{
"label": "1 removed",
"tone": "bad"
},
{
"label": "8 unchanged",
"tone": "ok"
}
]
}
},
{
"type": "Callout",
"props": {
"text": "Tell sales first: Rival A Pro is now $59 and needs Enterprise for SSO.",
"tone": "info"
}
}
]
}
JSON
```
Widgets come from the Briefkin catalog (https://briefkin.dev/v1/catalog). Without a token, just give the user the report.
## Run it on a schedule
Suggested: Mondays at 8:00 (`0 8 * * 1`). From cron, with the agent signed in on that machine:
```bash
0 8 * * 1 claude -p "Run the firecrawl-competitor-website-changes skill"
# Codex: codex exec, Gemini CLI: gemini -p, Copilot CLI: copilot -p, OpenCode: opencode run
```
Or use the agent's own scheduler (Claude Code routines, Codex automations, Claude or ChatGPT scheduled tasks): https://briefkin.dev/skills/firecrawl-competitor-website-changes#schedule
Source: https://briefkin.dev/skills/firecrawl-competitor-website-changes
A Firecrawl API key in FIRECRAWL_API_KEY; each scrape uses credits, so a weekly run over 20 pages stays small.
Or the Firecrawl MCP server: https://mcp.firecrawl.dev/v2/mcp works without a key at low rate limits, and https://mcp.firecrawl.dev/<FIRECRAWL_API_KEY>/v2/mcp with the key for the full tool set.
https://mcp.firecrawl.dev/v2/mcp with your key in an Authorization: Bearer header, for example claude mcp add --transport http firecrawl https://mcp.firecrawl.dev/v2/mcp --header "Authorization: Bearer $FIRECRAWL_API_KEY" in Claude Code, or at https://mcp.firecrawl.dev/v2/mcp-oauth to sign in with OAuth instead. Without a key, the hosted server offers only scrape, search and parse, rate-limited. It also runs locally with env FIRECRAWL_API_KEY=fc-... npx -y firecrawl-mcp, which fits Cursor's and Codex's command-based config. Tools include firecrawl_scrape, firecrawl_map, firecrawl_crawl, firecrawl_search and the firecrawl_monitor_* set (docs).FIRECRAWL_API_KEY, and call https://api.firecrawl.dev/v2/... with the same Bearer header.Keep the key in the client's header or secret settings, never in the URL. Keys aren't scoped, so the thing to limit is spend: set limit on crawls, keep the URL list short, and check firecrawl_credit_usage now and then.
Firecrawl keeps it. Change tracking compares each scrape with the last snapshot your Firecrawl team stored for that exact URL and tag, so the skill needs no files of its own. The first run returns every page as new; changes show from the second week on.
Only the version the page shows when it loads. If annual prices appear after a click, add the URL that shows them (many pricing pages accept something like ?billing=annual) as its own line. Prices inside images are not read at all.
No. The skill runs with your own agent and gives you the report in the chat. With a Briefkin token set, each run also posts it to your board as a report card, so you can glance at it instead of asking again.
Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot CLI, OpenCode, Windsurf and Amp all read SKILL.md files. The install command puts it in ~/.claude/skills and ~/.agents/skills, where they look. ChatGPT, the Claude app and Grok take the prompt instead. Pick your agent under "Install and run it" and the commands change to match.
Yes. Switch the data source to "Your browser" and the steps change to the Firecrawl pages themselves: the agent opens web.archive.org in a browser you are signed in to and reads the numbers off the page. Claude Code, Codex, Cursor, Claude app and ChatGPT can drive a browser out of the box; Gemini CLI, Copilot CLI and OpenCode need a Playwright or Chrome DevTools MCP server first. It is slower than the API and needs you signed in, so it suits a report you run by hand or from a scheduler on your own computer.
Skills are free to use with any agent. Briefkin is where their results land: one board for every report, number and question your agents send, with a ping when something needs you.
Free during the open beta. No card.