How price tracking actually works (and where it fails)
Under the hood of our price history charts — the scrapers, the normalization, and the one pricing trick even we can't catch.
Maya Chen
CompareMyCart editorial
Every product on this site carries a small green chart — the 30-day price history. It's the feature users tell us they trust the most, and it's also the feature that's hardest to get right. This post is a honest tour of what's happening under the hood, including the one pricing trick we can't reliably catch.
Sources. We poll four retail API surfaces directly (when credentials allow) and scrape public listing pages for the rest. Both paths flow into the same normaliser that flattens everything into a canonical shape: title, current price, list price if present, currency, seller ID, and a handful of confidence scores. Anything missing a seller ID gets a tag that downgrades it in search ranking.
Normalisation. The hard problem isn't getting a price — it's making prices from different marketplaces comparable. We apply five sequential passes: currency conversion against a daily FX snapshot, shipping-cost estimation where the price excludes delivery, unit-price reconciliation for pack sizes, wholesale MOQ detection (so a $3 t-shirt with a 500-unit minimum doesn't crown a best-price), and finally a seller-reputation floor. Anything below that floor is held out of the public index.
Storage. A daily snapshot per (product, seller) lands in a columnar store. Charts are pre-computed nightly and invalidated on significant moves. We keep ninety days of rolling history; older data compresses into weekly averages. That's enough for humans to see the shape without paying to store every intraday wiggle.
The trick we can't catch. Some sellers run a rotating false-MSRP: they change the 'original price' strikethrough every few days while keeping the selling price flat. Our nightly snapshot sees a price change, but the real customer price never moved. We detect the most obvious variants (MSRP jumping by more than 10% in a single day) but a slow walk is indistinguishable from a genuine discount trajectory. We're working on a signal that cross-references the same product across sellers, but honestly, this one remains hard.
None of this matters if the chart isn't useful. Our north star: if a user looks at a 30-day history and concludes 'I should wait,' they should be right more often than not. That's the metric we optimise for, and it's the metric we're willing to sacrifice data-rich features to keep honest.