# Prices, stock, statuses. Hear only when they change.

Watch values that live behind a sign-in: a supplier's price list, a claim's status, an account's limits. Kaabist runs the program on a schedule, compares each result with the last, and calls your webhook only when something changed.

## The problem

Polling a page and diffing HTML is noisy: banners, timestamps and layout shifts all look like changes. Behind a login it is worse, because the session keeps expiring between runs.

## Compare fields, not pages

Change detection compares the extracted data, limited to the fields you name. A new banner or a reordered menu is not a change; a new price is.

```
{ "program": "supplier-prices",
  "cron": "0 */6 * * *",
  "timezone": "Europe/Istanbul",
  "change_detection": { "enabled": true, "fields": ["price", "stock"] } }
```

## Signed events with the difference

A change arrives as schedule.changed with the paths that changed and a link to the JSON Patch between the two runs. Deliveries are signed and retried with backoff; they can also go straight to Slack or Discord.

## The login takes care of itself

The program saves its session after signing in and reuses it on the next run. When the session expires, it signs in again; when a code is needed, you get a link to type it in.

## Questions

### What if the site changes its layout?

Kaabist finds the moved elements again, or pauses the job with a suggested fix for you to approve, and you hear about it through program.drift_detected, often before a scheduled run fails.
