Singapore HDB Resale Flat Prices Scraper
hipersoft/singapore-hdb-resale-flat-prices
Export every HDB resale flat transaction in Singapore (1990 to present, ~945k records): town, flat type, block, street, storey, floor area, lease, resale price, price per sqm and remaining lease. Filter by town, flat type, street, price and month. Public open data, no setup.
Total users
1Monthly users
1Total runs
100Per transaction scraped
$0.002Last rebuilt
Oct 26, 2026Overview
Export every HDB resale flat transaction in Singapore — from 1990 to the present (~945,000 records) — into clean JSON, CSV or Excel. Each row has town, flat type, block & street, storey range, floor area, flat model, lease details, resale price, price per sqm and remaining lease. Powered by HDB's open data (data.gov.sg).
Perfect for property valuation, market research, price-trend analysis, renovation/agent tools and investment dashboards.

Why this actor
Unlike scrapers that only cover the latest dataset, this one unifies all of HDB's resale datasets (1990 → today) into a single feed, newest transactions first, and adds computed fields you'd otherwise have to derive yourself:
- 💲
pricePerSqm— resale price ÷ floor area - ⏳
remainingLeaseYears— parsed from the data, or computed from the lease-commencement year for older records - 🏠 Full record — month, town, flat type, block, street, storey range, floor area, flat model, lease commence year, resale price
Filters
town— e.g.TAMPINES,ANG MO KIO,BEDOKflatType— e.g.3 ROOM,4 ROOM,5 ROOM,EXECUTIVEstreet— match block+street textpriceMin/priceMax— resale price range (S$)monthFrom/monthTo—YYYY-MMrangemaxItems— cap the export (full history ~945k)
Example input
{ "town": "TAMPINES", "flatType": "4 ROOM", "monthFrom": "2024-01", "maxItems": 2000 }
Output

