Skip to content

Methodology

What this site publishes

For every region, district and neighbourhood in Singapore: the median resale price per square foot, the median resale price, the 20th–80th percentile spread, a 95% interval on the median, the transaction count, the share of local stock that changed hands, a quarterly history back to 1990 in cash terms and in today’s money, cuts by flat type, storey band and remaining lease, and rent and gross yield by flat type. Where the area also has a private market, the same questions are answered again from the URA registers, on their own windows and their own counts, and the two are never averaged together.

This build covers 985,666 resale transactions from January 1990 to August 2026, against a stock of 1,175,956 flats in 10,796 residential blocks.

Four registers, four anchors

Everything on this site is computed from four public registers, and the registers are never pooled: HDB resale registrations and HDB renting-out approvals from Data.gov.sg, and URA private sale caveats and private lease contracts from the URA Data Service. Each records a different event on a different filing rhythm, so each carries its own anchor month, the latest month whose filings have substantially arrived. Ending every register at the same calendar month would quietly turn the newest month of the slower one into a half-empty sample, which is how a “latest figure” comes to describe a month that has not finished arriving.

So an HDB figure and a private figure on the same page may state windows ending in different months, and each names its own. The one figure built from two registers at once, the gross yield, is published only where the two anchors agree, and withheld with its reason where they do not.

What a number may claim

A handful of editorial rules bind every figure on the site. A count printed beside a figure is that figure’s own denominator, never a larger number borrowed from a wider sample. Every count states the window it was counted over. A statistic withheld is withheld with its reason in the open, and the reasons render differently: no data at all, a sample below the publishing floor, and a figure the rules do not allow are three different statements, never one bare dash. Rounding happens once, and what the reader sees is what every downstream surface, the JSON files included, carries.

The window each figure covers

Each area uses the shortest window in 12, 18 or 24 months that holds at least 30 resales.

A median over six sales is not a market statistic. Counts and medians are only comparable between areas that share a window, so every figure states its own.

The floor is 30 resales, and the window an area actually used is published on the area itself (window_months on every area), beside every count it governs. Two areas are compared only when their windows are stated, and the compare pages suppress their verdict when the windows differ.

The headline figure

The area headline is the median price of a named flat type: the 4-room where the area has one, its commonest type otherwise.

HDB flats come in standardised types; a 4-room is 93 square metres across the island. A buyer transacts on the price of a 4-room in Tampines, not on a rate. The rate is published beside it, mix-adjusted.

The headline names its flat type everywhere it appears, so the figure can never be read as “this area’s price”. Where the sample behind it sits below the publishing floor, the figure still renders, qualified in the sentence itself and beside the parent area whose sample does clear it: a thin median stated as plain fact and a thin median hidden entirely are both failures, and the page does neither.

The mix-adjusted rate

Every area also publishes its per-flat-type medians restated at Singapore's national flat-type distribution, weighted from the stock rather than from what transacted.

Smaller and older flats carry a higher price per unit area, so a raw blended rate is substantially a statement about an area's flat-type mix. Comparing two areas on the raw figure compares their stock composition as much as their prices, so the league tables rank on the adjusted one.

Withheld where an area's flat types cover too little of the national distribution to stand for it.

This is the site’s one rule about ranking. Every ordered list of areas anywhere on the site ranks on the mix-adjusted rate, at the same floor and the same window, and a raw blended rate appears only beside its adjusted counterpart, labelled unadjusted.

Where the sample is too small

Below 30 resales even at the longest window, the figure is marked below the floor and its confidence grade is capped at Low, however narrow the interval: an order statistic over a handful of resales can be arithmetically tight and still not be a market rate.

Withholding it entirely would leave a reader with nothing where a caveated figure plus a comparison is more use. What is never done is presenting it as reliable.

In this build 19 areas sit below the floor and carry that flag.

Outliers

An impossibility band, not a statistical fence: a price per square foot outside $5 to $3,000, or a floor area outside 15 to 600 m2, is withheld as a keying error. Nothing is ever dropped: only the rate is withheld, and the sale keeps its place in every count.

NOTHING IS DROPPED. An outlier verdict withholds the row's price per unit area and nothing else: the sale still counts in the transaction count, still appears in the resales table, still contributes to the median price.

