Loads data/sales.json, data/rent.json and data/prob_data.json at runtime — nothing is embedded in this page. … sale rows and … rental rows, filtered to 1–2BR-sized units (350–1000 sqft) across all 7 districts in the dataset. No web-research estimates anywhere — every figure is aggregated live from the loaded transaction rows.
Data notes & methodology
Matching is by district + project + size band (350–550 / 550–750 / 750–1000 sqft), not just project name — a project's sale price is only compared against rent for similarly-sized units. See data/meta.json for the full generation log.
Sales files have no bedroom count — size band is the 1–2BR proxy. Rental files have a real bedroom field, filtered to 1 or 2.
Project names link to a PropertyGuru search for that project (verified working search-query pattern, not a guessed listing URL).
The probability-of-breakeven panel is precomputed server-side (full cross-product of every real price × every real rent, last 24 months) because that's too heavy to redo per click; it now correctly respects the tenure toggle and is broken out by size band.
Year-1 mortgage interest is computed exactly via amortization, not the flat loan×rate approximation.
Income tax on rental profit uses Singapore's actual progressive resident tax brackets (IRAS, YA2024 onwards), applied to the profit as the top slice stacked on the buyer's other chargeable income - not a flat guessed rate. See the calculator for the editable income assumption.
Property tax uses the non-owner-occupied AV brackets (IRAS, effective 1 Jan 2024) applied to the property's full annual market rent, not the vacancy-discounted figure - IRAS assesses Annual Value from comparable market rentals regardless of the owner's actual vacancy.
The calculator's "Upfront cash required" section includes Buyer's Stamp Duty (progressive 1-6% scale) and Additional Buyer's Stamp Duty (rate depends on buyer citizenship/PR status and existing property count) per current IRAS rates, plus optional buyer's-agent commission and legal/misc costs.
The "Opportunity cost of capital" chart is a leverage-adjusted comparison: the property line tracks NET EQUITY (value minus remaining mortgage balance, from a full month-by-month amortization) grown at a REAL historical appreciation rate computed from transacted PSF data for the specific project (falls back to the district if the project's own history is too thin), plus the frozen one-time transaction costs and any reinvested monthly cash surplus. The alternative line compounds the same total cash outlay at an assumed investment return, plus any monthly cash shortfalls redirected into it instead.
Terminology
PSF
Price per square foot. For rent, dollars of monthly rent per sqft.
Size band
A: 350–550 sqft (~1BR). B: 550–750 sqft (~1.5BR). C: 750–1000 sqft (~2BR). Used because sales rows don't carry a bedroom count.
Gross yield
Annual rent divided by purchase price, before any costs, mortgage, or tax. A quick income measure, not the same as after-tax cash flow.
Tenure (Freehold vs Leasehold)
Freehold: you own the land indefinitely. Leasehold: you own it for a fixed term (usually 99 years) after which it reverts to the state.
LTV
Loan-to-Value. The mortgage as a percentage of the purchase price. 75% LTV on a S$1M unit means a S$750k loan and a S$250k cash down payment.
Breakeven LTV
The highest LTV at which monthly after-tax cash flow stays at or above zero. Higher is better: the property can support a bigger, more typical loan without running a shortfall.
MCST
Management Corporation Strata Title. The monthly fee every condo owner pays for building upkeep, security, and shared facilities.
BSD
Buyer's Stamp Duty. A tax paid by every buyer on the purchase price, progressive from 1% to 6% per IRAS.
ABSD
Additional Buyer's Stamp Duty. A flat rate on top of BSD, based on the buyer's citizenship/PR status and how many residential properties they already own.
SSD
Seller's Stamp Duty. A tax on residential property sold within a holding window (currently 12/8/4/0% for sales inside 1/2/3/>3 years).
AV
Annual Value. IRAS's estimate of the property's yearly market rental potential, used as the base for property tax regardless of actual vacancy.
CAGR
Compound Annual Growth Rate. The steady yearly growth that would take the first observed value to the last over the period, smoothing quarter-to-quarter noise.
Opportunity cost
The return your cash would have earned in the next-best alternative (e.g. a diversified ETF) had you not tied it up in the property.
Cointegration
Two time series are cointegrated if they wander individually but stay tied by a stable long-run relationship. For price and rent, this is what makes a "rent-justified price" a meaningful concept.
VECM
Vector Error-Correction Model. Fits how price and rent adjust back toward that long-run relationship after a deviation. The error-correction term is a live gauge of how stretched today's price looks vs the rent-justified level.
OU (yield)
Ornstein-Uhlenbeck process. A mean-reverting model applied to the rental yield (rent÷price), calibrated with a long-run mean, a reversion speed, and volatility.
Structural break
A statistically detected shift in the long-run behavior of a series (e.g. policy change, rate cycle). The long-run yield is regime-dependent, so pre-break history should not be pooled with post-break history.
Real (inflation-adjusted)
Dollar amounts divided by cumulative inflation, so terminal wealth is expressed in today's purchasing power.
P10 / median / P90
Percentiles of the simulated distribution. P10 is the 10th-percentile outcome (only 10% of paths were worse); the median is the middle path; P90 is the 90th-percentile outcome (only 10% of paths were better).
Filters
Apply to every table & the chart below.
AllFreehold onlyLeasehold only
1 & 2 BR1BR only2BR only
Median (equal weight)Recency-weighted average
Summary
Matched projects (has both sales & rental data, same size band, current filters)iA project only appears here if it has BOTH sale and rental transactions in the same district and size band within the current filters — that's what lets a real gross yield (rent ÷ price) be computed, instead of guessing.
Auto-matched by exact project name + size band within district. Click "Use" to load a row into the calculator below.
Sales — aggregated by project & size bandiEach row combines every matching sale transaction for that project + size band into one median (or recency-weighted average) price and PSF, so a single project isn't dominated by one unusually high or low sale.
Rentals — aggregated by project & size bandiSame idea as the sales table: every rental transaction for that project + size band + bedroom count is combined into one median (or recency-weighted average) monthly rent.
Cash flow calculatoriModels the actual monthly cash in/out of owning and renting out this specific unit — mortgage payment, running costs, income tax on the profit — plus the one-time cash needed to complete the purchase (down payment + stamp duties + fees).
Type a price/rent directly, or click "Use" on a matched-project row above. Recalculates live.
Rental profit is taxed as the TOP slice of the buyer's income using Singapore's real progressive brackets (IRAS), not a flat guessed rate. Enter your own approximate chargeable income here (salary + other income, less SRS/CPF/other personal reliefs) for an accurate marginal rate - defaults to $0 (i.e. rental income taxed from the first dollar) until you do.
In SG resale deals the seller pays the transaction agent - leave at 0% unless you're engaging an exclusive buyer's agent who charges you directly.
Buyer's Stamp Duty (BSD) is computed automatically below from the purchase price using IRAS's progressive BSD scale (1-6%). ABSD is a flat rate on the full price - pick the profile matching the buyer's own citizenship/PR status and existing property count.
Opportunity cost of capitaliCompares two homes for your cash: buying the property (tracked as net equity — value minus remaining mortgage balance) vs. investing that same cash elsewhere at an assumed return. This shows whether the leverage from the mortgage is actually worth it, net of what the cash could have earned on its own.
Leverage-adjusted comparison: the property line is NET EQUITY (property value at the district/project's real historical appreciation rate, minus the remaining mortgage balance) - not the full purchase price, since the loan isn't your capital. The alternative line is the total capital outlay invested elsewhere; if the property runs a monthly cash shortfall, that same cash is redirected into the alternative investment instead (since in the "don't buy" world you'd never have had to find it). Click "Use" on a matched-project row above to pull that project's real historical appreciation (falls back to the district if the project's own sale history is too thin); otherwise this defaults to a blended trend across all loaded sales.
Try 5, 10, 15, 20, 25, or 30 - any value works.
Single rate (uses the mortgage rate above)Rate changes over time
At each rate change, the monthly payment is recalculated to fully amortize the remaining balance over the remaining original loan term (same payoff date, new installment) - standard behavior for an SG mortgage that reprices without refinancing elsewhere.
Hover any point on the chart for the exact breakdown (property value, loan balance, % owned, active rate, cumulative reinvested/redirected cash flow) at that year. Caveats: (1) rent, MCST, insurance, and expense percentages are held flat at today's levels for the whole horizon - only the mortgage rate/payment varies year to year (if "Rate changes over time" is selected); no rent growth or expense inflation is projected. (2) Exit costs ARE modeled at every year on the property line: 2% marketing agent commission on the sale price at that year, plus Seller's Stamp Duty (12% within 1yr, 8% <2yr, 4% <3yr, 0% thereafter) if you exit inside the SSD window. The alternative-investment line assumes no exit cost, matching a normal brokerage sale. (3) Only the down-payment slice of your outlay becomes equity - BSD/ABSD/agent/legal are sunk transaction costs that never grow, which is why the property line's early growth looks slower per dollar than the alternative line.
Breakeven LTV screen — matched projectsi"Breakeven LTV" is the highest loan-to-value at which monthly cash flow (rent minus mortgage minus running costs minus tax) still stays at or above $0. A HIGHER breakeven LTV is better — it means the property can support a bigger, more typical loan (e.g. 75%) without running a monthly cash shortfall.
The loan-to-value at which monthly cash flow (rent minus mortgage P&I minus opex minus tax) hits exactly $0, using the calculator's opex assumptions above. Green = achievable at 75% LTV or higher. Lower numbers mean you'd need a bigger cash down payment to reach net-zero.
Probability of breaking eveniInstead of using one median price and one median rent, this pairs EVERY real transacted price with EVERY real transacted rent for a group (full cross-product) and checks what share of those pairs would break even at the LTV you pick below — a rough sense of how consistent (vs. lucky) a matched pair's yield really is.
Uses EVERY actual transacted price paired with EVERY actual transacted rent for a district/project/size-band (full cross-product, not just the median pair). Reports what share of those clear $0 (literal breakeven) or −$250/month (near-breakeven) at a given LTV.
Price trendiPSF = price per square foot. Plots how the median sale and/or rental $/sqft moved quarter to quarter, so you can see whether a district or project is actually trending up, flat, or down — this is also where the appreciation CAGR used in the "Opportunity cost of capital" section comes from.
Median $ per sqft per quarter (sale PSF and/or rental $/sqft), from every transaction in the current size/tenure/date filters above. This chart has its own district filter below, independent of the table filters. Solid lines = sale $/sqft, dashed lines = rental $/sqft.
By districtBy project
Sale $/sqftRental $/sqftBoth
Stochastic price-rent model provisionaliAn offline statistical model of how price and rent move together, calibrated on the transaction history. The browser only loads and interpolates precomputed results (data/series.json, model_params.json, mc_grid.json) — it runs no simulation. All fitting happens in the sg_price_rent_model.ipynb notebook.
Reads the district, entry yield, LTV, horizon, appreciation and ETF assumptions from the calculator above. Buy-vs-ETF terminal wealth and the break-even appreciation are interpolated from a precomputed Monte-Carlo grid. Pick the district here.
Valuation gauge & fitted relationship (for the selected district)