Methodology
What the model computes, in the order it computes it. Enough to reimplement it, disagree with it, or find a mistake in it.
The one rule
Both sides start with the same cash, and neither is ever handed a dollar the other does not get.
After that, each month the property produces a net cash flow: rent actually collected, less every operating cost, less debt service. If it is negative, the landlord writes a cheque and the investor contributes the same amount to their portfolio. If it is positive, the landlord invests it and the investor contributes nothing — because nothing extra came from anywhere. The property generated it, which is exactly the thing being measured.
So lifetime out-of-pocket is identical on both sides. The model checks this and refuses to report a result if the two ever diverge by more than a rounding error.
Why this is not the rent-vs-buy model
That calculator compares two households who both need somewhere to live, so it equalises their monthly spending. Here neither side needs anything: both are investments, and the question is which does more with the same capital. The landlord's rent is income, not an avoided cost. Do not assume a figure from one page was produced the same way as a figure from the other.
What leverage does
This is the whole point of the comparison. A 25% down payment buys four dollars of appreciating asset per dollar of capital, so modest appreciation on the property becomes a large return on your slice of it.
The same multiplier applies to a decline, and unlike a portfolio the leverage is not optional: the mortgage payment is due whether or not the tenant pays. A portfolio can be left alone through a bad decade; a mortgage cannot. Set appreciation negative and compare a 20% down payment against a 60% one to see the asymmetry.
The monthly loop
Each month, in this order:
- Scheduled rent for the current year, less vacancy, gives rent collected.
- Operating costs are computed against the value at the start of the month, before this month's appreciation.
- The mortgage payment is split into interest and principal.
- Both portfolios grow by one month of investment return.
- The month's cash flow is settled: reinvested if positive, matched by both sides if negative.
- The property appreciates by one month.
- Net worth is recorded for both sides.
Contributions land at month end, so a dollar contributed this month earns nothing this month. The ordering is the same as the rent-vs-buy model's, deliberately.
Two different rate conventions
A US mortgage note rate is a nominal annual rate divided into twelve equal parts. An investment return quoted annually is an effective annual rate, which compounds. Converting them the same way is wrong for one of them.
The ratios
Net operating income is calculated before debt service, which is the convention and the reason a property can have a healthy cap rate and still bleed cash every month: the cap rate does not know what you paid for the mortgage. That is what makes it comparable between buildings, and what makes it insufficient on its own.
Management is charged on rent collected, not scheduled: you do not pay a manager for rent nobody paid.
Which costs follow the property's value
Property tax tracks value by default, because ad valorem assessment genuinely is charged against market value. Insurance and maintenance do not, and that differs from the rent-vs-buy calculator on purpose.
A premium covers rebuild cost, which is the structure; land appreciation does not make a building more expensive to rebuild. And a roof costs what a roof costs. Maintenance and the capital reserve run 2% of value a year here — more than double the rent-vs-buy figure, because a landlord is also funding turnover and replacements — and linking that much cost to market value made the model non-monotone in appreciation: at 8.5% returns, 3% appreciation beat 4%, because the extra cost forced larger monthly top-ups and the investor's matched contributions compounded faster than the extra appreciation was worth.
That is an artifact of the tracking assumption, not a finding. You can turn tracking back on, and the sensitivity matrix will tell you when the grid stops being monotone rather than presenting a misleading picture in silence.
One answer is never the whole answer
Three of the inputs — investment return, property appreciation, rent growth — are not measurements, they are guesses. A single figure computed from a single guess at all three reads as far more certain than it is, so every result also carries the range around it.
The scenario table
The same property under six illustrative rate regimes, with your own assumption slotted in among them and the rows ordered by the gap between investment return and appreciation. Only those three rates change: the price, the rent, the mortgage and every operating cost are held exactly as you entered them, which is what makes the rows comparable.
The gap is the strongest single driver, not a decider. Hold it fixed and change the price, the rent or the mortgage rate and the verdict can still flip either way. Read the table as a gradient for your inputs, not as a rule about gaps.
How much the answer depends on the table
Winning five of six scenarios and winning three of six are reported identically by a headline figure and mean entirely different things, so the split is summarised in words:
- Robust — the verdict holds in at least 80% of the rows.
- Assumption-sensitive — 60% to 80% agree.
- Finely balanced — below 60%, or a dead heat. The result should not be leaned on.
The bands are shares rather than counts, and they are the same bands the rent-vs-buy calculator uses — one definition of “robust”, so the two cannot disagree about what the word means. It measures agreement across rate regimes and nothing else: it says nothing about the price, the rent or the financing, which move the answer at least as much.
Where the line is
The sensitivity matrix sweeps investment return against appreciation and colours every combination by winner, which answers a better question than “what is the answer?”: how far is the answer from changing? If the nearest flip is several points away, the exact rate you assume barely matters. If it is next door, the verdict is balanced on that assumption.
Your own two rates are inserted into the axes if the standard grid misses them, so there is always a cell marking where you sit. The grid also carries a monotone check: higher appreciation can only help the landlord and a higher return can only help the investor, so if linking a cost to market value breaks that ordering, the caption says so rather than presenting a misleading picture in silence.
Short holds
The holding period does not have to be a whole number of years. It can be any number of whole months, because that is what the loop runs, and short holds are punishing: buying and selling costs land on a property that has barely appreciated, and the mortgage has barely amortised. A period that would fall between two months is refused rather than quietly rounded to a different scenario than the one you asked for. The mortgage term is separate and stays in whole years, because that is how the contract is written.
Effective annual investment tax drag
Money not spent on the property is assumed to be invested, and in a taxable account some of that return goes to tax. The tax-drag input is a simplified way to approximate that, applied to both sides — the investor's whole portfolio and the landlord's reinvested cash flow.
It is not a model of capital-gains or dividend taxation. It has no notion of when a gain is realised, what the basis is, or which rate applies, so it overstates the cost of tax on a buy-and-hold position and is about right for dividend drag, which really is annual. Use 0 for a retirement account; roughly 5–15% for a broad index fund in a taxable account. The other two calculators use the same input with the same arithmetic.
Note what it does not touch: the property's own tax treatment, which is not modelled at all. See below.
What would have to be true?
The calculator answers “given these assumptions, what happens?”. The solver answers the question underneath it: how wrong would you have to be before this flips? A verdict of a few hundred thousand dollars tells you nothing about whether it survives a three-point miss on one input. A threshold does.
Each row takes one input, holds every other one exactly as you entered it, and finds the value where the verdict changes. Rows are sorted closest-first, so the top one is the assumption your answer is least safe from.
It is deliberately one input at a time. Several small misses together can flip an answer that no single one of them would, and nothing here accounts for that — the sensitivity matrix is the two-input version, and beyond that you are into the Monte Carlo.
Where an input has no threshold, that is reported too, and it is often the more useful result: it means that input cannot change your mind across its whole plausible range, so it is not worth arguing about.
The search is a bisection rather than anything cleverer, because the objective is not smooth — value-linked costs have kinks, loans pay off, PMI switches off — and bisection needs only a sign change, which is exactly what is being looked for. Inputs that live on a grid are snapped to it at every step: a holding period exists only on whole months, so the answer is the first month you could actually enter where the verdict really is different.
Sharing a scenario, and whose assumptions it is
Everything you change is carried in the page’s address, so a result can be bookmarked or sent to somebody and it will open exactly as you left it. Only inputs that differ from the shipped defaults are encoded, which keeps the link short and means the parts you never touched continue to track the model rather than being frozen at whatever the defaults were the day you sent it.
Each calculator here asks for far more inputs than anybody changes, so every result also says how many are still ours. A verdict computed from three edited fields and twenty-seven of our defaults is a statement about our assumptions wearing your name, and the page says so rather than letting the number imply otherwise.
Checks that must pass
- Equal outlay. Both sides' lifetime out-of-pocket must match. This is the rule the comparison rests on, so it is verified rather than assumed.
- Principal is conserved. Repaid principal plus the remaining balance equals the original loan, at every point.
- Inputs are finite. NaN and infinity are rejected up front, as are negative rents and negative costs, which would otherwise produce a confident and meaningless answer.
What is not modelled
This is a pre-tax model, and here that is a heavier caveat than on the other two calculators, because the tax treatment is a large part of the case for owning a rental at all:
- Depreciation. US residential rental property is depreciated over 27.5 years, and that deduction shelters income you genuinely received. Leaving it out understates the landlord.
- Depreciation recapture at sale, taxed up to 25%, which claws part of that back and cuts the other way.
- Mortgage interest and operating costs as deductible expenses.
- Passive activity loss limits, which can defer the benefit for years.
- 1031 exchanges, opportunity zones, QBI treatment.
- Capital gains on the sale. The investor's portfolio gains are approximated by the tax-drag input; nothing here approximates the property's.
These do not cancel, and which way they net out depends on your bracket, your state and how long you hold. Read the result as the pre-tax economics — a real and useful thing to know — and then talk to somebody about the tax.
Also not modelled: tenant damage beyond the maintenance and capital reserves, eviction costs and the lost months that come with them, the labour of being a landlord, refinancing, and the concentration risk of putting a large share of your net worth into one building on one street. Rent grows smoothly here; real rents move in steps, and real repairs arrive in lumps.
Every rate in the model is nominal. The optional inflation input restates the final answer in today's dollars for reporting only; it does not enter the simulation, because doing so would double-count.