HDB Resale Transactions Singapore avatar

HDB Resale Transactions Singapore

Pricing

from $0.50 / 1,000 result items

Go to Apify Store
HDB Resale Transactions Singapore

HDB Resale Transactions Singapore

Extract Singapore HDB resale transaction data from the official data.gov.sg API. 900k+ records from 1990 to present.

Pricing

from $0.50 / 1,000 result items

Rating

0.0

(0)

Developer

Unfenced Group

Unfenced Group

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Banner

Every HDB resale flat transaction in Singapore, from January 1990 to the present — around 889,000 records. Filter by town, flat type, and month range. No API key required.


Why this scraper?

🏙️ Complete history

All HDB resale transactions since 1990 in one place — close to 889,000 records across the full period.

🔍 Precise filtering

Filter by town, flat type, and month range. Pull just one estate for one quarter, or the entire national history.

📐 Derived price intelligence

Every record includes price per square foot and price per square metre in SGD, computed for you — not just the raw resale price.

🏠 Full flat detail

Town, block, street, storey range, flat model, floor area, lease commencement, and remaining lease where available.

💸 Lowest price in category

The most affordable HDB resale source on the Apify Store — many times cheaper than the alternatives.


Input parameters

FieldTypeDefaultDescription
townstring""Filter by HDB town, exact match (e.g. BISHAN, TAMPINES). Empty returns all towns.
flatTypestring""Filter by flat type, partial match (e.g. 4 ROOM, EXECUTIVE). Empty returns all types.
monthFromstring""Only transactions on or after this month (YYYY-MM). Empty for no lower bound.
monthTostring""Only transactions on or before this month (YYYY-MM). Empty for no upper bound.
datasetPeriodsarray["2017-present"]Which source periods to query: 1990-2014, 2000-2016, 2017-present, or all.
maxResultsinteger5Maximum number of transactions to return.
requestDelayMsinteger300Delay between page requests in milliseconds.

Output schema

FieldTypeDescription
monthstringTransaction month (YYYY-MM).
transactionYearintegerYear of transaction.
transactionQuarterstringQuarter of transaction (Q1–Q4).
townstringHDB town.
blockstringBlock number.
streetNamestringStreet name.
addressstringCombined block and street.
flatTypestringFlat type (e.g. 4 ROOM).
flatModelstringFlat model (e.g. Improved, New Generation).
storeyRangestringStorey range (e.g. 10 TO 12).
storeyMinintegerLower bound of storey range.
storeyMaxintegerUpper bound of storey range.
floorAreaSqmnumberFloor area in square metres.
floorAreaSqftnumberFloor area in square feet (derived).
resalePricenumberResale price in SGD.
priceCurrencystringAlways SGD.
priceTextstringFormatted price string (e.g. SGD 550,000).
pricePerSqftSGDnumberPrice per square foot in SGD (derived).
pricePerSqmSGDnumberPrice per square metre in SGD (derived).
leaseCommenceDateintegerYear the lease commenced.
remainingLeasestringRemaining lease (2017-present dataset only; null otherwise).
leaseAgeYearsintegerYears since lease commencement.
sourcestringAlways data.gov.sg.
datasetPeriodstringSource dataset period the record came from.
scrapedAtstringISO timestamp of retrieval.
contentHashstringStable hash of the transaction for deduplication.
{
"month": "2026-05",
"transactionYear": 2026,
"transactionQuarter": "Q2",
"town": "BISHAN",
"block": "284",
"streetName": "BISHAN ST 22",
"address": "284 BISHAN ST 22",
"flatType": "4 ROOM",
"flatModel": "Model A",
"storeyRange": "10 TO 12",
"storeyMin": 10,
"storeyMax": 12,
"floorAreaSqm": 92,
"floorAreaSqft": 990,
"resalePrice": 720000,
"priceCurrency": "SGD",
"priceText": "SGD 720,000",
"pricePerSqftSGD": 727,
"pricePerSqmSGD": 7826,
"leaseCommenceDate": 1992,
"remainingLease": "65 years 08 months",
"leaseAgeYears": 34,
"source": "data.gov.sg",
"datasetPeriod": "2017-present",
"scrapedAt": "2026-06-25T00:00:00.000Z",
"contentHash": "a1b2c3d4e5f6a7b8"
}

Examples

All recent transactions in Bishan:

{
"town": "BISHAN",
"datasetPeriods": ["2017-present"],
"maxResults": 100
}

4-room flats in Tampines for 2025:

{
"town": "TAMPINES",
"flatType": "4 ROOM",
"monthFrom": "2025-01",
"monthTo": "2025-12",
"maxResults": 500
}

Executive flats nationwide, full history:

{
"flatType": "EXECUTIVE",
"datasetPeriods": ["all"],
"maxResults": 2000
}

Single quarter snapshot across all towns:

{
"monthFrom": "2026-04",
"monthTo": "2026-06",
"datasetPeriods": ["2017-present"],
"maxResults": 1000
}

💰 Pricing

$0.50 per 1,000 results — you only pay for transactions actually returned.

ResultsCost
100~$0.05
1,000~$0.50
10,000~$5.00
100,000~$50.00

Flat-rate alternatives typically charge $29–$49/month regardless of usage.

Use the Max results cap in the input to control your spend exactly.


Performance

Run sizeApproximate time
100 recordsunder 10 seconds
1,000 recordsunder 30 seconds
10,000 records2–4 minutes

Known limitations

  • Town and flat-type filters apply to the official town names used by the source data (e.g. ANG MO KIO, BUKIT BATOK). Spelling must match.
  • remainingLease is only available for transactions from 2017 onward; earlier records return null.
  • Data reflects what the source has published and may lag the most recent transactions by a short period.

Technical details

  • Source: data.gov.sg — Singapore government open data on HDB resale transactions
  • Coverage: January 1990 to present, around 889,000 transactions
  • Memory: 512 MB
  • Retry: Automatic retry on network errors, exponential backoff

Other scrapers in our Real Estate — Singapore collection:


Run it on a schedule

This actor is built for repeat use. Set it to run daily, weekly, or hourly, and the data keeps flowing without you touching it.

  • Schedule runs — open the actor, go to Schedules, and pick a cadence. Each run only charges you for the results it returns.
  • Connect it to your stack — push results straight to Google Sheets, Slack, a webhook, or your database using Apify Integrations. No glue code needed.
  • Pull results via API — every run writes a clean dataset you can fetch with one API call, ready for whatever you build on top of it.

Set it once and it runs on its own.


Need a custom scraper?

Unfenced Group builds Apify actors for any website — for free.

If the site you need isn't in our portfolio yet, just ask. We scope, build, and publish it at no cost to you. You only pay for results — we absorb the compute and proxy costs ourselves. Same pay-per-result pricing, same quality, same standards as every actor in this portfolio.

Get in touch: www.unfencedgroup.nl