In this build the band withheld a price per unit area from 0 of 985,666 priced sales (0.000%), which is a statement about the register rather than about the rule.

What each figure is a figure of

Every HDB resale registered in the window. First-hand BTO sales are not resales and are not in this source.

Every residential block in the area, from HDB Property Information, including blocks that have never transacted. Non-residential blocks (carparks, markets, pavilions) are excluded.

Resales in the window as a share of the flats that were legally ABLE to sell, annualised. A flat inside its five-year Minimum Occupation Period cannot be resold, so it is excluded from the denominator; without that, young estates are mechanically understated and two areas of different vintage are not comparable.

Price and floor area arrive on the same HDB record, so there is no address match to run, no match rate to publish and no matching bias to correct for.

Uncertainty

A 95% interval on every published median, computed from the order statistics of the sample itself.

Distribution-free, and exact for the statistic actually published. A median with no interval invites a reader to treat two areas 1 percent apart as different when the samples cannot tell.

The same interval per quarter, where the quarter holds enough resales to support one; this is the band behind the trend line.

The confidence label sits on the same line as that interval and grades its width as a share of the figure above it, on thresholds set for this market rather than borrowed from another. Two areas whose medians differ by less than their intervals cannot be told apart by their samples, and the compare pages say exactly that rather than crowning a winner.

Each register grades its own median against its own interval, and neither grade is ever borrowed across. A grade is a statement about how much evidence a figure rests on, not about the market it describes: a High grade on a private median does not make private property a safer purchase, it makes that particular median a tighter estimate.

Rounding

Three significant figures on every price per unit area.

A median of 693 sales is not precise to the dollar, and printing $971.43 would claim it is.

Remaining lease

Every HDB flat is a 99-year leasehold, and the remaining lease is the figure the whole market prices against: financing tightens as the tail shortens, CPF usage is restricted against it, and a 49-year flat and an 87-year flat are different assets at the same address. So the lease figure here comes from HDB’s own published value wherever it exists, and is derived from the lease commencement date only for the older transactions that predate it. The distinction matters: the arithmetic ignores the month the lease started, and mis-bands a small but real share of rows against HDB’s own figure.

The price-by-lease section on an area page conditions on the area’s reference flat type, so the curve is a lease effect rather than a mix effect, and it needs enough resales in each band before it draws anything. Where too few bands clear that, the section says so instead of disappearing.

The quarterly series

Quarterly medians back to 1990. A quarter with fewer than ten resales publishes no median and leaves a gap in the line; its sales still count and its volume bar is still drawn, because a count needs no sample. The newest quarter is marked provisional while the anchor month is not its third, and is excluded from every growth figure.

Growth endpoints are averaged over several quarters at each end, so a single unusual quarter cannot swing the figure.

Compound annual change between the two named quarters, in cash terms.

The growth figure in an area’s answer paragraph and the one on its Evolution tab are computed over different spans and will differ slightly. Both name the span they cover.

Today’s money

All four quarterly series here (HDB resale prices, private resale prices, HDB rents and private rents) can be restated in today's money, and all four use the same adjustment: the figure for a past quarter multiplied by SingStat’s Consumer Price Index (All Items) today over the index in that quarter, in 2026-07 money. There is one inflation definition on this site, so two charts on one page can never disagree about what a 2021 dollar was worth.

All Items rather than an accommodation-only index, deliberately, and the same choice for prices and for rents: the comparison a reader wants is against everything else their money buys. Deflating rent by a rent index would flatten the very series it was applied to. Where the index does not yet reach a quarter, that point has a cash figure and no restated one, and the real line simply ends earlier.

A decade of cash-terms growth is substantially a statement about the currency rather than about the market. Switching a chart to today’s money answers the question underneath the one the cash line answers: not “has the number gone up” but “does it buy more than it used to”.

Geography

The hierarchy is region, then district, then neighbourhood: three levels, each one a measured subset of the one above, from URA Master Plan 2019 boundaries. Nothing is in it that does not nest. Street is not a level: a road crosses these boundaries too often to be one, so it resolves a search to the page that publishes its figures instead.

URA Master Plan 2019, with every block placed against those boundaries from published coordinates.

