Competitor pricing page change detector with AI

An agent fetches a pricing page, compares it with the snapshot you pass in, and explains what changed and why it matters.

  • Web
  • Budget cap

Watch a real run

A real run on Oct 7, 2026, replayed. Model: openai/gpt-6-luna.

Input
{
  "url": "https://ephemer.al/api/samples/pricing-page?v=2",
  "previous_snapshot": "Example Cloud pricing. Free: $0 per month, 1 project, 10,000 API calls per month, community support. Pro: $29 per month, 10 projects, 500,000 API calls per month, email support 1 business day. Team: $99 per month, unlimited projects, 10 seats included, 5,000,000 API calls per month, priority support 4 hours. Enterprise: contact sales, single sign-on, custom data retention, dedicated support. Prices in US dollars, billed monthly."
}
Succeededrun_4d1aed4fb66d6908bfba4e6c0a676e91$0.004279 of $0.03
  1. Queuedbudget $0.03 reserved
  2. MicroVMmicroVM ready
  3. MicroVMworker started · shell off · web on
  4. Webweb_fetch https://ephemer.al/api/samples/pricing-page?v=2
  5. Resultweb https://ephemer.al/api/samples/pricing-page?v=2 → 200
  6. MicroVMmicroVM destroyed
  7. Succeeded2 model calls, 2,814 tokensRecorded output (English)
    • Pro price: $29 → $39 per month.
    • Team seats included: 10 → 5.

    Pro customers pay $10 more per month, while Team customers receive 5 fewer included seats.

  8. Worker destroyed$0.004279 charged, $0.025721 released
Model $0.000279 · Web $0.001 · Compute $0.003

Run it yourself

Open the sample in the playground with the whole request filled in. It runs on your own account, within the budget shown, against the same read-only sample systems.

Budget for this sample: $0.03

How it works

Runs are stateless, so your scheduler keeps the previous snapshot and sends it as input. The agent fetches the current page from an allowed domain, lists price and limit changes with before and after values, and says nothing changed when nothing did.

What the agent can and cannot do

The permissions are part of the request. Anything not listed here is not available to the run.

SettingAllowed
ConnectionsNone
WebOnly ephemer.al
ShellOff
FilesNone
Zero data retentionOff: the record is kept for 30 days
Budget$0.03, a hard cap
Timeout90 seconds

Credentials never enter the machine: a broker adds them to each call and enforces the methods above.

The code

This is the exact request the sample sends. Set EPHEMERAL_API_KEY to a member key of your organization.

curl -X POST $EPHEMERAL_URL/v1/runs \
  -H "Authorization: Bearer $EPHEMERAL_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d @request.json
Full request body request.json

The same body, with the files inline.

request.json
{
  "prompt": "Fetch input.url with web_fetch and compare the plans, prices and limits with input.previous_snapshot. Reply in Markdown, at most 150 words: 'No changes' alone if nothing differs; otherwise a bullet for each change with the plan, the old value and the new value, then one sentence on what it means for a customer on that plan. Report only differences you can see in both texts. Use only what the data returns and never guess; if a call fails or a field is missing, say so.",
  "input": {
    "url": "https://ephemer.al/api/samples/pricing-page?v=2",
    "previous_snapshot": "Example Cloud pricing. Free: $0 per month, 1 project, 10,000 API calls per month, community support. Pro: $29 per month, 10 projects, 500,000 API calls per month, email support 1 business day. Team: $99 per month, unlimited projects, 10 seats included, 5,000,000 API calls per month, priority support 4 hours. Enterprise: contact sales, single sign-on, custom data retention, dedicated support. Prices in US dollars, billed monthly."
  },
  "web": {
    "allow": [
      "ephemer.al"
    ],
    "search": false
  },
  "shell": false,
  "timeout_seconds": 90,
  "max_cost_micros": 30000
}

Read more

Related samples

esc

Nothing matches “”.