Methodology
The model in one paragraph
Both households start with the same liquid wealth Wโ = down payment + buy-side closing costs. At t = 0 the renter invests Wโ into a stock/bond portfolio; the buyer spends it on the purchase. Each month, the side with the lower outflow invests the differential. Country-specific tax effects (mortgage interest deductions, property taxes, wealth taxes) net into the buy-side cash flow once a year so they ripple forward through the next year's differential. At the chosen horizon we compare end-of-period net worth on both sides.
Net worth definitions
The two sides use intentionally asymmetric definitions:
- Buy:
(homeValue โ loanBalance) + portfolio. An accounting view of home equity plus accumulated investments. Sale-side transaction costs are configurable (default 0%): set them to ~6% to 10% to see the "if I sold today" liquidation view. - Rent:
portfolio โ unrealizedCGT(portfolio). The country-specific capital-gains tax that would be owed on liquidation is subtracted (US LTCG ยฑ NIIT, IT 26%/12.5%, NL 0% because Box 3 is paid annually).
Mortgage math
Standard annuity amortization: M = Lโ ยท r / (1 โ (1 + r)^โn) with r = monthly rate, n = term in months. Monthly split: interest = balance ร r; principal = M โ interest. Loan balance updates each month; the home value follows (1 + appreciation)^(1/12) โ 1 compounded monthly.
Investment portfolio
Two buckets (equity ETF and government bonds) with a user-controlled allocation slider. Monthly returns via (1 + annual)^(1/12) โ 1, annual rebalance to the target split. Cost basis is tracked per bucket so realization tax is computed correctly when the country uses different rates per asset class (Italy) or a single LTCG rate (US).
Country-specific tax treatment
The simulator does not branch on country; instead each country implements a small set of pure functions: one-time costs, monthly extras, monthly property tax, annual buy-side tax effect, portfolio drag, and unrealized CGT. Below is what those hooks compute for each jurisdiction.
United States
- Closing costs default 3% of price.
- Property tax = rate ร home value (annual, applied monthly).
- PMI = pmiRate ร original loan, while LTV > 80%.
- Itemize vs standard each year. Itemized = deductible mortgage interest (interest scaled by
min(1, $750k / avgBalance)) + min($10k SALT cap, property tax + state-local income tax). State-local income tax is approximated ashouseholdIncome ร stateLocalIncomeRate(a flat-rate proxy that ignores state-bracket structure). If itemized > standard deduction (2025: $15k single / $30k MFJ), we apply the federal marginal rate to the excess. - Realization tax on rent portfolio: LTCG rate (default 15%) + NIIT 3.8% if toggled.
Netherlands
- One-time costs: 2% overdrachtsbelasting (transfer tax), or 0% for first-time buyers below the threshold (~โฌ525k); ~1.5% notary plus advisor; NHG premium of 0.6% of loan when applicable.
- Year-1 one-off deduction. The mortgage-related share of the notary + advisor + valuation bundle (default 60%) plus the NHG premium in full are deductible from Box 1 income in the year of purchase. Refunded at the marginal rate. Only applies to HRA-eligible annuity products.
- Recurring: OZB ~0.1% ร WOZ; Eigenwoningforfait at 0.35% of WOZ (2.35% above ~โฌ1.31M).
- HRA (Hypotheekrenteaftrek): deductible at the lower of marginal rate and the ceiling (โ 36.97%), only for annuity products. Net annual buy-side tax effect =
min(marginal, ceiling) ร interestPaid โ marginal ร EWF. - Box 3: 2025 transition deemed yield ร 36% on portfolio above the per-person threshold (~โฌ57k single, doubled if partnered). The whole portfolio is treated as the "investments" bucket.
Italy
- One-time costs (prima casa, private seller, non-luxury A/2 to A/7):
- Imposta di registro: 2% ร cadastral value
- Imposta ipotecaria + catastale: โฌ100 fixed (โฌ50 + โฌ50)
- Imposta sostitutiva sul mutuo: 0.25% ร loan amount
- Notary 1.5% (parameter)
- Real-estate agent 3% + 22% IVA (parameter)
- Recurring: TARI flat (annual); IMU exempt (prima casa, non-luxury).
- Mutuo deduction: 19% ร min(interest paid in year, โฌ4,000), a credit against IRPEF, prima casa only.
- Bollo: 0.2% on portfolio market value, annually.
- Realization tax: 26% on equity ETF gains, 12.5% on Italian/EU government bond gains.
Policy simulation (inflation indexing)
Several thresholds are inflation-indexed in real life: the NL Box 3 allowance, the US standard deduction and SALT cap, the IT mutuo cap, and so on. Each exposes a sibling annual-growth field. At year tick N, the engine evaluates the parameter as base ร (1 + growth)^(N โ 1), so year 1 always matches the base value and growth compounds geometrically afterwards.
Set the growth to 0% for "frozen at today's value" (this is what historic IT mutuo caps look like). Use 2% to approximate CPI indexation. Negative values let you simulate cuts. We only support smooth compounding, not step changes.
One-time costs (transfer tax, registration tax, NHG and first-time-buyer thresholds, cadastral value for closing) are not escalated since they only fire at t = 0.
Open assumptions
- Dividend withholding tax on equity ETFs ignored.
- NL Box 3: whole portfolio in the "investments" bucket; the bond/cash distinction is not modelled.
- IT: distributions ignored, taxes only at realization.
- Maintenance is a flat % of value, with no shock years.
- HOA / TARI / insurance are flat, with no inflation modelled.
- NL partnered case uses the same marginal rate for both partners (simplification).
- Italy luxury homes (A/1, A/8, A/9) are excluded; IMU exemption assumed.
- Annual rebalance treated as cost-basis-preserving (a simplification; in practice rebalancing crystallises gains).