Where an area does not lie wholly inside a layer, that rung is left out rather than guessed. A missing rung costs one level of detail; a chosen one would put a sale in the wrong market.

URA’s postal districts (D1–D28) and market segments (CCR/RCR/OCR) are not part of this taxonomy and have no pages, because neither nests inside it: a postal district cuts across the districts here, and a market segment is defined over a postal district and a planning area at once. A classification that cannot be an ancestor is not a level. Both remain searchable, and answer with every district and neighbourhood they cover rather than picking one.

How a transaction is placed

HDB publishes a block and a street on every resale, and placement runs in order of evidence quality: a block with a known coordinate is placed against the URA Master Plan 2019 boundaries directly, and a block without one inherits its placement from its street, but only where the addresses already resolved on that street agree. A block that none of that can place is published as unplaced rather than guessed, because a guess renders identically to a fact.

Which rung placed each block ships in the data, and the area pages state it: a measured placement and an inherited one must not read identically. The placement is deterministic, so the same registers produce the same geography every time.

How much of the register each level covers

Every transaction belongs to exactly one entity at each level below, or to none of them; where it belongs to none, it is counted here rather than dropped. “Recent” is the 12 months every published figure is drawn from; “all years” is the 1990-01 to August 2026 register behind the long trend charts, where the gaps are.

Share of the register each geographic level places, recent and all years
LevelRecentAll yearsNot placed, all years
Region99.5%99.5%5,368
District99.4%99.3%6,885
Neighbourhood99.3%98.9%11,072
Street99.5%99.5%5,368

Where a block cannot be placed, it is COUNTED as unplaced rather than dropped or guessed at. The remainder is almost entirely blocks in estates demolished in the 1990s, which no coordinate source has ever held; they affect the long trend charts and no current figure. Every level is checked on each build to make sure its placed and unplaced rows still add up to the whole register.

Rent and yield

Rent self-declared by the flat owner on the renting-out application and approved by HDB. It is not a registry price and not an asking rent.

Where HDB withholds a median for a town and flat type as too thin to publish, so does this site.

Gross yield is a year of median rent divided by the median resale price FOR THE SAME FLAT TYPE. An area-wide rent over an area-wide price is a mix artefact: the rental market skews to small flats and the resale market to large ones.

A yield is published only where its two halves cover the identical twelve months and both clear their own publishing floor. Where either fails, the yield is withheld with the reason stated, never computed across mismatched spans.

Every HDB flat is a 99-year leasehold, so a gross yield here is not comparable to a freehold yield. A shorter lease is cheaper to buy and therefore yields more while wasting faster; the remaining lease is published beside every yield.

The HDB rental register carries its own anchor month, computed by the same rule as the resale register’s, and the yield is withheld whenever the two disagree: a ratio whose numerator and denominator end in different months is not a yield, it is two statistics wearing one name. On the private side the join is stricter still, because URA reports rental floor areas in bands: a private yield is computed only where a rental band matches a sale band like for like, and the wider bands are excluded from yields entirely rather than approximated into one.

Revisions

HDB restates months as registrations land. Each build compares itself against the last and refuses to ship on a transaction-count move beyond 10 percent.

Every check the pipeline ran for the build you are reading, and its result, is published at /data/quality.json, and the table at the end of this page renders it in full.

Citing these figures

Every statistical page carries a citation line naming the page, the dataset version and the licences, and links its own data as JSON. When citing a figure, cite its window and its count with it: “the median 4-room resale price in Tampines” is not one number across time, it is a number per window, and the dataset version is what makes a quoted figure checkable against the build that produced it. The full dataset behind every page, and the machine-readable endpoints it is served from, are described at /dataset.

