Kepie
W  A  T  C  H

We watch the shelves so you don't have to.

Issue 001 · Saturday, 30 May 2026

Method · The Movers

How we compute the week's biggest price moves.

Issue 001 · published Sunday 7 Jun 2026 · prices measured Friday 5 Jun 2026

Per-item, per-store deltas. The window label on each row is the real one — not a fixed Friday-to-Friday.

What the Movers page shows

The Movers board surfaces the staples whose cheapest valid per-basis price moved the most since the previous snapshot. “Per-basis” means per-kg for solid products, per-litre for liquids, or per-each for products priced individually — never pack price. The percentage delta is the headline number; pack price is shown inline as supporting context only.

Two columns: Up this week (prices rose) and Down this week(prices fell). Rows with a per-basis move smaller than our noise floor (see below) are excluded and don’t appear.

How we pair snapshots

For each staple-at-store combination, we compare the two most recent snapshot clusters that have at least three valid SKUs. The window label on the row (e.g. “19 May → 26 May”) is the actual pair of dates — not an assumed Friday-to-Friday. Fetch cadence can vary, so the window can range from 6 to 14 days. The label is always the real one.

Within each snapshot cluster, the “cheapest valid” pick is the lowest per-basis price across all AI-classified valid SKUs at that store on that date. No special filtering beyond the valid/excluded classification.

Minimum pool threshold (R3)

A row only appears on the Movers board when boththe prior and current snapshots have at least three valid SKUs for that staple at that store. When the pool falls below three — because the retailer has limited stock, we’re watching a narrow category, or a SKU was excluded after new classification — we suppress the row rather than report a thin signal. A thin pool can produce a movement that reflects one pack disappearing, not a real price change for the category.

Special-state flags

Each row carries a SpecialChipwhen the supermarket’s own catalogue flags a relevant pack as on special this week.The chip is a packaging-level indicator — “the retailer is calling this a special” — not a claim about the actual discount level. We surface two states:

  • Special starting: the current snapshot carries the on-special flag; the previous snapshot did not. A drop in price may reflect a specials-on flip, not a structural wholesale shift.
  • Special ending: the previous snapshot was flagged as on special; the current one is not. A rise in price may reflect the shelf returning to its regular rate, not a new price increase.

We don’t hide specials-driven moves — they are real price changes for the shopper that week. We label them so the reader can judge whether the move is structural or transient.

Noise floor

We exclude rows where the per-basis move is smaller than 2%. At the depth of history we currently hold (approximately five weeks), moves under 2% are within ordinary price-feed jitter — the noise produced by SKU pool reshuffles when the cheapest pack changes from one snapshot to the next without the underlying price actually moving. As the corpus deepens we may tighten this floor; the current threshold is conservative.

Per-product drilldown

Tapping a row on the Movers board expands a per-SKU history table showing the last four snapshot prices for each tracked product in the pool. The table shows per-basis price in the left column and pack price as supporting context in the right column. When a per-basis price wasn’t captured for a snapshot (missing product-size-grams), we note it rather than substituting pack price as if it were a normalised number.

What the Movers page doesn’t show

  • Year-on-year moves. Our corpus runs approximately five weeks deep. A 52-week trend chart will appear once we hold 52 weeks of our own data.
  • Cross-store aggregate savings.The Movers board is per-store, per-item. We don’t compute or imply a “save $X by splitting your shop” number — that mixes baskets that don’t exist in that form.
  • Cause attribution.We can measure that a price moved. We don’t claim to know whether it reflects a wholesale cost change, a competitor response, a seasonal shift, or a tactical promotion. More history makes causation legible; we’re building that corpus now.
All method pages →Back to Kepie Watch