How we verify prices
Every number on this site is either something we watched a retailer charge or nothing at all. This page is the full method, including the cases where we refuse to show you a price.
Where the number comes from
Every price on the site today comes from Amazon, through the Amazon Creators API and never from crawling. It is the price Amazon offers a logged-out shopper in the United States: not a member price, not a cart-only price, not a price we typed in by hand. The Associates operating agreement forbids displaying hand-entered or scraped Amazon prices, and the older Product Advertising API v5 is deprecated and answers our requests with HTTP 403. If the Creators API has no price for an item, that item shows no Amazon price. It does not get an estimate.
We also built a crawler for Walmart, Target, Best Buy and Newegg, and it is switched off. On none of the four served a price it could read: Walmart answered with a bot check, Best Buy did not answer at all, and Target and Newegg draw the price with script rather than publishing it in the page. A retailer is added back only through its own API, and only then does it appear here.
How often it is re-checked
Amazon prices are re-read at least every 20 hours. Each card shows the exact timestamp of the check behind its number, so you never have to guess how old it is.
- Amazon
- A cached price may be displayed for 24 hours. That is the cap in Amazon’s IP license, not a preference of ours.
Past that window we hide the number and the card says “check price” instead. A stale price shown confidently is worse than no price: it sends you to a checkout expecting a figure that is not there.
How the “was” price is established
Not from the retailer’s claim. The strikethrough on a card is the highest price we recorded for that product at that retailer, and it appears only once we hold at least 7 observations for that pair.
Below that threshold there is no strikethrough, no percentage and no chart. With four data points every product is trivially at its all-time low, and an instrument that lies once is never trusted again.
The other thing a record can tell you
History here is written only when a price moves, so a product with a single observation is ambiguous: it can mean we have barely started, or it can mean the price has not shifted once since we began watching. Those are opposite facts, and for a long time this site reported both as “not enough to call this”.
So there is a second rule, and it is measured in time rather than in changes. Once we have watched a price stand still for 10 days (every check reading the same number), the card says so: unchanged for 21 days. That is not a claim that the price is low. It is a claim that waiting is unlikely to change it, which is the other half of the question a shopper arrives with.
Two weeks is the floor because a promotion would have ended inside it and a repricing bot would have fired. Below that, “held for three days” is noise. A price we cannot re-confirm recently enough to publish makes no stability claim either: standing still is only meaningful while we are still looking.
How long a drop lasts, and how we know
Because a price is written down only when it moves, the gap between one observation and the next is exactly how long the earlier price stood. A stretch is one run of observations at or below that retailer’s own lower quartile, and it runs from the drop to the observation that ended it.
We state a median only once a retailer’s record holds 3 finished stretches for that product, and the stretch in progress is never counted: including it would drag every median towards “shorter than it is”, which is the direction that manufactures urgency. Nothing in that sentence is a forecast: it says what past drops did, names how many there were, and stops.
Prices are read at least every 20 hours, so a drop shorter than that never reaches the record at all. Rather than print a figure the series cannot resolve, anything below the check interval is described as being below it.
How the discount is computed
Savings percentage is (was − now) ÷ was, floored to a whole number. 49.6% off is published as 49% off, never 50%. Rounding a discount up is the smallest possible lie and we do not have a reason to tell it. The minus sign is a true minus, not a hyphen, because the number is arithmetic and not decoration.
What “lowest in 11 days” and “90-day low” claim
Lowest in 11 days on a card means: the lowest price that one retailer has charged in the eleven days we have watched it. The number is the length of our record there, up to ninety; once we hold ninety days the card says 90-day low. The median on the card is labelled the same way. It does not mean lowest anywhere, and it does not mean lowest ever: a product page, which judges its whole record across every retailer, says “the lowest price we have recorded” instead, and only when that is true. The line under a card is drawn from the same single-retailer series the verdict reads, so the mark and the words can never disagree. See the correction of September 5, 2026, which is exactly the bug that rule exists to prevent.
What we refuse to publish
- Arithmetic impossibilities. A “list price” below the selling price, or a claimed discount of 95% or more, is never published in any form. The row is flagged and dropped.
- Unseen list prices. When a retailer’s claimed original price sits above anything we have observed in ninety days, the offer still appears and the strikethrough and the percentage do not. Far enough above, the deal is also flagged suspect_list_price and the card says what we did see.
- Prices past their window. See the table above.
What “expired” means, and how fast we notice
A deal is expired when our reads stop finding it: once it has not been seen for 36 hours, the sweep that runs every fifteen minutes marks it expired. So the worst case between a deal dying and us marking it dead is about a day and a half, and for most of that time its price is already hidden, because a price we have not re-read recently enough is never shown.
An expired deal page returns HTTP 410 Gone rather than redirecting you to the homepage. The product hub at /p/ keeps the price history and stays up permanently: the deal was the event, the product is the record.
Who we do not track, and why
- Membership-gated retailers such as warehouse clubs. The price behind a login is not the price a logged-out reader can act on, so we would be publishing a number most visitors cannot get.
- A marketplace seller’s own listing. We record the price in Amazon’s buy box whoever holds it (often a marketplace seller rather than Amazon itself), name that seller beside the price, and shade the stretches it held on the chart. What we do not follow is one seller’s listing after it loses the box: it disappears when that seller runs out, and a chart built from it describes nobody’s buying decision.
- Any retailer whose price we could only obtain by breaking its terms. That is why Amazon is API-only here.
What we cannot yet tell you
Our price record begins . Where you see a short series, it is short because our record is short, not because the product is new. We would rather show you an honest ninety-day window than a two-year chart we did not watch.