Use case · Price monitoring

Watch a price page. Get a webhook when it changes.

Scheduled scrape, content-hash diff, structured webhook on every change. Cloud Starter from 29 €/month.

The problem

Three changes a week. Manually.

You sell a product. Your competitors change their prices three times a week. You either watch them manually, build a flaky cron + Puppeteer setup, or pay an “ecommerce intelligence platform” 800 € a month for a dashboard you don’t need.

How Stekpad solves it

Scrape, schedule, diff, webhook.

  1. 1. Scrape the competitor product page once into a `table` dataset with an `extract` schema for `name`, `price`, `currency`, `in_stock`.
  2. 2. Schedule the same scrape to run every six hours (Cloud Starter+).
  3. 3. Stekpad computes a `_content_hash` on every re-scrape. If it changes, `_version` increments and a `row.changed` webhook fires.
  4. 4. Your webhook handler diffs the price column and posts to Slack.
Concrete example

Three calls. End-to-end.

Set up a price monitor
bash
# Initial scrape with extraction
curl -X POST https://api.stekpad.com/v1/scrape \
-H "Authorization: Bearer stkpd_live_..." \
-d '{
"url": "https://competitor.com/product/widget",
"schema": {
"type": "object",
"properties": {
"name": { "type": "string" },
"price": { "type": "number" },
"currency": { "type": "string" },
"in_stock": { "type": "boolean" }
}
},
"dataset": {
"type": "table",
"name": "Competitor prices",
"primary_key": ["url"]
}
}'
 
# Schedule it (Cloud Starter+)
curl -X POST https://api.stekpad.com/v1/schedules \
-H "Authorization: Bearer stkpd_live_..." \
-d '{
"name": "Watch competitor widget price",
"cron": "0 */6 * * *",
"spec": { "verb": "scrape", "params": { "url": "https://competitor.com/product/widget", "schema": "...", "dataset": { "id": "ds_abc" } } }
}'
 
# Subscribe to changes
curl -X POST https://api.stekpad.com/v1/webhooks \
-H "Authorization: Bearer stkpd_live_..." \
-d '{
"url": "https://myapp.com/hooks/price",
"events": ["row.changed"],
"filter": { "dataset_id": "ds_abc" }
}'

When the price changes, your webhook receives:

row.changed
json
{
"event": "row.changed",
"dataset_id": "ds_abc",
"row_id": "row_01HZ...",
"previous": { "price": 49.99, "in_stock": true },
"current": { "price": 39.99, "in_stock": true },
"changed_at": "2026-04-14T10:00:00Z"
}
Cost

29 €/month for 50 products.

  • 1 product, every 6 hours, 30 days = 120 scrapes/month = 120 credits
  • 50 products, every 6 hours, 30 days = 6,000 credits
  • Cloud Starter (29 €/mo) includes 10,000 credits, scheduling, webhooks, and change monitoring.

50 products under one continuous monitor: 29 €/month flat.

Authenticated price pages

Cookie bridge for logged-in prices.

Some competitors gate prices behind a login. Use use_session: "<domain>" with the cookie bridge. Your Chrome stays logged in; Stekpad scrapes through the bridge.

FAQ

Common questions.

How sensitive is change detection?

It’s a content hash on the extracted JSON, not the raw HTML — so layout changes don’t trigger false positives. Only schema-field changes count.

Can I diff specific columns?

Yes. The webhook payload includes `previous` and `current` versions of every changed column.

What's the minimum cron interval?

5 minutes on Cloud Scale, 1 hour on Cloud Starter and Growth.

Start with the free plan.

300 credits to test on one product. Upgrade to Cloud Starter when you need scheduling.

Price monitoring — scheduled scrape with change detection — Stekpad