Methodology
How we collect, analyze, and present grocery pricing data.
Data Collection & Freshness
We collect pricing from 10 Canadian grocery banners across three companies — Empire (Sobeys, FreshCo), Loblaw (No Frills, Loblaws, Real Canadian Superstore, Zehrs, Fortinos, Your Independent Grocer), and Metro Inc (Metro, Food Basics) — by reading their publicly available product listings. Our collector re-scans every tracked item roughly every 3 hours. Every price on this site shows the exact time we observed it — never the time the page rendered. A price older than 24 hours gets a loud warning badge; nothing older than 48 hours is ever presented as a “current” price or a deal; and nothing older than 7 days is shown at all. Where we have no fresh data, we say so — we never fill a gap with a guess.
Deal Verification
A “deal” here is arithmetic, not a sticker. We take every price we've observed for that exact product over the trailing 30 days and compute the median. A product qualifies as a deal only when its current price (observed within the last 48 hours) is at least 10% below that median, and only when we have at least 5 observations in the window — thin history is excluded, not guessed at. A store's “SALE” flag counts for nothing: if a price was quietly inflated and then “dropped”, the 30-day median remembers the real level and the deal doesn't qualify. Every deal we show displays the median it was judged against. Some days there are no real deals — we'll say exactly that.
Shrinkflation Detection
A “Caught by Faircart” badge is an accusation, so it carries receipts. We record every product's package size on every scan, permanently and immutably. A catch is published only when ALL of the following hold: the normalized package size dropped by at least 2%; the smaller size persisted for at least 2 consecutive scans (a one-off reading is a blip, not a catch); the drop is at most 50% in a single step (bigger jumps are pack redefinitions or data artifacts, and we treat our own data with the same suspicion you should); and the step isn't a unit-scale artifact (a “change” of exactly 10×, 100× or 1000× is a data-feed glitch, not a shrink — our detector rejects these outright). Anything that fails a gate stays unpublished. We'd rather show you three bulletproof catches than thirty shaky ones.
Every published catch shows the old and new size, the price on both sides, the effective per-unit cost change (same price for less product IS a price increase — we do that math for you), and an expandable log of the actual observations behind it, timestamped. Check our work; that's what it's there for.
Corrections: if a published catch is ever proven wrong, we don't delete it — our records are append-only by construction (the database physically rejects edits). We publish a retraction that appears with the original, struck through, correction attached. A watchdog that silently deletes its mistakes is worse than one that corrects them publicly.
Store Rankings
Rankings are based on a standard 10-item staple basket of common groceries. We calculate the total basket cost at each store using the most recent prices and rank accordingly.
Limitations
- Prices reflect online listings and may differ from in-store prices
- Not all products at every store are tracked — coverage is expanding
- Regional pricing differences may not be fully captured