Singapore HDB Property Information Scraper
hipersoft/singapore-hdb-property-information
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.
Total users
1Monthly users
1Total runs
113Per block scraped
$0.002Last rebuilt
Oct 26, 2026Overview
Export master data for every HDB block in Singapore — around 13,300 blocks — into clean JSON, CSV or Excel. Each row has address, town, year completed, max floor, total dwelling units, the full unit mix by flat type (sold & rental) and building amenities. Powered by HDB's open data (data.gov.sg).
Perfect for property tools, real-estate research, neighbourhood analysis, town planning and enriching HDB address data.

What you get, per block
- 📍 Location — block, street, address, town (full name, decoded from HDB codes)
- 🏢 Building — year completed, max floor level, total dwelling units
- 🏠 Unit mix (sold) — 1/2/3/4/5-room, executive, multi-generation, studio apartment
- 🔑 Unit mix (rental) — 1/2/3-room and other rental units
- 🛒 Amenities — residential, commercial, market/hawker, multi-storey carpark, precinct pavilion, miscellaneous
Filters
town— full name (e.g.Tampines) or HDB code (e.g.TAP)street— match block+street textyearFrom/yearTo— year-completed rangehasMarketHawker— only blocks with a market or hawker centremaxItems— cap the export (~13,300 total)
Example input
{ "town": "Bishan", "hasMarketHawker": true, "maxItems": 100 }
Output

{
"block": "151A",
"street": "BISHAN ST 11",
"address": "151A BISHAN ST 11",
"townCode": "BH",
"town": "Bishan",
"maxFloorLevel": 25,
"yearCompleted": 1997,
"totalDwellingUnits": 120,
"amenities": { "residential": true, "commercial": false, "marketHawker": true, "multistoreyCarpark": true, "precinctPavilion": false, "miscellaneous": false },
"unitsSold": { "oneRoom": 0, "twoRoom": 0, "threeRoom": 40, "fourRoom": 60, "fiveRoom": 20, "executive": 0, "multiGeneration": 0, "studioApartment": 0 },
"unitsRental": { "oneRoom": 0, "twoRoom": 0, "threeRoom": 0, "other": 0 },
"sourceUrl": "https://data.gov.sg/collections/150/view",
"collectedAt": "2026-07-30T12:00:00.000Z"
}
Output schema
| Field | Type | Description |
|---|---|---|
id |
string | Stable identifier for the block record. |
block |
string | HDB block number. |
street |
string | Street name. |
address |
string | Full block address. |
townCode |
string | HDB town code (e.g. BH). |
town |
string | Full town name, decoded from the HDB code. |
maxFloorLevel |
integer | Highest floor level in the block. |
yearCompleted |
integer | Year the block was completed. |
totalDwellingUnits |
integer | Total number of dwelling units in the block. |
amenities |
object | Flags for building amenities (residential, commercial, market/hawker, carpark, precinct pavilion, miscellaneous). |
unitsSold |
object | Count of sold units by flat type (1–5 room, executive, multi-generation, studio). |
unitsRental |
object | Count of rental units by flat type (1–3 room and other). |
sourceUrl |
string (URL) | Link to the source dataset. |
collectedAt |
string (ISO date) | Timestamp when the record was collected. |
Use cases
- Property & valuation tools — enrich HDB addresses with block-level attributes.
- Neighbourhood analysis — compare unit mix and amenities across towns.
- Town planning & research — study housing stock by year completed and flat type.
- Lead generation — target blocks with specific amenities like market/hawker centres.
FAQ
Where does the data come from? HDB's open data published on data.gov.sg under the Singapore Open Data Licence, which permits commercial reuse.
How many blocks can I export?
Around 13,300 blocks in total — use maxItems to cap the export and the filters to narrow it.
Is it current?
Each run reflects the latest published version of the dataset; collectedAt records when you pulled it.
What export formats are supported? JSON, CSV, Excel and XML, plus the Apify API for programmatic access.
Can I connect it to other tools? The Singapore HDB Property Information 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. Not affiliated with or endorsed by HDB or the Singapore Government.
Input
| Field | Type | Description |
|---|---|---|
townTown | string | Filter by town — full name (e.g. Tampines) or HDB code (e.g. TAP). Leave empty for all. |
streetStreet contains | string | Match blocks whose block+street contains this text. Leave empty for all. |
yearFromYear completed from | integer | Only blocks completed in or after this year. |
yearToYear completed to | integer | Only blocks completed in or before this year. |
hasMarketHawkerOnly blocks with market/hawker | boolean | Return only blocks that have a market or hawker centre. Default: false |
maxItemsMax blocks | integer | Maximum blocks to return. There are ~13,300 in total. Default: 20000 |
API
curl -X POST "https://api.apify.com/v2/acts/hipersoft~singapore-hdb-property-information/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"town": "",
"street": "",
"maxItems": 100
}'from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("hipersoft/singapore-hdb-property-information").call(run_input={
"town": "",
"street": "",
"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-property-information').call({
"town": "",
"street": "",
"maxItems": 100
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);Pricing
| Event | Price | Paid plans from |
|---|---|---|
| Block scraped One HDB block record scraped. | $0.002 | $0.001 |
| API request One HDB Property Information API request (a page of blocks). | $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 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 scrapedCrexi Commercial Real Estate Scraper
Scrape Crexi commercial real estate listings: price, address, property type, size, cap rate, broker and URL.
101 runs · 2 users · $0.0075 / listing scrapedSend the site and the fields. We build it and you get it first.