{
"month": "2026-07",
"town": "TAMPINES",
"flatType": "4 ROOM",
"block": "123",
"streetName": "SIMEI ST 1",
"address": "123 SIMEI ST 1",
"storeyRange": "10 TO 12",
"floorAreaSqm": 104,
"flatModel": "Model A",
"leaseCommenceYear": 1987,
"remainingLease": "61 years 04 months",
"remainingLeaseYears": 61.4,
"resalePrice": 653000,
"pricePerSqm": 6279,
"sourceUrl": "https://data.gov.sg/collections/189/view",
"collectedAt": "2026-07-30T12:00:00.000Z"
}
Output schema
| Field | Type | Description |
|---|---|---|
id |
string | Unique record ID for the transaction. |
month |
string | Transaction month (YYYY-MM). |
town |
string | HDB town, e.g. TAMPINES. |
flatType |
string | Flat type, e.g. 4 ROOM. |
block |
string | Block number. |
streetName |
string | Street name. |
address |
string | Full address (block + street). |
storeyRange |
string | Storey band of the flat, e.g. 10 TO 12. |
floorAreaSqm |
integer | Floor area in square metres. |
flatModel |
string | HDB flat model, e.g. Model A. |
leaseCommenceYear |
integer | Year the flat's 99-year lease began. |
remainingLease |
string | Remaining lease as text (years and months). |
remainingLeaseYears |
number | Remaining lease in decimal years. |
resalePrice |
integer | Resale transaction price in SGD. |
pricePerSqm |
integer | Resale price per square metre in SGD. |
sourceUrl |
string (URL) | data.gov.sg source the record was pulled from. |
collectedAt |
string (ISO date) | When this Actor collected the record. |
FAQ
Do I need an account or API key? No. Set your filters and run — no login, account, or API key is required.
How far back does the data go? Every HDB resale transaction from 1990 to the present (around 945,000 records), returned newest first.
Can I filter by town, flat type or price?
Yes. Filter by town, flatType, street, a priceMin/priceMax range and a monthFrom/monthTo window, and cap the export with maxItems.
What's the output format? Structured JSON — one clean record per transaction with town, flat type, address, floor area, lease details, resale price and price per sqm. Export it as JSON, CSV, Excel, or via the API.
Can I integrate this with other tools? The Singapore HDB Resale Flat Prices Scraper can be connected with almost any cloud service or web app thanks to integrations on the Apify platform. It works with Make, Zapier, Slack, Airbyte, GitHub, Google Drive and many more, plus the Apify API, JavaScript/Python clients and MCP. Or use webhooks to trigger an action whenever a run finishes.
Notes
Data is © HDB, published under the Singapore Open Data Licence (commercial reuse permitted). Use responsibly and in line with the licence terms.
Input
| Field | Type | Description |
|---|---|---|
townTown | string | Filter by HDB town, e.g. ANG MO KIO, TAMPINES, BEDOK. Leave empty for all. |
flatTypeFlat type | string | Filter by flat type, e.g. 3 ROOM, 4 ROOM, 5 ROOM, EXECUTIVE. Leave empty for all. |
streetStreet contains | string | Match transactions whose block+street contains this text. Leave empty for all. |
priceMinMin resale price (S$) | integer | Only transactions at or above this resale price. |
priceMaxMax resale price (S$) | integer | Only transactions at or below this resale price. |
monthFromMonth from (YYYY-MM) | string | Earliest transaction month, e.g. 2020-01. |
monthToMonth to (YYYY-MM) | string | Latest transaction month, e.g. 2026-07. |
maxItemsMax transactions | integer | Maximum transactions to return (newest first). Full history is ~945k. Default: 1000 |
API
curl -X POST "https://api.apify.com/v2/acts/hipersoft~singapore-hdb-resale-flat-prices/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"town": "",
"flatType": "",
"street": "",
"monthFrom": "",
"monthTo": "",
"maxItems": 100
}'from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("hipersoft/singapore-hdb-resale-flat-prices").call(run_input={
"town": "",
"flatType": "",
"street": "",
"monthFrom": "",
"monthTo": "",
"maxItems": 100
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('hipersoft/singapore-hdb-resale-flat-prices').call({
"town": "",
"flatType": "",
"street": "",
"monthFrom": "",
"monthTo": "",
"maxItems": 100
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);Pricing
| Event | Price | Paid plans from |
|---|---|---|
| Transaction scraped One HDB resale transaction record scraped. | $0.002 | $0.001 |
| API request One HDB resale dataset API request (a page of results). | $0.001 | $0.001 |
You pay only for what the run returns. Set a maximum cost per run and it stops cleanly at that limit.
Related scrapers
CNN Fear & Greed Index Scraper
Scrape the CNN Fear & Greed Index: current market-sentiment score and rating, a full historical timeline, and all seven component indicators. Clean structured JSON, CSV or Excel for trading signals, backtesting, dashboards and alerting.
547 runs · 6 users · $0.003 / item scrapedDivar Scraper
Scrape classified ads from Divar, Iran's largest marketplace: title, price (Toman), category, city, district, images and the listing URL. Search any Iranian city with an optional keyword and export one clean row per ad as JSON, CSV or Excel. For market research, price tracking and n8n.
224 runs · 22 users · $0.003 / listing scrapedAirbnb Scraper
Search Airbnb by location and scrape listings: name, property type, price, rating, reviews, coordinates, photos, badges and link. For short-term rental, pricing and market research.
122 runs · 2 users · $0.005 / listing scrapedSingapore HDB Property Information Scraper
Export master data for every HDB block in Singapore (~13,300 blocks): address, town, year completed, max floor, total units, unit mix by flat type (sold & rental) and amenities (market/hawker, carpark, commercial, pavilion). Filter by town, street, year. Public open data, no setup.
113 runs · 1 users · $0.002 / block scrapedPropertyGuru Singapore Scraper
Scrape PropertyGuru Singapore property listings: price, beds, baths, size, address, property type, agent and URL. For property research and lead generation.
106 runs · 3 users · $0.004 / listing scrapedEdgeProp Singapore Property Scraper
Scrape EdgeProp Singapore property listings for sale and rent: price, address, beds, baths, size, PSF and URL.
105 runs · 1 users · $0.004 / listing scrapedSend the site and the fields. We build it and you get it first.