How we decide whether a Shopee price is actually a deal
Every verdict on this site rests on the same process. It is written out here in full, partly so you can disagree with it, and partly because most of what follows was learned the hard way and is not obvious from the outside.
Looking for what a word on one of our price pages means — "lowest", "normal price", "in stock on", the 11.11 "number to beat"? That is How we price, further down.
1. We keep our own price record
Once a day, the price and stock level of roughly nine thousand Shopee Singapore listings are captured from Shopee's own affiliate product feed and written to a dated file in a public repository. There are currently 75 such files, running from 2026-07-30 to 2026-10-16. Nothing here is scraped: the feed is data Shopee publishes to affiliates, and no product page is ever automatically fetched.
This matters because it makes a "was" price checkable. A sale sticker's crossed-out number is chosen by the seller. Ours is a file with a date on it that we cannot revise after the fact.
2. What that record revealed: Shopee's feed publishes two price lists
The single most useful thing we have found is that the feed does not carry one price per product. It alternates between two, and it switches the entire catalogue at once.
Measured across 24 consecutive daily snapshots: on ordinary days between 1.1% and 9.5% of prices changed. But on five of those days, 33.8%, 39.7%, 43.7%, 45.3% and 47.3% of the entire catalogue changed at once — and then changed back at the next switch. There is nothing in between; the distribution has a wide empty middle.
The practical consequence for a shopper: a one-day price drop is frequently not a drop at all, just the other list. It is also why one regime can run for six days in a row, which is long enough for a price to look convincingly "stable" while being nothing of the sort.
So a price event only counts here if it survived a switch — the low price was still there after the whole catalogue flipped. That single rule rejects more candidates than any other.
3. Is the aisle a market, or one company?
"Cheaper than comparable listings" is meaningless if the comparable listings belong to the same company. This is much more common than it looks, because one company sells under many brand names.
Measured examples from our own data: every in-stock powerbank in the feed was Anker, which also sells as Zolo, Nano and MagGo. Every whey protein was Optimum Nutrition. Of 26 oral-care listings, 25 were Listerine. The router aisle looked like three companies until we checked the storefronts — Deco, Tapo and Archer are all TP-Link, and all 228 of those rows ship from one shop.
A peer set therefore has to span at least three independent corporate groups and at least three independent storefronts. The second test exists because the first is not enough: one storefront can carry several brands, and if one seller sets half the prices in a comparison, that comparison is a catalogue, not a market.
4. Comparing like with like
A false comparison is not a small error — it is the misleading-price problem this site exists to call out, committed by us. Things that have been caught doing exactly that, each now blocked by a test:
- A replacement filter and a sample sachet priced against the full-size products they belong to. They always look cheap, because they are not the product.
- A 1.2-litre tabletop dehumidifier reported as "41% below" a pair of 12-litre machines.
- A clip fan and a pedestal fan treated as the same purchase, which made a S$59.90 stand fan look 59% cheap against a shelf of S$17.90 clip fans.
- Gift-with-purchase rows listed at a placeholder S$999, quietly inflating the median of every aisle they sat in.
- A "toilet foam spray" compared against washing-machine cleaner and dishwashing-liquid multipacks, because the marketplace files them all under one category.
5. A person opens the listing
Four things decide a verdict and none are in the data feed: the real prices of each variant, the number of ratings behind a score, the lifetime units sold, and whether the photograph matches what ships. Someone opens each candidate and reads them.
This is where most survivors die. In one recent batch, three listings were out of stock despite the feed showing stock; one "robot vacuum" was a 500ml bottle of cleaning fluid for a robot vacuum; and one appliance turned out to be three different models sharing a price. Of 24 candidates that cleared every automated check, 4 were published.
6. The verdict, and what it is not
A verdict is one of three words — worth it, worth a look, skip — and it always appears beside the evidence it rests on, including the uncomfortable parts. If four of eleven comparable listings are cheaper than our pick, the page says so in the same breath as the claim.
Commission is not an input. The code that forms a verdict is never given the commission field, and automated tests assert that the identical listing earns the identical verdict at a 1% and a 99% commission rate. This is checked on every build rather than promised here.
And a verdict is about price only. Nothing here has been tested, used, or reviewed. A star rating shown on a page is Shopee's, labelled as Shopee's.
7. Pages age in public
A static page cannot know today's price, so every price here carries the date it was observed, is re-checked daily against the newest record, and visibly warns you when it has gone unverified. If the price rises above what we recorded, the page withdraws its own claim rather than waiting to be corrected.
How we price
The sections above are about deciding whether something is a deal. These are about the prices themselves: where each one comes from, and exactly what the words beside it mean.
8. Where our prices come from
Every price on this site is a reading of Shopee Singapore's affiliate product feed: a file Shopee itself generates for its affiliates. Our robot downloads it once a day, early in the morning Singapore time, from the one Shopee affiliate address it is allowed to contact. It never opens a Shopee product page, and nothing here is scraped.
For each listing we keep the feed's sale price — the price after the seller's own discount, never the crossed-out list price — its stock count, and the separate prices the seller gives each variant. A day the robot could not read is simply missing from the record; it is never filled in by guesswork. We hold 75 daily readings, from 30 Jul 2026 to 16 Oct 2026.
9. The two price lists, and what we do about them
Section 2 describes the feed's two whole-catalogue price lists. We count a day as a switch when more than 20% of all listings changed price overnight and the catalogue moved from one list to the other. Which list was live on each day is kept in a committed file, so a later day can never quietly relabel an earlier one. So far we have caught 11 switches in 75 daily readings, and a typical switch moves prices about 11% with no sale attached.
What that changes on our pages:
- A listing with at least 8 readings, every one of them within 1% of either its lowest or its highest price (and each of the two seen more than once), is described as being at "the lower (or upper) of two prices it alternates between" — not as being at its lowest.
- When today's reading is at a listing's own low and the whole feed is on its cheaper list that day, the line says "at its low, but the whole feed is on its cheaper list today" — and likewise "at its high, but the whole feed is on its dearer list today". We name the two together; we do not claim the list is the cause. A low reached while the feed is on its dearer list is named as exactly that.
- The 11.11 number to beat (below) is built from the stretches between switches, so a low that lasted one stretch cannot set it.
10. What the words beside a price mean
- Lowest we recorded
- The lowest of that listing's daily readings in our record. The grey line under a guide row gives the whole range, lowest to highest, and how many days it covers — or "on every one of N readings" when the price never moved.
- "Today: …" on a guide row
- Where today's reading sits inside that listing's own range: held at one price throughout, at its lowest or highest, near the bottom or top, or mid-way — with the two-list wording above wherever it applies. We say nothing until we hold at least 3 readings.
- Normal price
- The price the listing sat at on the most days in our record. When two prices tie, the dearer one counts, so a cheaper sale price cannot become "normal" just by tying with it. It is never simply the highest price we saw.
- Usual price
- Shown beside the Shopee button on a price page, and only when it is honest: we need at least 20 of the listing's last 30 readings, the listing must have sat at exactly its middle (median) price on at least 30% of them, and that price must be the same as its normal price. Otherwise no usual price is shown.
- Typical price
- Where a summary gives one, the median of the readings it describes: half were at or below it, half at or above.
- In stock on <date>
- The feed reported a stock count above zero for that listing on the day the guide's prices were recorded. Where the feed gave no stock figure we print nothing, and a row recorded with no stock is marked "Sold out" and gets no Shopee link. Stock changes quickly; check the listing.
- 11.11 number to beat
- For each listing, the lowest price it was at or under in at least two separate stretches between list switches: a low it came back to, not a one-off. Where it went lower in one stretch only, that price is shown beside the number with its dates, and never used as the number. The record behind it runs from 30 Jul 2026 to 11 Oct 2026 (70 daily readings) and closes 31 days before the 11.11 peak day, so sale prices cannot set their own bar. A listing gets a number only with at least 6 readings of S$1 or more in that record, only if it was in stock at S$1 or more in our newest reading (below S$1 the feed carries voucher and gift rows, not prices), and never if its variants are priced differently (section 11).
11. When a listing's variants cost different amounts
Many listings sell several variants — sizes, colours, bundles. The feed gives one price per listing and does not say which variant it belongs to. When the seller prices the variants differently, that one price cannot be tied to one product, so comparing it from day to day could compare one variant with another.
We read this from the seller's own list of variant prices in the feed, not from guesses about the title. Which listings had differently priced variants, and on which days, goes into a history file kept since 1 Sept 2026 (the first day we recorded them) and brought up to date each evening. A listing counts as variant-priced if its variants were priced differently on any day of the period a page compares from 1 Sept 2026 on, not just today. Days before 1 Sept 2026 cannot be checked, so a listing whose variants were priced differently only before then is not caught. Such a listing:
- is left out of our price guides, which say how many rows were left out — and so out of the cheapest-per-unit table built from them;
- is never compared on the 9.9 pages, though an aisle table still lists it with its prices: no "below its normal price", no place among the falls, no part in what the sale did, and no part in a shelf's normal-price range. Nor is a listing that has not been in the feed since we began recording variant prices;
- gets no 11.11 number to beat, and the shelf says how many listings got none for that reason;
- shows only its latest reading in the price checker — no normal price, no range, no chart;
- gets no price page of its own while it is variant-priced in the feed.
12. How we are paid, and what that does not change
Some links are affiliate links — we may earn a commission at no extra cost to you. Deals are independently curated.
A link that can earn us a commission is one of Shopee's own affiliate links. It is marked as sponsored for search engines, and every page on this site carries the disclosure above.
Commission never decides what you see: not the order of a list, not a verdict, not what is highlighted. That is enforced in the code, not promised:
- The code that forms a verdict is never handed the commission figure, and a test checks that the same listing gets the same verdict at 1% and at 99% commission.
- The ranking code does not take commission as an input. Guide tables are ordered by price per unit (or by price on a shelf where no sizes are stated), with sold-out rows last, and 11.11 tables by the number to beat.
- The commission figure is removed from every deal before a page receives it, so no page can show it or sort by it, even by accident. Tests check that it is gone, that no page reads our deals file except through that one step, that the code reading the file for the price checker and price pages never touches the figure, and that no page template mentions it.
Found something wrong? Every deal page has a "Tell us" link, or write to [email protected]. Corrections run through this same process, so the price history stays intact.