Singapore's HDB Maisonettes are some of the most sought-after public housing units in the country. With a history stretching back to the 1980s, these two-storey flats offer a premium living experience rarely available in the HDB market. To help prospective buyers and property enthusiasts make informed decisions, I've built an interactive HDB Maisonette Analytics Dashboard.
This guide walks you through every feature of the dashboard.
What is this Dashboard?
The HDB Maisonette Analytics Dashboard is a fully interactive data tool that visualises over 33,000 historical HDB Maisonette resale transactions from 1990 to the present. Powered by official data from data.gov.sg, it lets you:
- Explore price trends over more than 30 years
- Filter by town, year, storey, flat model, and price range
- Analyse median, minimum, and maximum transaction prices
- Identify high-volume towns and hotspots
- Understand the storey premium effect on prices
All processing happens in your browser — no servers, no tracking.
Getting Started
Open the HDB Maisonette Analytics Dashboard. The page will load and parse the full dataset automatically. You'll see a status banner confirming the number of live transactions matched.
Note: The dashboard needs to be served via a web server (not opened directly as a local file) due to browser CORS restrictions on loading CSV files. The blog handles this for you automatically.
Understanding the Layout
The dashboard has three main areas:
| Area | Purpose |
|---|---|
| Left Sidebar | All filters — town, price, year, storey, flat model |
| Top Section | KPI summary cards (Median, PSM, Max, Total Units) |
| Main Area | Three charts + Transaction Record table + Model Reference |
Using the Filters
The sidebar on the left gives you precise control over what data is displayed. Every filter updates the charts and table instantly in real-time.
Town
Select a specific town from the dropdown to focus on that area. Choose "All Regions" to see the full national picture.
Price Range
A dual-handle slider lets you set a minimum and maximum price. Drag the left handle up to set the floor, and the right handle down to cap the range. The exact price values are displayed above the slider in real-time.
Select Year
Another dual-handle slider to narrow down by transaction year. The label updates to show the selected range (e.g., 2018 to 2024). Leave both handles at zero to include all years.
Storey Level
Filter by storey range. For example, drag towards the right to see only high-floor units. The label shows the storey range in an intuitive format (e.g., 07 TO 18).
Flat Model
Four types of HDB Maisonettes were built (see the reference table at the bottom of the dashboard). Use the checkboxes to include or exclude specific models in your analysis.
Reset All
Click the Reset All link at the top of the sidebar to clear every filter and return to the full dataset view.
KPI Summary Cards
The four cards at the top of the main area show a quick summary of the currently filtered data:
- Median Price — The midpoint transaction price across all filtered records.
- Avg Price/SQM — The average price per square metre, useful for comparing value across different unit sizes.
- Max Transaction — The single highest recorded transaction price, with its location and month.
- Total Units — The exact count of transactions matching the current filters.
These numbers update every time you change a filter.
Historical Price & Volume Trend Chart
This is the centrepiece of the dashboard — a combined line and bar chart showing price trends over time.
Stat Toggle: Min / Median / Max
Use the three buttons in the top-right of the chart panel to switch between: - Min — The lowest transaction price recorded each month - Median — The middle price (default, most representative) - Max — The highest transaction price recorded each month
Mode Toggle: Price / SQM
Switch between viewing absolute transaction prices (S$) or price per square metre (S$/sqm). SQM mode is ideal for comparing value across different flat sizes.
The Volume Bars
Faint purple bars in the background show transaction volume (count) each month on the right Y-axis. This helps you spot periods of market activity — peaks often indicate buyer sentiment shifts.
Dynamic Y-Axis Scaling
Both axes automatically rescale based on the data visible under the current filters. This means the chart always makes full use of the display area, whether you're looking at one year of data or thirty.
Hotspot: Transactions by Town
A horizontal bar chart ranking towns by transaction volume within your current filter selection. The bars are labelled with exact counts.
This is your best tool for answering the question: "Where do most Maisonette transactions happen?"
Popular towns like Ang Mo Kio, Bishan, and Bedok consistently rank at the top. Narrow town or model filters will reshape this chart dramatically.
Storey Level vs Median Price
This chart shows the storey premium — the well-known phenomenon where higher floors command higher prices. Each storey range is plotted against the median transaction price for that level.
Use this alongside the Storey Level filter to understand how much extra you'd typically pay to go up a few floors.
Transaction Record Table
The table below the charts shows the individual transactions that match your current filters.
- Sort any column by clicking on the column header.
- Search by street name or block using the search bar.
- Paginated at 15 rows per page — use Prev / Next to navigate.
Columns include: Month, Town, Street, Floor Area, Storey, Lease Commencement, and Price.
HDB Maisonette Model Reference
At the very bottom is a quick reference guide to the four official HDB Maisonette flat models:
| Model | Size | Era | Notes |
|---|---|---|---|
| Maisonette (Standard) | 138–145 sqm | 1980–1984 | Original design |
| Improved Maisonette | 140–150 sqm | 1985–1987 | Very rare |
| Model A Maisonette | 145–160 sqm | 1988–1992 | Better floor plan |
| Premium Maisonette | 150–170 sqm | 1988–1995 | Best design & fittings |
Use this table when filtering by the Flat Model checkboxes to understand what you're looking at.
Data Freshness
The dataset is sourced from the official HDB Resale Flat Prices API. The data shown reflects all transactions up to the last update. The dashboard is periodically refreshed to keep up with new listings.
Practical Use Cases
Buying a Maisonette? 1. Set the Town filter to your preferred area. 2. Toggle the Year slider to the last 2–3 years. 3. Switch to the Median stat to see what price to realistically expect. 4. Check the Max Transaction KPI to understand the ceiling.
Comparing Value Across Models? 1. Use the Flat Model checkboxes to isolate one model at a time. 2. Switch to SQM mode in the trend chart. 3. Compare the SQM price across Model A vs. Premium to see if the premium is worth it.
Spotting Market Trends? 1. Clear all filters (Reset All). 2. Look at the Historical Price & Volume Trend chart. 3. Observe the volume bars — high volume + rising prices often signal strong demand.
Happy house hunting! 🏠