The PropKaki Wave™
Singapore's quarterly tracker of HDB flats reaching their Minimum Occupation Period (MOP) — the point at which resale eligibility begins. Derived from block-level completion records published by HDB on data.gov.sg. First published Q2 2026 by PropKaki (Straits Intelligence Pte. Ltd.).
Definition
The PropKaki Wave measures how many sold HDB flat units are estimated to reach MOP in a given quarter — i.e. become eligible for open-market resale for the first time. It is a forward-looking supply indicator: a rising Wave reading signals a larger cohort of first-time resale-eligible flats entering the HDB resale pool that quarter.
MOP is fixed at 5 years from key collection under current HDB rules (Standard and Plus model flats). Prime / PLH model flats carry a 10-year MOP, but they represent a small share of total stock and are not separately identified in the source dataset; for current PropKaki Wave purposes they are modelled at 5 years alongside standard flats — a conservative assumption that slightly overstates near-term PLH supply.
Scope and data source
Source dataset: HDB Property Information (data.gov.sg resource ID d_17f5382f26140b1fdae0ba2ef6239d2f), updated regularly by the Housing and Development Board. The dataset covers all HDB blocks island-wide from 1937 to the present, with block-level fields for year_completed, total_dwelling_units, and sold unit counts by flat type (1-room through executive). All data is fetched via the official CKAN API at data.gov.sg.
Flat types included: All sold flat types — 1-room, 2-room, 3-room, 4-room, 5-room, executive, multigeneration, and studio apartment sold units are summed into mop_units_total_qtr. Flat types tracked individually: 3-room, 4-room, 5-room, and executive (the four types most relevant to the HDB resale market). Rental units (*_rental fields) are excluded — they have no MOP requirement.
Completion year floor: Only blocks with year_completed ≥ 2010 are included, placing MOP years at 2015 and later. Older cohorts are excluded — their MOP windows have long passed and including them would add noise to the historical baseline without adding insight.
Quarter distribution rationale: HDB key-collection exercises historically cluster in the second half of the year, with H2 key collections accounting for a disproportionate share of annual completions. PropKaki applies a 15% / 15% / 35% / 35% split across Q1–Q4 within each completion year. The Q4 quarter receives the arithmetic remainder after Q1–Q3 rounding, ensuring unit counts are conserved exactly at the block level.
Computation steps
| Step | Action |
|---|---|
| 1 | Fetch all records from HDB Property Information via the CKAN datastore_search API, paginating at 1,000 records per request. |
| 2 | Filter to blocks where residential = "Y". |
| 3 | Filter to blocks where year_completed ≥ 2010. |
| 4 | For each qualifying block, sum sold unit counts across all flat types to get total sold units per block. |
| 5 | Skip blocks where total sold units = 0 (commercial-only blocks with no dwelling units). |
| 6 | Compute MOP year = year_completed + 5. |
| 7 | Apply the quarter distribution: Q1 = round(n × 0.15), Q2 = round(n × 0.15), Q3 = round(n × 0.35), Q4 = n − Q1 − Q2 − Q3. |
| 8 | Repeat the split independently for 3-room, 4-room, 5-room, and executive unit counts. |
| 9 | Accumulate split units into per-quarter maps (key: "YYYYQn"), summing across all blocks that share the same MOP year. |
| 10 | Upsert five series into market_series (vertical: residential_hdb): mop_units_total_qtr, mop_units_3room_qtr, mop_units_4room_qtr, mop_units_5room_qtr, mop_units_exec_qtr. |
Suppression rules
Unlike transaction-based metrics, the Wave has no minimum-transaction suppression threshold — the HDB dataset is a complete census of blocks, not a sample. A quarter with few MOP units is a genuine low-supply reading, not a data artefact.
However, quarters where the data.gov.sg API returns zero records (i.e. the fetch fails or the dataset is temporarily unavailable) are not written to market_series — the sync is skipped with a logged reason code rather than overwriting existing data with zeroes.
Interpretation notes
The Wave is a stock-based estimate, not a transaction count. It represents units that become eligible to be listed on the open market, not units that are actually transacted. Actual resale volume in a quarter depends on seller willingness, prevailing prices, and market conditions — the Wave measures only the supply pool that is newly unlocked.
Because the source dataset provides only year_completed (not month or quarter of key collection), the quarter distribution is modelled, not observed. PropKaki calibrates the 15/15/35/35 skew against HDB's published pattern that completion key-collections are disproportionately H2-weighted — but individual projects may distribute differently.
The dataset does not distinguish BTO projects from SERS redevelopment stock. SERS flats carry the same 5-year MOP from key collection and are correctly included in the Wave; they represent a small minority of completions in most years.
Prime / PLH model flats (launched from 2022 onwards) carry a 10-year MOP. They are included at 5 years in the current methodology, meaning the Wave slightly overstates near-term PLH resale supply. A separate PLH adjustment series is planned for v1.1 once reliable project-to-block mapping is available.
Town-level breakdown (v1.1)
From v1.1, the Wave is also computed per HDB town, using the same block-level source records and the same MOP-year and quarter-split logic as the national series — town granularity changes only how results are grouped, not how each block's MOP timing is estimated.
Town assignment: each block in the source dataset carries an internal HDB bldg_contract_town code (e.g. TAP for Tampines, YS for Yishun) rather than a full town name. PropKaki maps all 27 distinct codes present in the dataset to Singapore's 26 public HDB towns (one code, CT, and one code, KWN, both resolve within the Central / Kallang-Whampoa area; TG resolves to Tengah, a town not covered by PropKaki's other HDB series). This mapping was verified against every code's full set of street addresses in the source data, not assumed from the code alone.
Quarter-skew assumption applies uniformly per town: the 15/15/35/35 Q1–Q4 split is calibrated against HDB's island-wide key-collection pattern. There is no independent per-town H2-skew dataset to confirm the same seasonal pattern holds identically in every town — this is a modelling assumption carried down from the national methodology, not a town-specific observation.
Suppression: town-quarter figures below 5 units are withheld (not published as a small number, and not published as zero) — a town-quarter of 1–2 units is statistical noise at this level of granularity, not a meaningful supply signal, and publishing it invites misreading as a data error.
Reconciliation: because every block belongs to exactly one town, the sum of all town-level figures for a given quarter is required to equal the national total for that quarter exactly. This check runs on every sync; a mismatch blocks publication rather than surfacing as a silent discrepancy.
Series keys and API access
All series are available via PropKaki's free JSON API (no key required):
All series return integer unit counts per quarter. The mop_units_total_qtr series equals the sum of all flat types (including 1-room, 2-room, multigeneration, and studio apartments) and will be larger than the sum of the four individually tracked series. Town-level series (v1.1) follow the same hdb_town_mop_units_{type}_qtr_{town} key pattern and omit any town-quarter below the 5-unit suppression threshold.
Citation
Preferred citation for the PropKaki Wave:
When quoting a specific quarter's reading, include the quarter and flat type, e.g.: "An estimated 4,200 HDB units reached MOP in 2025Q3, of which 1,800 were 4-room flats (PropKaki Wave™, methodology v1.1)." When citing a town-level figure, name the town explicitly, e.g. "An estimated 740 HDB units reached MOP in Tampines in 2026Q3 (PropKaki Wave™, town-level, methodology v1.1)."
Full citation formats, BibTeX, and licence terms: /market/cite.
Version history
| Version | Date | Change |
|---|---|---|
| v1.1 | 2026 Q3 | Added town-level breakdown: the same five series computed per HDB town (25 of 26 public towns represented in the ≥2010 completion window, plus Tengah). Town assignment via HDB's bldg_contract_town block code, verified against street-level data. Town totals reconcile exactly to the national series each sync; town-quarters below 5 units are withheld. PLH 10-year MOP adjustment still planned for a future version. |
| v1.0 | 2026 Q2 | Initial publication. Source: HDB Property Information (data.gov.sg). Scope: all residential sold units, year_completed ≥ 2010. Quarter skew: 15/15/35/35 (Q3/Q4-heavy). Five series: total, 3-room, 4-room, 5-room, executive. PLH 10-year MOP adjustment planned for v1.1. |
Quarterly HDB MOP supply tracker with flat-type breakdown and forward projections: How many HDB flats reach MOP each quarter in Singapore?
PropKaki Gap™ — freehold vs leasehold condo PSF premium, quarterly. PropKaki Curve™ — HDB resale prices by remaining lease. PropKaki Affordability Index™ — years of median income to buy the median HDB resale flat.