Get HDB and condo resale estimates, comparable transactions, and confidence labels through one API. Power property screening, mortgage workflows, and customer-facing tools without building and maintaining your own valuation model.
No credit card required · Pay per successful call
Negotiating volume or enterprise terms instead? Request pilot access.
HDB 5-room, Kallang/Whampoa, Blk 12 Nth Bridge Rd · 114 sqm · storey 20 · lease commenced 1975
6 comparable sales, price-per-sqm spread of 3.1% across them.
| Month | Storey | Price |
|---|---|---|
| 2026-03 | 16–18 | S$840,000 |
| 2026-01 | 07–09 | S$810,000 |
| 2025-08 | 22–24 | S$825,000 |
Real output from a live /resolve-postal-code → /valuation call chain, not a mockup — see the identical request in the quickstart below. Same-block resale transactions, 24-month lookback.
Three workflows this API is already powering evaluation for — each one turns a valuation into a concrete step in someone else's product, not a standalone tool.
Attach an estimate, confidence label, and supporting comparables to every listing or saved search — the same evidence a human analyst would pull, returned inline as structured JSON.
Get a defensible estimate at the point a case enters your pipeline, before a formal valuation is commissioned — useful for early affordability checks, not a substitute for one.
Give agents the same comparable-sales reasoning across every listing, instead of ad hoc research per property — one call, the same methodology every time.
Two saved, verified examples — no signup needed to look. These are real recorded API responses, not live requests; get your own key to run this against any Singapore address.
HDB 5-room, Kallang/Whampoa, Blk 12 Nth Bridge Rd · 114 sqm · storey 20 · lease commenced 1975
6 comparable sales, price-per-sqm spread of 3.1% across them. Medium reflects a modest sample size, not a data-quality problem.
Condo, leasehold, Treasure at Tampines, District 18 · 63 sqm · floor 01–05 · lease commenced 2018
85 comparable sales from this project alone, price-per-sqm spread of just 4.5%, 100% genuine resale (not new-launch or sub-sale pricing).
| Month | Storey | Price |
|---|---|---|
| 2026-03 | 16–18 | S$840,000 |
| 2026-01 | 07–09 | S$810,000 |
| 2025-08 | 22–24 | S$825,000 |
Showing 3 of 6 comparables used — the full list is in the API response tab.
| Month | Floor | Price |
|---|---|---|
| 2026-07 | 06–10 | S$1,112,000 |
| 2026-06 | 01–05 | S$1,210,000 |
| 2026-06 | 06–10 | S$1,240,000 |
Showing 3 of 85 comparables used — the full list is in the API response tab.
{
"property_type": "hdb",
"estimated_value": 857600.0,
"estimated_psm": 7522.81,
"estimated_psf": 698.89,
"confidence": "medium",
"confidence_reason": "6 comparable(s), psm spread (CV) 3.1%",
"comp_tier": "radius",
"radius_km_used": 0.5,
"radius_auto_selected": true,
"lookback_months": 24,
"remaining_lease_months": 576,
"comparables": [
{ "month": "2026-03", "storey_range": "16 TO 18", "resale_price": 840000.0, "adjusted_psm": 7521.75 },
{ "month": "2026-01", "storey_range": "07 TO 09", "resale_price": 810000.0, "adjusted_psm": 7637.02 },
{ "month": "2025-08", "storey_range": "22 TO 24", "resale_price": 825000.0, "adjusted_psm": 7084.8 }
]
}
Trimmed for readability — 3 of 6 comparables shown, and each comparable's fields are a subset of what the live API returns (full shape at /docs).
{
"property_type": "condo",
"estimated_value": 1129900.0,
"estimated_psm": 17935.35,
"estimated_psf": 1666.25,
"method_used": "comparable_sales",
"confidence": "high",
"confidence_reason": "85 comparable(s), psm spread (CV) 4.5%, 100% of weight from Resale",
"comp_tier": "project",
"resale_weight_share": 1.0,
"lookback_months": 18,
"remaining_lease_months": 1092,
"comparables": [
{ "contract_month": "2026-07", "floor_range": "06-10", "price": 1112000.0, "adjusted_psm": 16415.24 },
{ "contract_month": "2026-06", "floor_range": "01-05", "price": 1210000.0, "adjusted_psm": 19206.35 },
{ "contract_month": "2026-06", "floor_range": "06-10", "price": 1240000.0, "adjusted_psm": 18304.76 }
]
}
Trimmed for readability — 3 of 85 comparables shown, and each comparable's fields are a subset of what the live API returns (full shape at /docs).
Saved examples, captured 10 Sep 2026 — not live requests. Get a key to run this on any address.
Backtested against real, held-out resale transactions — comparables restricted to strictly prior calendar months, so no test-set valuation ever sees data from its own or a later month. Reported the way lender-grade AVMs report: median absolute % error, valuation coverage, and % within ±10%.
Benchmark updated 27 Aug 2026, on an untouched test set — not the same rows used to tune the model. Condo/EC coverage is 98.8%, not 100%, because a small share of district-wide fallbacks withhold a point estimate rather than guess (see below).
On live calls (not the backtest above), a same-month transaction is legitimate available information and may be used — the strictly-prior-month rule applies only to how these validation figures themselves are measured. Full detail, sample sizes, and known limitations → Methodology.
An API-first alternative built to be called from inside your product, not visited by an end user — your customers never see our brand.
Every valuation returns the comparables used and their individual adjustment factors — time and storey for HDB; time, floor, and building-vintage for condo — not a black-box number.
When a property lacks enough of its own comparable history, the API falls back to a hedonic regression model rather than forcing a weak comparison — and never hides which method produced a given number.
HDB and private residential share one property_type field on the same endpoints, both keyed off postal code — verified against real address data, not ported in from a US or UK AVM.
Tested, copyable examples — the exact request behind the sample valuation above.
10 free calls, no card required, instantly at /get-access.
Chain /resolve-postal-code into /valuation, or call /valuation directly if you already have structured address data.
Use the estimate, confidence label, and comparables inline in your own product — a loan form, a pricing engine, a portfolio dashboard.
curl -s -X POST https://www.sgpropertyapi.sg/v1/valuation \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"town": "KALLANG/WHAMPOA",
"street_name": "NTH BRIDGE RD",
"block": "12",
"flat_type": "5 ROOM",
"floor_area_sqm": 114,
"storey": 20,
"lease_commence_date": 1975
}'
import requests
resp = requests.post(
"https://www.sgpropertyapi.sg/v1/valuation",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"town": "KALLANG/WHAMPOA",
"street_name": "NTH BRIDGE RD",
"block": "12",
"flat_type": "5 ROOM",
"floor_area_sqm": 114,
"storey": 20,
"lease_commence_date": 1975,
},
)
print(resp.json()["estimated_value"]) # 857600.0
const resp = await fetch("https://www.sgpropertyapi.sg/v1/valuation", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
town: "KALLANG/WHAMPOA",
street_name: "NTH BRIDGE RD",
block: "12",
flat_type: "5 ROOM",
floor_area_sqm: 114,
storey: 20,
lease_commence_date: 1975,
}),
});
const data = await resp.json();
console.log(data.estimated_value); // 857600.0
/cov takes the same body plus asking_price and adds
price_vs_estimate_gap. The same endpoints value condo/EC/apartment
units too — pass "property_type": "condo" with
district/area_sqm/floor_range/tenure_type
instead of the HDB fields shown here. Full parameter reference and a live
"Try it out" console → /docs.
No seat fees, no minimums. You only pay for a successful valuation.
/valuation or /cov/resolve-postal-code free and unmetered, always≈ S$80.00 / month at S$0.80/call
This is the ongoing metered rate. The 10 free calls are a one-time trial per signup, not a recurring monthly allowance — they don't reduce this estimate.
HDB resale flats and private residential (condo, apartment, Executive Condominium) resale, across Singapore — valuation and asking-price-vs-estimate comparison are both live on the same endpoints. Landed property, rental yield, price trends, and en-bloc probability are on the roadmap, not available yet — get in touch if you want early access to a specific one.
Built on public data.gov.sg HDB resale data and URA private-residential transaction data, refreshed periodically through this API's own ingestion pipelines — not a one-time snapshot. See the licensing notes in the footer for source and access details.
High/medium/low, based on how many comparable transactions support the estimate, how tightly their price-per-square-metre agrees, and (for condo) how much of that evidence is genuine resale versus new-launch or sub-sale pricing. It's always returned alongside the number, never hidden. Full definitions → Methodology.
Rather than force out a weak guess, the API returns a 422 with a clear reason when there's a genuine data gap — either too few district-wide comparables, or, for a thin/new condo project, too few transactions from that specific project. You always know why a call didn't produce an estimate, instead of silently getting a number nobody should trust.
One HTTP call, JSON in and out — see the quickstart above, or the full parameter reference with a live "Try it out" console at /docs. No SDK required.
10 free calls per signup, no card required. After that, S$0.80 per successful call to /valuation or /cov — /resolve-postal-code is always free. A failed request (422/404) is never billed and never counts against your trial. Need custom volume terms? Get in touch.
SG Property API is operated by Smart Growth Technologies (UEN 53398715J).
SG Property API — built on public data.gov.sg HDB resale data. Not financial advice; valuations are estimates, not appraisals.
Contains information from HDB Resale Flat Prices, accessed on 2026-07-24 from data.gov.sg, which is made available under the terms of the Singapore Open Data Licence version 1.0.
Contains information from URA Private Residential Property Transactions (PMI_Resi_Transaction), accessed on 2026-07-24 from the Urban Redevelopment Authority (URA), which is made available under the terms of the Singapore Open Data Licence version 1.0.
Licence: https://data.gov.sg/open-data-licence. Both datasets are refreshed periodically via this API's own ingestion pipelines — the access date above reflects when this notice was last reviewed, not a one-time pull.