Methodology

What each figure measures, what it is derived from, and where it stops.

Every number here comes from a published government dataset, moved through arithmetic that is written down. Nothing is estimated, modelled or scored by a language model. Where a figure cannot be produced honestly, the page says so instead of producing one.

The one rule everything else follows

A model never assigns a number. Blindspot’s score comes from a published formula in lib/blindspot/rubric.js. Language models on this site write prose around figures that are already fixed, and are told which figures they may use. If a feature needs a model to produce a number, that is treated as evidence the feature is wrong rather than evidence the rule should bend.

How often each dataset is refreshed

The interval is how often the source publishes, not how often it is convenient to ask. This table is generated from the same list the scheduler runs, so it cannot drift from what actually happens.

DatasetCheckedWhy that interval
soradailyMAS publishes SORA every business day
transactionsdailyHDB and URA file new transactions continuously, with a lag of weeks
price-indexevery 80 daysthe resale price index is quarterly
ppievery 80 daysURA's private residential price index is quarterly
mopevery 80 daysHDB Property Information changes a few times a year
amenitiesevery 180 daysstations, schools and hawker centres barely move
rentalevery 30 daysURA files rental contracts quarterly, but in rolling batches
boundariesevery 365 daysthe Master Plan is redrawn about every five years — this is a formality, not a refresh
gls-awardsevery 3 daysURA republishes the past-sites sheet as each tender is awarded
planningevery 7 daysURA decides applications continuously and the current year grows all year
zoningevery 365 daysthe Master Plan land use layer changes on the statutory review, not on a feed

A dataset is only re-downloaded when it is past due, and the deploy happens only when the data actually changed — so a quiet day produces no commit rather than a timestamp with nothing behind it.

What “filed” means

A transaction appears here once it has been filed with the authority and published by it — a lodged caveat for private property, a registered resale for HDB. That is not the day the deal was agreed. A caveat is typically lodged some weeks after the option is exercised, and the agency publishes it after that.

So the most recent weeks are always thinner than they will eventually be, on this site and on every other. A month that looks quiet may simply not have finished arriving. Nothing here back-fills silently: the period covered is printed beside the figures it produced.

What each derived figure is

Median price, and median psf
The middle of the filed transactions for that address over the period shown — calculated here, not supplied by the agency. Per square foot uses the area as filed (strata area for private, floor area for HDB), which is not the same as usable space. A median of one sale is not a median, and a record with a single filed transaction says so rather than printing a range with identical ends.
Observed range and spread
The cheapest and dearest psf actually filed, not a confidence interval and not a forecast. Where a home sits inside it depends on floor, facing, renovation and lease, none of which the transaction record contains.
Floor premium
Measured within a single building by comparing filed sales in different storey bands, never by applying a national curve to a specific address. A curve that does not rise with height is refused rather than applied. Both agencies publish a storey band, not a floor.
Gross rental yield
Filed annual rent over filed price, matched on unit size band. Gross, not net— it carries no maintenance, tax, insurance, vacancy, agent fee or financing cost, and those are the difference between a yield and an income.
Blindspot score
Six checks scored against a published rubric. A check that cannot run scores nothing and says so; it is never counted as zero risk, and the denominator shown is the number that actually ran.
Price indices
Published quarterly by the agencies and used unrebased. HDB’s runs from 1990-Q1. Both share a 1Q2009 = 100 base, which is what lets them sit beside each other. An index is a market and a home is one home: applying one to a single address says what the market did, not what that address did.
Historical windows
Every holding period of the reader’s own length that has run in the index, counted rather than turned into a probability — overlapping windows are not independent trials. Where the record holds fewer than four non-overlapping stretches of that length, the section refuses to read rather than reporting a count that is one history read many times.
Distances
Straight-line, always labelled as such. What sits between two points — a canal, an expressway, a fence — is in no dataset held here, so a walking time would be a guess presented as a measurement. The 1km school band is ballot priority, not a place.

What is deliberately absent

A valuation of any specific home. A projection of a launch price. A score for a project. A walking time. A school place. Any use of REALIS, which is licensed for personal research and not for commercial use. The reasons are set out, one by one, on what this site will not do.

Where a figure is wrong

Two different things get confused here. If a filed transaction looks wrong, it is wrong at the agency — nothing on this site can correct a caveat, and it is not edited on the way through. If a derivation, a name, a coordinate or a match looks wrong, that is this site’s to fix. Say which, at the contact on the about page, with the page you were on.

Contains information from HDB Resale Flat Prices (data.gov.sg) accessed on 2026-09-10 from data.gov.sg, made available under the Singapore Open Data Licence v1.0Contains information from URA Data Service — PMI_Resi_Transaction accessed on 2026-09-10, made available under the Singapore Open Data Licence v1.0