anfloy.AcademyBook a call

Marketing · 02 · Distribution & channelsLesson 5 of 5

Competitor & market monitoring

45 min working time · Weeks 7-8

By the end of this lesson you can
  • Scrape and monitor competitors ethically
  • Get a weekly what-changed brief automatically

Know when they move, without the doomscrolling

What you're building here runs while you sleep: every Monday, a digest of what your real competitors changed last week - pricing, positioning, launches - lands where your team already looks. Without it, competitor awareness means someone notices a pricing change three weeks late because they happened to visit the site. The useful version is boring and systematic: watch a fixed set of pages, diff them against last week, and surface only what changed and matters.

  • Pricing pages - the highest-signal page on any competitor's site.
  • Homepage and positioning - headline changes mean strategy changes.
  • Product or changelog pages - launches and feature framing.
  • Customers and case-study pages - who they're winning and which segment they're courting.
  • Careers pages - hiring patterns telegraph roadmap quarters early.

The tools: already in Claude Code

You don't need a scraping product for this. Claude Code fetches public web pages natively, converts them to clean text, and saves them as files - which is the entire technical requirement. The skill you build fetches each watched page, saves a dated markdown snapshot in the repo, and diffs it against last week's snapshot. Pages in, files saved, diff out.

Keep the crawl polite and small: a handful of competitors, a few pages each, once a week. That's well inside what any site tolerates from a single visitor, and it's all the frequency strategy signals need.

The competitor-watch skill

Configuration is a file, as always: a small YAML listing who you watch and which pages matter. The skill reads it, crawls, diffs, and writes the digest. Competitor-monitoring skills exist in the open catalogs - install the library's version if one fits, then adapt the watch hints, the politeness rules, and the digest format to yours.

data/competitors/targets.yaml
competitors:
  - name: acme-agency
    pages:
      - url: https://acme.example/pricing
        watch: pricing, packaging, money-back terms
      - url: https://acme.example/
        watch: headline, positioning, hero CTA
  - name: northstar-consulting
    pages:
      - url: https://northstar.example/services
        watch: service list, new offerings
      - url: https://northstar.example/careers
        watch: roles posted (roadmap signal)
  1. Create targets.yaml with 3-5 competitors, 2-4 pages each. The watch hints tell the summarizer what counts as signal per page.
  2. Build the skill: for each target, fetch the page, convert to markdown, save a dated snapshot, and diff against the previous one.
  3. Summarize with judgment: meaningful changes only - pricing, claims, offers, launches. Explicitly instruct it to ignore cosmetic churn: typo fixes, image swaps, copyright years.
  4. Write the digest to reports/competitors-<date>.md: change, competitor, evidence (the before/after lines), and a one-line 'so what' each.
  5. First run is baseline-only - it just captures snapshots. The diffs start being interesting on run two.

Schedule it and route it

A monitor you run by hand is a monitor you stop running. This is the next rung of the ladder: you chatted through the diff once, you encoded it as a skill, and now the skill runs on a schedule without you. Two scheduling paths: a local cron job running the skill headless via claude -p (headless runs start in Manual permission mode, so pass --permission-mode explicitly, and they draw from the same subscription limits as your chat), or Claude Code Routines - scheduled sessions running on Anthropic's cloud on a cron trigger, set up with /schedule and managed with /schedule list. Routines are still a research preview as of September 2026, with a one-hour minimum interval. They survive your laptop being closed, which is exactly what a Monday-morning monitor needs. The cloud path has two requirements the local one gets for free. History: a Routine clones the repo fresh, so last week's snapshots must be committed and pushed before the run has anything to diff against - and the Routine pushes its own results to a claude/ branch by default, so someone merges that branch after each run. Delivery: a Routine sees only your claude.ai connectors, not MCP servers you added locally with claude mcp add, so posting the digest into team chat from the cloud needs a chat connector configured on the account.

  1. Schedule the weekly run for early Monday, before your team's planning slot.
  2. If you use a Routine, close the git loop: snapshots committed and pushed before each run, and the claude/ branch it pushes merged after - make that part of the digest owner's Monday job.
  3. Deliver the digest where people already look - your team chat or the weekly report - not a folder nobody opens. From a cloud Routine, chat delivery means an account-level connector; without one, the digest lands in the repo and the owner forwards it.
  4. Once a quarter, prune targets.yaml: drop pages that never produced signal, add the competitor that started showing up in deals.

The same machine, daily: a news digest that feeds the backlog

Competitors move weekly; your niche's conversation moves daily. The content engine needs to know what happened this morning, or every draft sounds a week late. Run the same fetch-save-summarize pattern as a daily news skill: a fixed list of sources (the publications, newsletters, forums, and feeds your buyers read), a dated digest written to content/news/YYYY-MM-DD.md, and, the part that makes it pay, 2-3 flagged angles appended to calendar/backlog.md, each with the one thing you own that makes it yours to post.

  • For a permanent morning run, use a Routine (cloud, laptop closed, one-hour minimum interval) or local cron.
  • For a working session, /loop is lighter: /loop 1h check the sources in data/news-sources.yaml and append anything new to today's digest re-runs inside your open session. Loops live in your open session and recurring ones expire after 7 days, so they're for a launch week or a conference, not for infrastructure.
  • Public pages and RSS cost nothing to fetch. A paid scraper for social feeds does cost money, so price it before it's scheduled: per-run cost x runs per month, written in the skill, and the schedule left off until one manual run is checked. A key sitting in your environment is not permission to spend it.
  • Keep the digest short enough to read over coffee. Ten items with a one-line 'so what' beats forty links nobody opens.

Do this now

Sources and further reading

We set it up with you

Want us to set it up with you, end to end?

Three one-on-one sessions. We train you on your real stack and build your first agents together, until you can run it yourself. You keep everything.