PropTools.my
Search projects, areas or transactionsCtrl K
Data sourcesSign in
Trust centre

Methodology before conclusions.

How PropTools separates source records, computed statistics, confidence signals and planning estimates.

Evidence principles

PropTools treats a registered value as a source observation, not an appraisal. Listing price, estimated market value, auction reserve and registered sale price are distinct concepts and must not be merged without a label.

Ingestion pipeline

The VPS imports every state from the official NAPIC/JPPH public Tableau export into a fresh SQLite database. It validates required fields and national coverage, converts square metres to square feet, generates deterministic record IDs, marks recent rows provisional, builds state and district aggregates and only then atomically replaces the previous database. A failed or incomplete refresh leaves the last validated database online.

Quality flags

StatusMeaningDefault treatment
VerifiedRequired fields pass validation and the period is sufficiently mature.Included in aggregates.
ProvisionalRecent reporting period likely affected by registration lag.Included with warning; volume trends treated cautiously.
ReviewExtreme PSF, price, area or match confidence requires inspection.Visible in raw results; optionally excluded from trimmed statistics.

Robust statistics

Public views should show sample count alongside the median. Where a segment has enough records, PropTools will expose raw median, trimmed median, interquartile range and 10th–90th percentile. A mean is not the default because a few unusual values can distort it.

Market activity score

The activity score is a 0–100 composite published on the market analysis page. It is deliberately not called a demand score: demand needs listing-side data such as inventory, days on market and delisting rate, none of which PropTools collects. Inferring demand from registered sales alone would present a guess as a measurement. Every input below comes from an official register.

activity_score =
    liquidity          × 0.40
  + price_momentum     × 0.30
  + auction_pressure   × 0.20
  + pipeline_pressure  × 0.10

liquidity         = percentile_rank(registered_sales among all districts)
price_momentum    = normalise(five_year_median_growth, −10%, +30%)
auction_pressure  = 100 − normalise(state_auction_lots_per_1000_state_sales, 0, 30)
pipeline_pressure = 100 − normalise(state_project_units / state_sales × 100, 0, 60)

normalise(v, lo, hi) = clamp((v − lo) / (hi − lo) × 100, 0, 100)

Liquidity is a percentile rank rather than a scaled value: sale volume spans three orders of magnitude, and both a linear scale (everything compresses toward zero) and a log scale (a 441-sale district scoring 55) misrepresent it. The auction and pipeline ratios are taken against state sale volume, since both source datasets are keyed by state. The two pressure terms are inverted because forced sales and unsold forward supply both weigh against a market rather than for it.

Known limitation: auction listings and the new-project register are keyed by state, not district, so those two components are a state-level signal applied to every district within that state. A district in a state with heavy auction volume carries that pressure even if its own locality is calm. Treat the score as a coarse comparison between districts, not a precise ranking.

Known limitations

Open transaction data may omit unit addresses, bedroom counts, floor level, condition and other attributes that influence value. Recent periods under-count volume. Auction or relationship transactions can enter registered data. A stamped SPA value can differ from a buyer’s concept of current market value.