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.
{
"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."
}- Queuedbudget $0.03 reserved
- MicroVMmicroVM ready
- MicroVMworker started · shell off · web on
- Web
web_fetch https://ephemer.al/api/samples/pricing-page?v=2 - Result
web https://ephemer.al/api/samples/pricing-page?v=2 → 200 - MicroVMmicroVM destroyed
- 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.
- Worker destroyed$0.004279 charged, $0.025721 released
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.
| Setting | Allowed |
|---|---|
| Connections | None |
| Web | Only ephemer.al |
| Shell | Off |
| Files | None |
| Zero data retention | Off: the record is kept for 30 days |
| Budget | $0.03, a hard cap |
| Timeout | 90 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.jsonFull request body request.json
The same body, with the files inline.
{
"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
}