Singapore property valuation, as an API.

Comparable-sales valuations for Singapore residential property — queryable in one HTTP call, with the comparables and adjustments shown, not just a number. Rental yield, price trends, and lease-decay risk are on the roadmap.

Photo by Lily Banse on Unsplash

Why it's different

Explainable by default

Every valuation returns the comparables used, their individual adjustments (time, storey, size), and a confidence label — not a black-box number. If you need to justify a valuation to a risk or compliance team, you can.

Accuracy you can check, not just trust

Backtested against held-out real transactions, out-of-sample by construction — each valuation only uses data that existed on or before that transaction's own month, and is never allowed to use the transaction to value itself. Current results: 6.29% mean absolute error on HDB resale (84.2% of estimates within 10% of actual price), 6.17% on condo/EC/ apartment (81.6% within 10%). A specific, dated number, not a marketing round figure.

Knows when to trust itself less

Most projects have enough of their own resale history for a direct comparable-sales estimate. When one doesn't, the API doesn't force a weak comparison out of a thin pool — it falls back to a hedonic regression model built specifically for that gap, validated against three independent holdout tests before being trusted with a live estimate. It also never hides which method produced a number: the comparable-sales reasoning is always returned, even on calls where the fallback model is the one used.

Built for Singapore specifically

For HDB resale, a computed gap between a listed price and this API's own valuation estimate — historically called "cash-over-valuation" — before you commit an option fee. One property_type field switches the same endpoints between HDB and private residential, both keyed off the same postal code — verified against real address data that a single project name can span several physical postal codes, and built accordingly from day one. Nothing generic ported in from a US or UK AVM.

The problem

Singapore has excellent property data — HDB resale prices, URA private transactions, market indices are all publicly filed. What doesn't exist is a way to query it programmatically. Every consumer property platform has a valuation tool bolted onto its listings business. None of them offer a documented, self-serve API. If you're building a lending product, a proptech tool, or anything that needs a valuation as a backend input — not a lead-gen widget — your options today are: scrape something you shouldn't, negotiate a bespoke data deal, or build your own AVM from scratch.

What this is

An API-first alternative — built to be called from inside your product, not visited by an end user. Your customers never see our brand.

Who it's for

Not for: individual buyers or agents looking for a free valuation estimate — that's what the existing consumer tools are for. This is infrastructure, not a lead-gen widget.

How it works

  1. Resolve a postal code — get back town, street, a reliable lease commence date, and (if you also pass a flat type) a floor area suggestion with an honest confidence label, not a silent guess. Already have clean structured property data of your own? Skip this step and call /valuation directly.
  2. Call /valuation (or /cov) with flat type, floor area, and storey — either an exact floor number or HDB's band format, your choice.
  3. Get back an estimate, a confidence label, and the comparables that drove it. Use it inline in your own product — a loan application form, a pricing engine, a portfolio risk dashboard.

1. Resolve the postal code

Request

POST /resolve-postal-code
Content-Type: application/json

{
  "postal_code": "190012",
  "flat_type": "5 ROOM"
}

Response (200)

{
  "postal_code": "190012",
  "block": "12",
  "street_name": "NTH BRIDGE RD",
  "town": "KALLANG/WHAMPOA",
  "lease_commence_date": 1975,
  "floor_area_suggestion": {
    "suggested_sqm": 114.0,
    "confidence": "estimate",
    "observed_sqm": [114.0, 117.0, 119.0]
  }
}

2. Value it

Request

POST /valuation
Content-Type: application/json

{
  "town": "KALLANG/WHAMPOA",
  "street_name": "NTH BRIDGE RD",
  "flat_type": "5 ROOM",
  "floor_area_sqm": 114,
  "storey": 20,
  "lease_commence_date": 1975
}

Response (200)

{
  "estimated_value": 847500.0,
  "estimated_psm": 7434.37,
  "estimated_psf": 690.68,
  "confidence": "medium",
  "confidence_reason": "6 comparable(s), psm spread (CV) 3.9%",
  "comp_tier": "street",
  "lookback_months": 24,
  "remaining_lease_months": 576,
  "comparables": [
    {
      "source_id": 228768,
      "month": "2026-03",
      "block": "12",
      "street_name": "NTH BRIDGE RD",
      "storey_range": "16 TO 18",
      "floor_area_sqm": 114,
      "resale_price": 839999,
      "weight": 0.2
    },
    {
      "source_id": 228767,
      "month": "2026-01",
      "block": "12",
      "street_name": "NTH BRIDGE RD",
      "storey_range": "07 TO 09",
      "floor_area_sqm": 117,
      "resale_price": 810000,
      "weight": 0.0893
    },
    {
      "source_id": 209150,
      "month": "2025-08",
      "block": "12",
      "street_name": "NTH BRIDGE RD",
      "storey_range": "22 TO 24",
      "floor_area_sqm": 114,
      "resale_price": 825000,
      "weight": 0.0833
    }
    // ... 3 more comparables omitted for brevity, all NTH BRIDGE RD
  ]
}

Real output, both calls chained exactly as shown, captured from the live database — not a mockup. Passing street_name (returned by /resolve-postal-code above) is what keeps comparables anchored to the actual block — omit it and the API still works, but broadens to town-wide comparables instead. /cov takes the same body as /valuation plus asking_price and adds price_vs_estimate_gap. The same two endpoints also value condo/EC/apartment units — pass "property_type": "condo" with district/area_sqm/floor_range/ tenure_type instead of the HDB fields shown above; see /docs for the full condo schema and a live "Try it out" example. Try any of these yourself, with your own inputs, at /docs.

Coverage today

HDB resale and private residential (condo, apartment, Executive Condominium) valuation and asking-price-vs-estimate comparison are both live — property_type switches between them on the same /valuation//cov endpoints. Landed property, rental yield, price trends, and en-bloc probability are on the roadmap — get in touch if you want to know what's next or request early access to a specific endpoint.

Pricing

Usage-metered, no seat fees. Early pilot customers get direct-issued API keys and input into what we build next. Request pilot access to talk pricing for your volume.

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.