Competitor monitor launch card

Tick this before the first scheduled run of a competitor change monitor. Watchlist, polite fetch, text diff, severity rules, one model step, a human review queue, and a kill switch.

Start with three to five rivals and one to three pages each. If you cannot clear the queue in ten minutes a week, the list is too long.

Expect the first two or three runs to be tuning. Noise on day one means fix the selector, not fire the monitor.

flowchart LR
    W["Watchlist"] --> F["Fetch"]
    F --> D["Diff (code)"]
    D --> S["Severity (code)"]
    S --> L["LLM describes"]
    L --> Q["Review queue"]
    Q --> N["Notify"]

Watchlist

ColumnFill inDrop the row if
urlOne exact public pageIt is a homepage with no clear purpose
selectorThe main content areaYou cannot isolate it from menus and banners
watch_forPrice, plans, limits, claims, new offersBlank
decision_it_informsThe choice this page could changeNobody can name one
ownerOne person who clears alertsBlank
  • Watchlist is small enough to review in ten minutes a week
  • Every URL is public. No logins or paywall workarounds.

Fetch

  • Schedule set (weekly is a sane default)
  • User-Agent names us and includes a contact address
  • robots.txt respected. Site terms read.
  • One request per page per run, with a pause between hosts
  • Navigation, footers, banners, timestamps, and rotating blocks stripped before diffing
  • Cleaned text and fetch date stored for every run

Diff and severity

  • The diff is computed by code, not by a model
  • High severity rules written down (prices, free tiers, limits, discontinuations)
  • Medium rules written down (new offers, plan names, your watch_for terms)
  • Diffs above a line threshold skip the model and go straight to a human

The one model step

  • Prompt describes the change only. No advice, no motives, no recommended response.
  • Output is JSON with summary and substantive. Validated before it enters the queue.
  • The model has no tools. It cannot send, post, or write.
  • Page text is treated as untrusted data
  • The raw diff is always shown next to the summary. If they disagree, the diff wins.

Review queue

ActionResultFeeds
ApproveShort note to the team with diff and linkDecision log
Dismiss as noiseCloses. Diff pattern logged.Cleaning rules
Dismiss as not relevantCloses. Reason recorded.Watchlist pruning
EscalateAssigned to the decision ownerA human conversation
  • High alerts opened within one working day
  • Medium and low batched into one weekly pass
  • Every row has a named reviewer

Kill switch and caps

  • One flag pauses all new runs
  • Hard cap on pages fetched and model calls per run
  • Two failed fetches in a row alert the owner
  • Pause flag tested once before launch

After the first runs

  • Noisy pages fixed or removed after run three
  • Dismissal reasons reviewed monthly
  • Rows nobody acted on in 90 days removed

Related guides