← Use cases

USE CASES

The competitor page, read for you

Persona
Jess, founder, doing their own marketing.
Scene
A competitor quietly rewrites their pricing page. Jess sees it three weeks later in a prospect's email.

The old loop

A tab of competitor pages, checked “when there’s time”. A change-detection tool that alerts on every rotated banner.

The new loop

The page change watcher reads the page’s headings every hour. If nothing changed, it’s done: no model call. If something did, a model reads the old and new, decides whether the change is meaningful, and writes one sentence. It only sends if it’s meaningful and confident. The first few sends waited for Jess’s approval.

The one capability that matters

Gated reasoning. The model is called only on a change, answers into a schema (is_meaningful, summary, confidence), and is capped at five cents a day.

The synth

blueprints/page-change-watcher.yaml
# Most ticks are a free diff; the LLM only thinks when the
# page actually changed. Swap the URL/selector for any page you care about.
blueprint:
  id: page-change-watcher
  title: Page change watcher
  description: >-
    Watches a web page and tells you when it meaningfully changes. Most checks
    are free — it only reasons when something on the page is different.
    Ships pointed at the Anthropic newsroom; swap in any page you care about.
config:
  synth:
    name: Page watcher
    goal: Tell me when the page I'm watching meaningfully changes.
    schedule_seconds: 3600
  requires_credentials:
    - WEBHOOK_URL
  sources:
    - id: page
      primitive: dom_scrape
      config:
        url: https://www.anthropic.com/news
        selectors:
          headlines: "h1, h2, h3"
  fast_path:
    primitive: fast_path_diff
    inputs:
      current: $sources.page.headlines
      previous: $state.last_headlines
  reasoning:
    primitive: llm_reason
    triggered_by: fast_path
    model_tier: standard
    budget_usd_per_day: 0.05
    output_schema:
      is_meaningful: bool
      summary: string
      confidence: float
  actions:
    - if: "$reasoning.is_meaningful AND $reasoning.confidence > 0.6"
      primitive: notify_webhook
      config:
        url: $secrets.WEBHOOK_URL
        template: "[Page watcher] {summary}"
    - always: true
      primitive: write_state
      config:
        last_headlines: $sources.page.headlines
        checked_at: $tick.started_at

What it costs

Cost: $0 on quiet hours; a ceiling of $0.05 a day.

Try it