# How we keep an eye on competitors

Every day an agent reads competitor websites, changelogs and pricing pages, compares them with yesterday's copy, and drops a short note in Slack about anything that moved.

Canonical page: https://themachine.myapps.ai/use-cases/competitor-watch

Your rivals rarely announce the small stuff. A plan gets repriced overnight. A new
feature slips into a release note. The homepage headline changes its tune. If
nobody on your team happened to look that week, you hear about it from a customer.
And let's be honest: opening twelve tabs each morning is a habit that lasts about
a fortnight.

So we handed the job to an agent on Machine. Once a day it reads the competitor
websites, changelogs and pricing pages we care about, compares them with what it
saw the day before, and posts a brief note in Slack covering only the real changes.

- **Team:** Machine
- **Control surface:** Slack
- **Connected systems:** The web · Slack
- **Mode:** Runs once a day · compares with yesterday

## The problem

Watching the competition is everybody's job, which means it is nobody's. Anyone
can read the pages, yet they live in a dozen places and change whenever they feel
like it. On most mornings nothing has shifted at all, so the person checking burns
their time proving a negative.

The usual fixes fall apart. Page-change alert tools ping you for every comma and
font tweak, and the one change that matters drowns in the noise. A shared checklist
of pages works only while someone remembers it exists. What you actually want is a
check that happens every single day, remembers the last visit, and speaks up only
when there is something worth your two minutes.

## What we built

An agent wakes up on a schedule each day. Every run gets its own sealed-off
session, pulls down the competitor pages on our list, lines them up against the
copy saved last time, and sends Slack a short rundown of the differences. Styling
tweaks are ignored. New prices, new features and new positioning get flagged by
name.

## How it works

### Schedule a daily run

A **cron trigger** starts the project once every day. Each start creates a brand-new
**session**: a fresh cloud computer (sandbox) that exists only for that run and can
reach the web. It does the work, then it is thrown away.

### Hand over the list and the rules

The agent's playbook lives in **skills** and **memory**: which competitors to
follow, which exact pages to open, and what separates a real change from a cosmetic
one. Memory also holds the snapshot from the previous day, so the agent compares
instead of repeating news you already have. When the market changes, we edit the
list.

### Plug in the web and Slack

**Connectors** are scoped connections to your tools, and the keys stay on our
servers rather than inside the model. With them the agent can:

- **Read competitor pages:** the websites, release notes and pricing pages on the
list.
- **Spot the differences:** line up today's text against the saved snapshot and
keep only what really changed.
- **Write in Slack:** a few lines in the growth channel, or silence if nothing
shifted.

### Keep the scope small

This agent reads public pages and posts in a single Slack channel. That is the
whole job, on purpose. It cannot see internal systems and does nothing besides
post. If it needs a credential, that key is stored encrypted in the **Secrets
Manager** and only handed to the agents you grant it to, at the moment the run
starts.

### Read the morning note

Each run opens the pages on the list, checks them against yesterday and reports
the differences: a plan that changed price, a feature that went live, a homepage
with a new pitch. When it is a slow day, the note is one short line. Your team
skims one message and closes zero tabs.

> **The pattern**
> Start the check with a **cron trigger**. Store the page list and yesterday's
> snapshot as **skills** and **memory**. Give the agent tightly scoped
> **connectors** for the web and Slack, then let every run compare and report. You
> read a summary; nobody goes clicking around.

## Guardrails

A read-only agent still gets every control the rest of Machine uses:

- **Isolation.** Every run lives in a sandbox of its own, and the one Slack summary
  it is permitted to post is the only thing that leaves.
- **Scoped secrets.** Credentials are stored encrypted in the Secrets Manager and
  only handed to the agents you grant them to, injected into the sandbox when the
  run starts.
- **Human approval gates.** Posting a summary is the only outside action it takes.
  Anything more would need a person to say yes first.
- **Everything is code.** The competitor list, the pages to read and the rule for
  what counts as a real change sit as files in the repo. They carry a version
  history, and you change them through a reviewed **change request**, not a toggle
  in a dashboard.

## The outcome

- **Daily:** The competition gets checked, no reminders needed
- **Diff-only:** Styling noise dropped, real moves called out
- **One message:** A short note replaces twelve open tabs

When a rival reprices a plan or ships a feature, we know the next morning, not
whenever someone stumbles on it. Since every run compares against the one before,
the channel stays quiet when the market is quiet and only lights up when something
has genuinely moved.