Sources

  • HDB Resale Flat Prices

    HDB via Data.gov.sg

    Grain
    transaction
    Records
    985,666
    Coverage
    1990-01 to 2026-08
    Licence
    SODL v1.0
  • HDB Property Information

    HDB via Data.gov.sg

    Grain
    block
    Records
    10,796
    Coverage
    current residential stock
    Licence
    SODL v1.0
  • URA Master Plan 2019 boundaries

    URA via Data.gov.sg

    Grain
    subzone / planning area / region
    Records
    332
    Coverage
    all of Singapore
    Licence
    SODL v1.0
  • List of Postal Districts

    URA, crediting SingPost

    Grain
    district
    Records
    28
    Coverage
    all of Singapore
    Licence
    public reference
  • Consumer Price Index (All Items)

    SingStat via Data.gov.sg

    Grain
    month
    Records
    n/a
    Coverage
    to 2026-07
    Licence
    SODL v1.0
  • Block coordinates

    OpenStreetMap

    Grain
    block
    Records
    n/a
    Coverage
    see the geography section
    Licence
    ODbL
  • Private residential transactions (caveats)

    Urban Redevelopment Authority, Data Service

    Grain
    caveat
    Records
    132,768
    Coverage
    2021-09 to 2026-09
    Licence
    URA Data Service terms
  • Private residential lease contracts

    Urban Redevelopment Authority, Data Service

    Grain
    lease contract
    Records
    451,165
    Coverage
    2021-09 to 2026-08
    Licence
    URA Data Service terms
  • Renting Out of Flats

    HDB via Data.gov.sg

    Grain
    approved rental application
    Records
    209,852
    Coverage
    2021-01 to 2026-08
    Licence
    SODL v1.0

What the build checks before it ships

Every figure on this site is produced by a pipeline that refuses to publish data failing its own invariants, and warns where a figure has moved more than expected since the last build. The checks cover the things that would make a number wrong rather than merely surprising: that every transaction is counted once and in one place, that no median is published on a sample below its floor, that an interval contains the figure it brackets, that every ordered list ranks on the estimator it names, and that geographic coverage has not quietly fallen. A build that fails any of them does not ship, and production keeps serving the previous dataset.

75 of 75 checks passed for the build you are reading. The full result, check by check, is published as machine-readable JSON at /sg/data/quality.json.

The private market

This site publishes two registers, and never combines them. HDB resale prices come from the Housing & Development Board via Data.gov.sg. URA Data Service: private residential caveats (sales) and lease contracts (rentals), both rolling five-year windows.

Private and HDB are published side by side and never combined: different buyers, eligibility, tenure, and a three- to five-fold price gap. A median across both would describe neither. Where an area has both, both are shown side by side; where it has only one, the page says which.

The private headline is RESALE. A new sale is a developer pricing unbuilt stock at launch, and in a district where launches dominate the caveats, blending the two lifts the published rate well above what a resale buyer actually pays. The launch median is published beside the headline, never inside it.

Price per unit area covers strata units only. A landed plot is measured by its land area, so its rate is not comparable to an apartment's floor area; landed sales keep their price and their place in every count.

Measured across Singapore, new sales run substantially above resales per square foot in every part of the island, which is why the two are never pooled. Executive condominiums are separated for a different reason: an EC is sold under HDB eligibility rules with a five-year minimum occupation period, so it is cheaper than a comparable condominium because of its restrictions rather than its location. Collective (en-bloc) sales are land transactions between owners and a developer, counted separately from dwelling resales and never given a price per square foot.

The private price history is cut from exactly the population the private headline is: resale only, ordinary private housing only, strata rates only. Executive condominiums and landed are excluded from both, because an EC is a subsidised product sold under HDB eligibility rules and landed is priced on land rather than floor area.

The by-property-type table is the one cut that reaches WIDER than the headline, deliberately: it is where landed splits into terrace, semi-detached and detached instead of vanishing, and where an executive condominium appears as itself. Its rows therefore do not add up to the headline count, and the table says so above itself.

Private rents and yields

Private rents come from lease contracts lodged with URA. A published rental price per square foot is URA's OWN median, not one computed here: URA reports each contract's floor area as a band rather than a figure, so a rate cut from contract data would be a band-midpoint estimate wearing the precision of a measurement. The number of projects behind that rate is published with it.

Private gross yield is a year of median rent divided by the median resale price FOR UNITS OF THE SAME FLOOR-AREA BAND, over the same twelve months, and only where both sides clear their publishing floor. Matching on size is what stops it being a mix artefact: the rental market skews to small units and the sale market to large ones. Gross means before maintenance, property tax, agent fees, income tax and vacancy.

