01 / PrincipleA discount alone is not a deal.
An Amazon listing showing "50% off" tells you almost nothing. It might be off an invented RRP. It might match a price the product has sold at for six months. It might disappear in two hours, replaced by something worse. The number on the page is the easiest input to manipulate.
Our score asks a different question: across every signal we can verify, how strong is the case for buying this product today? Discount magnitude matters. So does where this price sits in the product's own history, whether stock is real, whether the seller is reliable, and whether the category is one where deep cuts are rare or routine.
The score is a single number, but it's the aggregate of those five readings. If any one of them is weak, the score drops.
02 / Five inputsWhat we measure.
1. Discount magnitude — 35%
How far below the reference price the product currently sits. The reference is the manufacturer RRP where we have one, or the highest verified price in the trailing 365 days where we don't. Linear up to 60% off — beyond that the score saturates, because a 70%-off claim usually means something else is wrong.
2. History confidence — 20%
How many distinct daily price snapshots we hold for this ASIN. More history means we can be more confident the price drop is unusual. A deal on a product we've tracked for 547 days outscores the same drop on a product we first saw last week — because we know more about the baseline.
3. Popularity — 15%
Where the product sits in its category's sales rank. Top-decile sellers earn the full weight. We're not trying to surface forgotten oddities — if nobody buys it, it's not the deal of the day, however cheap it is.
4. Availability — 15%
Two binary checks. Is it in stock right now? Is it sold and dispatched by Amazon directly? Third-party sellers can vanish, ship slowly, or price-gouge — penalising them keeps the feed practical for readers who will actually click through.
5. Category quality — 10%
An editorial multiplier per category. Tech and kitchen score higher because deep discounts in those categories are usually tied to real product cycles. Books and toys score lower — fake markdowns are endemic. The multipliers are visible below and we publish changes in the changelog.
All-time low bonus — 5%
If today's price is the lowest we've ever recorded for the product, we add up to 5 points. Not because all-time lows are automatically buys — but because they're informationally valuable for readers running their own decision.
03 / Weights & mathsThe actual formula.
Each input is normalised to a 0–1 range, then multiplied by its weight. The final score is the rounded sum, capped at 100.
score = round(
clamp(discount_pct / 60, 0, 1) * 35
+ clamp(days_tracked / 365, 0, 1) * 20
+ clamp(popularity_pct / 100, 0, 1) * 15
+ ((in_stock ? 0.6 : 0) + (sold_by_amazon ? 0.4 : 0)) * 15
+ clamp(category_multiplier, 0, 1) * 10
+ (is_all_time_low ? 1 : 0) * 5
)Category multipliers
| Category | Multiplier |
|---|---|
| Tech | 0.95 |
| Kitchen | 0.90 |
| Home | 0.85 |
| Beauty | 0.80 |
| Garden | 0.70 |
| Fashion | 0.70 |
| Toys | 0.65 |
| Books | 0.60 |
Grade bands
We translate the numeric score into a four-tier grade for readability:
- Exceptional — 90 to 100. Top-decile signal across all inputs.
- Strong — 75 to 89. Above average, worth a look.
- Fair — 55 to 74. Decent discount, weaker supporting signals.
- Weak — below 55. Published rarely, mostly for transparency.
04 / A worked exampleSony WH-1000XM5 at £179.
Take a real deal from our seed catalogue: Sony WH-1000XM5 headphones, RRP £389, current price £179, sold by Amazon, in stock, with 547 days of price history showing this is the all-time low.
A score of 95 puts this deal in the top decile of everything we've published this quarter. The high reading isn't just the discount — it's the combination of a deep cut, a long history we can compare it against, and clean availability signals. Strip any one of those and the score lands meaningfully lower.
05 / Anti-junk filtersThings we will not publish.
Score is the headline, but it's not the only gate. Before a candidate reaches the review queue, it must pass these checks:
- Minimum reviews. Listings with fewer than 50 verified reviews are deprioritised. Brand-new SKUs surface only when manually approved.
- Review quality. Average rating below 3.8 stars triggers an editorial review before publish.
- Seller stability. ASINs sold by third-party sellers with under 95% positive feedback are excluded by default.
- Banned categories. No supplements, no weight-loss products, no anything age-restricted, no anything we wouldn't link our own family to.
- Suppression list. A small set of brands and ASINs editorially blocked because of historic price-gouging or quality complaints. The list is reviewed quarterly.
- Discount realism. Anything claiming 80%+ off is rejected automatically unless we can find the same product at the higher price in our own snapshots.
06 / Editorial overridesWhere humans come in.
Every candidate above a 55 score goes to a review queue. A human editor approves or rejects it. Approval rates run around 60% — most weak signals fail at this stage, even with a passing score.
Editors can demote a deal — publishing it with a lower visible score and a note on the page — or boost one, capped at +5 points. Boosts are rare. Every override is logged with the editor's name and reason, queryable in the score audit log. We'll publish quarterly stats on override rates.
We do not accept payment from brands or sellers for placement. Our affiliate revenue comes from Amazon when you click through and buy. The score has no input from the affiliate commission rate.
07 / ChangelogWhat's changed.
Every revision of this algorithm is logged here in plain English.
Version 1.2 — 7 June 2026
- Discount-magnitude saturation lowered from 70% to 60% after a year of data.
- History-confidence cap raised from 180 days to 365 days.
- Anti-junk filter added: discounts claiming 80%+ off auto-reject without internal price corroboration.
Version 1.1 — 14 March 2026
- Sold-by-Amazon weighting introduced inside the availability factor.
- Category multiplier table rebalanced after Q1 click-through analysis.
Version 1.0 — 12 December 2025
- Launch.
The actual code for the scoring function is in our open repository under src/lib/scoring.ts. Suggestions and corrections are welcome — open an issue, or write to the desk.