What you need
- An Outcrawl API key in
OUTCRAWL_API_KEY. - A Slack incoming webhook URL in
SLACK_WEBHOOK_URL. Posting to it is plain HTTP from your code, so no Outcrawl integration is involved. - A server reachable from the internet (the monitors post to it), and a long random string in
HOOK_TOKENfor its path. - Node with
express, or Python withfastapi,uvicornandhttpx.
How it works
1
A monitor watches each pricing page
monitors.create checks each page every 30 minutes. Timestamps, nonces and ads are stripped before comparing, ignoreSelectors drops the rotating testimonials, and each check is 1 credit whether or not anything changed.2
A real change posts to your endpoint
The monitor sends
monitorId, url, label, checkedAt, the diff and, with judge: true, a one-line summary. It sends once and never retries, so the endpoint answers 202 at once and does the work afterwards.3
4
The agent reads the page and writes the brief
It reads the live page and the comparison table, FAQ and fine print it links to, and answers in a schema: every plan with prices and limits, each change with before and after, what it means, and one suggested response.
5
Your code posts it to Slack
The brief goes to Slack as Block Kit, with the run’s replay so anyone on your team can check what the agent read. The plan table is saved as the baseline for the next change.
The program
Run it once withwatch to create the monitors, then run it as a server.
monitors.list answers each monitor’s lastCheckedAt and lastStatus, not old diffs. That is why the program saves the plan table itself in pricing-state/ and hands the last one to the next run as “before”. The first change for each competitor has only the diff to compare against; every one after that has the full plan table.
What you get back
The agent’s answer, as the schema shapes it:• *Business*: Monthly price (was $39 per seat, now $49 per seat)), the two paragraphs, and a footer linking the page, the replay and the credits the brief cost.
What it costs
- Watching is 1 credit per check, whether or not the page changed, plus the model’s usage when a changed page is judged (
judge: true), per pricing. Three pages checked every 30 minutes is 4,320 checks a month, so 4,320 credits a month. - Each brief is one agent run, billed for the model’s usage, browser time and proxy usage. A typical run costs about 15 credits a minute all in; the real figure depends on the task and how heavy the pages are. About 90 s is about 23 credits per brief. Each run’s
caps.budgetis 100. - Six real changes a month across the three competitors: 4,320 + 6 × 23, about 4,458 credits a month, plus model usage for the six judged changes. That fits the Builder plan’s 10,000.
ignoreSelectors and the monitor stops seeing it.
Make it yours
- Post straight to a channel with no server:
notify: { slack: '<incoming webhook URL>' }sends the monitor’s own diff and summary to Slack, without the agent’s brief. - Watch the changelog and the docs’ limits page as well as the pricing page, with one monitor per URL on the same endpoint.
- Put the brief where your team decides: open a Linear issue, update a Notion table or a HubSpot property with one more HTTP call after the Slack post.
- Watch a pricing page behind a login by creating the monitor and the run with the same
profile.
Related
Monitors
Schedules, notify targets and normalisation.
Agents
Tasks, caps and typed results.
Rules
Keep a run on one site.
Sessions and replay
See exactly what the agent read.