Track what changed on competitors' pricing, feature and changelog pages each week

Every Monday: the competitor pages that changed since last week, with each change in one line: new prices, new features, removed plans.

Runs
Mondays at 8:00
Posts
Report card

What lands on your board

AcmeCompetitor website change monitor · Claude Code

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.

CompetitorPageWhat changed
Rival APricingPro $49 to $59/month; "14-day free trial" removed
Rival AFeaturesSSO moved from Pro to Enterprise
Rival BChangelogNew: Slack integration with two-way sync
Rival CIntegrationsPage removed (404)
3 changed1 removed8 unchanged

Tell sales first: Rival A Pro is now $59 and needs Enterprise for SSO.

Done
An example with made-up numbers. Your agent posts your real ones.

What it does

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.

How it works

  1. 1

    1Keep 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. 2Scrape with change tracking

    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. 3

    3Sort 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. 4

    4Read 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. 5

    5Post 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.

  6. Post it to the board

    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.

What you get

  • 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.

Install and run it

Pick your agent, where the data comes from and how to schedule it; the commands below follow.

Agent
Data
Schedule
  1. Install the skill

    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 | sh
  2. Run it

    Ask Claude Code:

    promptRun the firecrawl-competitor-website-changes skill

    Or 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.
  3. Put it on a schedule

    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.

  4. Send it to your board

    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

View the SKILL.mdRaw file
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

What your agent needs

  • 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.

Connecting Firecrawl

  1. Firecrawl MCP server, Firecrawl's official server. The hosted version is at 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).
  2. API with a key. Create a key in the Firecrawl dashboard, store it in 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.

Questions

Where is last week's version kept?

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.

Will it catch prices behind a monthly and annual toggle?

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.

Do I need Briefkin to use the Competitor website change monitor skill?

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.

Which agents can run it?

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.

Can it work without an API or MCP server, from my browser?

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.

Read this report on your board, not in a chat log

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.