The private rent-by-size table carries only the size bands that can be matched to a sale band without folding two sizes into one. That leaves contracts out, so the table states what share of the area's lettings it covers.

URA records a bedroom count on a rental contract and does not record one on a sale caveat, so bedrooms describe what renting costs and can never be matched to what buying costs.

HDB and private rents are two registers and are never combined. HDB counts approved renting-out applications; URA counts lodged lease contracts. The only figure that legitimately spans them is the gross yield, because it is a dimensionless ratio, and even there the assets differ: every HDB flat is a 99-year lease that cannot be let at all during its first five years, while a private unit may be freehold.

The step from public housing to private

The step from public housing to private is measured between two registers, never averaged across them: the area's median private resale against the median for its reference HDB flat type, published only where both clear their own publishing floor. They are not the same home, so the figure the page states is not that step at all: it is the ratio of the two registers' own median rates per square foot for the whole area, each of them the same rate published elsewhere on the page. Both counts, each register's own window and the cash step are published with it, and stamp duties are excluded.

What it is not: a statement that the flat a particular household owns would buy the condominium they want. These are two market medians standing side by side, not a matched pair of homes, and the page says so where it prints them.

Comparing two areas

The compare pages apply every rule above at once, which makes them the strictest surface on the site. A pair is offered only where both sides publish, so the picker cannot lead to an empty page. The verdict, which area is dearer, is computed on the mix-adjusted rate, never the raw one, and it is suppressed entirely when the two medians’ 95% intervals overlap: the honest sentence there is that the samples cannot tell the two areas apart, and the page says exactly that instead of crowning a winner by a margin narrower than the noise. Where the two sides publish on different windows, the verdict is withheld and both windows are stated. Nothing on a compare page averages the two areas, and nothing on it compares an HDB figure with a private one.

The policy timeline

Singapore’s resale market moves on policy as much as on demand: loan-to-value ceilings, the Mortgage Servicing Ratio, Additional Buyer’s Stamp Duty rounds and grant changes each mark visible breaks in the series. The quarterly charts therefore carry the major cooling and support measures as a dated list beside the chart, not as annotations painted onto it: a list can be read, cited and corrected, while an annotation at a chart’s scale is decoration. Each event states its date, and the list states the date it was last reviewed, so a measure announced after that date is a known gap rather than a silent one. The affordability tab’s stamp duties, loan ceilings and servicing ratios each carry an as-at date, because a stale rule stated confidently is worse than none.

Addresses and names

HDB records street names in abbreviated source forms, and the site expands them before they reach a heading, a title or a sentence, so a street cannot be spelt two ways on two surfaces. HDB’s own town names are an alias layer rather than a page level: most HDB towns match a planning area of the same name and resolve straight to it, and the two that straddle several resolve to every planning area that covers them, listed, rather than to one silent guess.

How this site is tested

The build is the test suite. The dataset is validated before any page is written, the rendered pages are then read back and checked against the data they claim to describe, and the pipeline is run twice with the output compared byte for byte so that a figure cannot change without an input changing. Nothing is published by hand. Where a check fails, the build stops rather than shipping the page.

What this site does not cover

First-hand sales are not here. BTO flats sold by HDB and the developer’s own first-hand records are not resale transactions and are not in either source, beyond the launch caveats URA lodges.

Net yields are not published. What a landlord actually keeps depends on maintenance, property tax, agent fees, vacancy and their own tax position, none of which this site knows. Every yield here is gross and says so.

No valuation, of any kind. This site publishes statistics about transactions that have already happened. It does not estimate what any particular flat or unit is worth.

No distance factors, yet. Distance to an MRT station and school catchments move prices, and no figure here adjusts for either, because no data layer on this site currently measures them. That is stated as a limit rather than bolted on badly: a distance adjustment needs its own geocoded source, its own methodology and its own gates, and it will be added as one or not at all.

No income-based affordability. The affordability tab computes the transaction costs and financing rules that apply to a purchase (stamp duties, the loan ceilings, MSR and TDSR at the regulated stress rate); it makes no claim about local incomes, because no income data at this geography exists in the sources.

Search an area

Median HDB resale price per square foot, resales and price history for any district or neighbourhood in Singapore.