CompareSG

How CompareSG works

Comparison sites are easy to build badly. Most of the work here is deciding what not to print.

The short version

We pick one thing to price up, like a 45-minute beginner piano lesson or an underarm wax. We read the price off every business's own website and date it. On our service comparisons we check each price by hand as well. Then we line everyone up from cheapest to priciest and tell you exactly where we drew the lines.

We rank by price only. Cheapest isn't the same as best, and we don't rate quality.

Where the prices come from

Every price comes from the business's own website or its own published price list. Nothing comes from a review site, a directory, a news article, a booking platform or a voucher site. Those go stale. In one of our comparisons, a guide quoted a school at S$349 a month when the school's own page said S$399.

We use guides and directories for one thing only: finding names. Prices shown only as an image, or on pages that block automated readers, are captured by hand. That means a screenshot of the business's own page, taken with the address bar showing. If we can't get one, the business is listed as "couldn't be read" and nothing is said about its prices.

What "comparable enough" means

No two businesses sell exactly the same thing. One bakery's croissant is a little bigger. One teacher has a different syllabus. If we waited for perfect matches, we'd publish nothing.

So each comparison defines one standard item, such as "entry-level, one-to-one, 45 minutes, billed per month". We compare prices that are comparable enough for a fair reading, and we take small differences at face value. The same rule applies to every business in the comparison. Each comparison also says where the line was drawn, so you can judge for yourself.

Some verticals hold two products that don't line up, like waxing per visit and laser per session. Those get separate ladders, and we never mix them.

What gets left out, and why

  • Prices that aren't published. "Contact us for a quote" isn't a price. Those businesses are listed neutrally, with the page we checked.
  • Prices that don't line up fairly. A flat rate, a per-term fee and a price tiered by teacher experience can't share a ladder.
  • Trials, first-time offers and vouchers. A first-time price isn't what a regular customer pays. These go in a separate deals table. They are never ranked and never divided into a per-session price.
  • Unlimited and lifetime plans. There's no session count, so there's no per-session price. We show them, but we don't rank them.
  • "From" prices. A "from" price is a floor, not a typical price. We rank one only if it names the exact item, and we draw it differently.
  • Out-of-date pages. If a page's own date is more than about two years old, or its tax sums use a rate that no longer applies, we don't rank it until the price is confirmed.

Every comparison has a "What isn't compared, and why" section that lists its own exclusions.

How we check

On the service comparisons (piano lessons, hair removal and the ones since), every ranked price is read from the business's own page and logged with the page and the date. The bakery comparison was the pilot and works at a different scale: whole menus, 4,682 listings read off 104 bakery websites. Its own page explains what it covers and where it stops. For the service comparisons, the checks are:

  • For each price we record the source address, the date we checked it, and the page's own date where it shows one. We keep a saved copy or screenshot.
  • Prices are recorded as published. Where a page shows both, we use the price with GST, because that's what you pay. Where a page doesn't say, we say "not stated" and never adjust the number.
  • A price worked out from another (for example a per-lesson price times four) is labelled "derived".
  • Where a business shows a usual price beside a promotion, we check the two agree.
  • The highest and lowest prices, and any derived price, are read a second time on the day we publish. Each comparison says whether that was the live page or a saved copy.
  • If a business's own pages disagree with each other, we show both figures and say which one we used.

How we count

Every comparison states its coverage, like this: N businesses with published prices, out of at least M we found in Singapore. M is our own count from searching. It's a floor, not an official figure, and there are surely more.

  • We count businesses, not branches. A chain with one published price is one row.
  • Businesses we found but haven't read yet are listed by name in the comparison, with nothing said about their prices.
  • We stop adding businesses when the remaining leads stop paying off. Each comparison says when we stopped and how many leads were left.

Dates and corrections

Every comparison shows a last-verified date. We freeze the data before we analyse it, so the comparison matches one snapshot. Old snapshots are kept and never overwritten.

We'll be wrong sometimes. Prices change, menus rotate, and pages get updated after we've read them. If you spot a mistake, or you run one of the businesses, tell us. We'll check it against the source. Corrections don't cost anything, and each one goes in the public corrections log with its date.

Who's behind this

CompareSG is built by Ben (opens in a new tab), who makes messy data respectable. Got messy data of your own? Say hello.

No business can pay to rank higher

No payment, gift or sponsorship affects who is included, how they rank or how they are described. The comparisons are free to read, with no login.

If this site ever earns money, that will be kept completely separate from the comparisons, and the method on this page won't change to fit it.