Methodology & Accuracy

Every calculator on RealEstateCalculations.net is powered by a small, tested calculation engine. This page documents the formulas, the conventions we chose, and — just as importantly — the simplifications each model makes, so you can judge how far to trust a number.

Where to start: the guides

This page is the reference. If you would rather follow the reasoning behind one calculator at reading pace, the guides cover the same ground a topic at a time. NOI and cap rate explained builds effective rent, operating expenses, NOI and cap rate from the definitions below. Cash flow and cash-on-cash return adds the mortgage payment back in and shows why financing changes one metric but not the other. The 1% rule and GRM as screens covers the two rent-to-price shortcuts and what each one ignores. The 70% rule for flips walks through the maximum-offer convention and the projected-profit arithmetic. Rent vs. buy: how the simulation works traces the month-by-month model across several horizons, and What these models leave out collects every omission, calculator by calculator. The guides index lists them all. Each guide computes its examples with the same engine described here, so a figure quoted in a guide and the same figure quoted on this page are one calculation, not two.

The core definitions

  • Effective rent = monthly rent × (1 − vacancy%). Vacancy is modeled as a steady haircut rather than discrete empty months.
  • Net operating income (NOI) = (effective rent − operating expenses) × 12. Operating expenses exclude mortgage principal and interest by industry convention, so NOI describes the property independent of financing.
  • Cap rate = NOI ÷ property value.
  • Cash flow = effective rent − operating expenses − mortgage payment, monthly.
  • Cash-on-cash return = annual cash flow ÷ cash invested, where cash invested = down payment + closing costs + initial rehab.
  • Mortgage payment uses the standard amortized-loan (PMT) formula with monthly compounding; a 0% rate divides the principal evenly.
  • Fix & flip max offer = rule% × after-repair value − rehab costs (70% by default). Projected profit = ARV − purchase − rehab − holding − selling costs.

How inputs are validated

Every engine function returns a result object rather than a bare number. A successful call carries the computed value. A rejected call carries an error with a machine-readable code — invalid-input for a value that is missing, negative where it cannot be, zero where the engine requires a positive figure, or inconsistent with another field, and out-of-range for a value beyond what the tool supports — and a plain-English message. The interactive calculators show that message under the offending field. This page shows the same messages beside each worked example by making a deliberately bad call at build time and quoting what came back. The upper limits themselves live inside the engine and are not restated here, so a message you read below is the limit as the engine currently enforces it, not a copy that could go stale. Money fields accept zero except those the engine requires to be positive — purchase and home prices, property and after-repair values, rents, and cash invested; the rest (down payment, operating expenses, closing costs, rehab, holding costs, and each rehab line's material and labor costs) may be zero. Rates are percentages between zero and an upper bound, and year counts must be positive and bounded. The engine is written so that a result is never NaN or infinite: any input that would produce one is meant to be rejected first.

Calculator by calculator

Each calculator on the site calls one or two engine functions. For each, this section names the function and its input fields as the engine defines them, says what it returns, quotes one or two validation messages produced by deliberately rejected calls, links the tool, and gives a worked example computed at build time. The example inputs are illustrative values entered for the example — they are not market figures, and the point of each example is the arithmetic, not the deal.

Rental Property Calculator

Function: rentalProperty(RentalInput). Inputs: purchasePrice, downPayment, loanRatePct, loanTermYears, monthlyRent, vacancyPct, monthlyOperatingExpenses, and the optional closingCosts and rehabCosts, which count as zero when left blank. It returns the mortgage payment, effective monthly rent, monthly and annual cash flow, annual NOI, cash invested, cash-on-cash return, and cap rate — every figure the single-purpose calculators produce, from one set of inputs. The loan is the purchase price less the down payment; when the two are equal there is no loan and the payment is zero. Cash invested must be positive, since cash-on-cash divides by it.

Worked example. Entered as a $180,000 purchase with $36,000 down, 6.5% for 30 years, $1,650 rent, an 8% vacancy allowance, $540 of monthly operating expenses, $4,000 of closing costs and no rehab, the engine returns a $910.18 payment, $1,518.00 of effective rent, $67.82 of monthly cash flow ($813.86 a year), $40,000 of cash invested, a 2.03% cash-on-cash return, $11,736 of NOI, and a 6.52% cap rate. Change only the rate to 0% and the payment becomes $400.00 — the loan divided evenly over its months, as the PMT definition states — cash flow becomes $578.00 and cash-on-cash 17.34%, while the cap rate stays at 6.52% because the cap-rate arithmetic never touches the loan. The build checks that the two cap rates are identical.

Validation. A vacancy allowance larger than the whole rent is rejected with “Enter a vacancy rate of 100% or less.”; a down payment larger than the price is rejected with “The down payment cannot exceed the purchase price.” Tool: Rental Property Calculator. Guide: Cash flow and cash-on-cash return.

Cap Rate Calculator

Function: capRate(CapRateInput). Inputs: monthlyRent, vacancyPct, monthlyOperatingExpenses, and propertyValue. It returns noiAnnual and capRatePct. This is the rental-property function with the financing fields removed: the same effective-rent and NOI arithmetic, divided by the value you enter rather than a purchase price. Nothing about a loan goes in, so nothing about a loan can come out.

Worked example. Entered as $1,450 of monthly rent, a 6% vacancy allowance, $480 of monthly operating expenses, and a $165,000 value, the engine returns $10,596 of NOI and a 6.42% cap rate. The misreading to guard against with this calculator is putting a mortgage payment into the operating-expense field. To show what that does, the engine was asked for the payment on a loan against the same property — $165,000 with $33,000 down at 6% for 30 years, which is $791.41 a month — and that payment was added to the expenses. The same building then reports a 0.67% cap rate instead of 6.42%. The building did not change; the convention was broken, and the number stopped describing the property.

Validation. A property value of zero cannot be divided by and is rejected with “The property value must be greater than 0.” Tool: Cap Rate Calculator. Guide: NOI and cap rate explained.

Cash-on-Cash Return Calculator

Function: cashOnCash(annualCashFlow, cashInvested). Two positional inputs and one output: the ratio of the first to the second, as a percentage. This is the only engine function that accepts a negative first argument. Annual cash flow may be below zero, in which case the return is negative rather than an error, because a property that costs its owner money each year is a legitimate thing to measure. Cash invested must be greater than zero. The calculator does not derive annual cash flow for you: enter the figure from the Rental Property Calculator, or compute it as (effective rent − operating expenses − mortgage payment) × 12 exactly as the core definitions state.

Worked example. Entered as $4,380 of annual cash flow against $61,500 of cash invested, the engine returns 7.12%. Entered as -$1,200 of annual cash flow against $40,000 invested, it returns -3% — a negative return, reported as such.

Validation. Zero cash invested is rejected with “The cash invested must be greater than 0.” Tool: Cash-on-Cash Return Calculator. Guide: Cash flow and cash-on-cash return.

1% Rule Calculator

Function: onePercentRule(purchasePrice, monthlyRent). It returns targetRent (one percent of the price), actualPct (rent as a percent of price), and a boolean passes that is true when the actual percentage is at least one. The rule is a convention — a screen, not a verdict. It compares gross rent to price and nothing else: expenses, vacancy, financing, and condition are not inputs, so the screen cannot see them, and two properties with the same rent and price screen identically however different their costs.

Worked example. Entered as a $275,000 price and $2,400 of monthly rent, the engine returns a target rent of $2,750 and an actual ratio of 0.87%, so the screen reports the pair as not meeting the one-percent threshold. That is the whole output. Whether the property works is a question for the full analysis, which this screen is designed to come before, not replace.

Validation. A rent of zero is rejected with “The monthly rent must be greater than 0.” Tool: 1% Rule Calculator. Guide: The 1% rule and GRM as screens.

Gross Rent Multiplier Calculator

Functions: grossRentMultiplier(GrmInput) and grmEstimatedValue(GrmValueInput). The forward calculation takes price, rent, and rentPeriod ('monthly' or 'annual'). Monthly rent is multiplied by twelve before dividing, so the multiplier is always price ÷ gross annual rent; the result also reports annualRent and monthsOfRent, the same ratio restated as months of gross rent. The reverse calculation takes rent, rentPeriod, and grm and returns estimatedValue = annual rent × multiplier. Gross rent is before vacancy and before any expense, so the multiplier, like the 1% rule, is a screen.

Worked example. Entered as a $240,000 price and $1,900 of monthly rent, the engine annualizes the rent to $22,800 and returns a multiplier of 10.53, which is 126.3 months of gross rent. Entering $22,800 as annual rent instead returns the identical multiplier of 10.53; the build checks that the two agree. In reverse, $1,900 of monthly rent at a multiplier of 8.5 returns an estimated value of $193,800.

Validation. Because the tool works on an annual basis, a multiplier of 1,200 is rejected with “Enter a gross rent multiplier of 1000 or less. A figure in the hundreds usually means a monthly-rent-based multiplier is being mixed with the annual basis this tool uses.” Tool: Gross Rent Multiplier Calculator. Guide: The 1% rule and GRM as screens.

Fix & Flip Calculator

Function: fixAndFlip(FlipInput). Inputs: afterRepairValue, rehabCosts, purchasePrice, and the optional holdingCosts (zero when blank), sellingCostPct (zero when blank), and rulePct. When rulePct is left out the engine applies its own default; read back from the example below by reversing the max-offer formula, that default is 70%. It returns maxOffer = rule% × ARV − rehab; sellingCosts = ARV × selling %; totalInvested = purchase + rehab + holding + selling costs; projectedProfit = ARV − total invested; and roiPct = profit ÷ total invested. The max offer and the projected profit are independent of each other: the offer is a convention applied to the ARV, while the profit is arithmetic on the price actually entered.

Worked example. Entered as a $320,000 after-repair value, $42,000 of rehab, a $195,000 purchase, $8,500 of holding costs, 7% selling costs, and the rule left at its default, the engine returns a max offer of $182,000, selling costs of $22,400, total invested of $267,900, a projected profit of $52,100, and 19.4% return on total invested. Change the rule to 65% and the max offer becomes $166,000 while the projected profit on the same purchase stays $52,100: the rule changes what the convention would offer, not what the deal as entered earns.

Validation. A rule percentage beyond the engine's upper bound is rejected with “Enter a rule percentage of 100% or less.” Tool: Fix & Flip Calculator. Guide: The 70% rule for flips.

Rehab Budget Calculator

Function: rehabBudget(RehabBudgetInput). Inputs: lines (each with an optional label, materialCost, and laborCost; a missing cost counts as zero), contingencyPct applied to the materials-plus-labor subtotal, and the optional areaSqFt. It returns materialsTotal, laborTotal, subtotal, contingencyAmount, grandTotal, lineCount, and — only when an area was given — costPerSqFt. The engine supplies no prices of any kind. Every dollar comes from you; the tool totals what you entered and adds the contingency you chose.

Worked example. Entered as three lines — a roof at $9,000 of materials and $6,000 of labor, windows at $5,200 and $2,800, and an electrical line with $3,500 of labor and no materials entry — with a 15% contingency and 1,450 square feet, the engine returns $14,200 of materials, $12,300 of labor, a $26,500 subtotal, $3,975 of contingency, a $30,475 grand total, and $21.02 per square foot for these 3 entered lines alone — the grand total divided by the area given, a readout of what was typed and not a cost benchmark. Leave the area blank and the result carries no per-square-foot figure at all rather than a zero; the build confirms it is absent.

Validation. A budget with no lines is rejected with “Add at least one line item with a cost.”; a budget whose lines carry labels but no costs is rejected with “Enter a material or labor cost on at least one line.” Tool: Rehab Budget Calculator. Guide: The 70% rule for flips.

Rent vs. buy: simulated, not formulaic

The rent-vs-buy comparison is simulated month by month. Renting accumulates rent, raised once a year by your rent-growth rate. Buying accumulates the down payment, any purchase closing costs you enter (as a percent of the price or a dollar amount — one or the other, treated as cash at purchase, not financed, and defaulting to zero when left blank), every mortgage payment, and ownership costs (taken as an annual percentage of the home's value, which appreciates yearly) — then credits back the net sale proceeds at the end of the horizon: the appreciated price, less selling costs, less the remaining loan balance computed from the actual amortization. The lower net cost wins. This structure is why the horizon matters so much: transaction costs amortize over the stay while equity builds slowly at first.

Rent vs. Buy Calculator

Function: rentVsBuy(RentVsBuyInput). Inputs: monthlyRent, annualRentGrowthPct, homePrice, downPayment, mortgageRatePct, mortgageTermYears, annualOwnershipCostPct, homeAppreciationPct, sellingCostPct, yearsToStay, and one — never both — of purchaseClosingCostPct or purchaseClosingCostAmount. It returns totalCostRenting, totalCostBuying, cheaperOption ('renting', 'buying', or 'break-even' when the two totals are within a dollar), difference, netSaleProceeds, yearsToStay, and purchaseClosingCosts, the dollar amount actually applied, which is zero unless you entered one. Month by month: rent is added to the renting total, and after every twelfth month it is raised by the rent-growth rate. On the buying side, the month's interest is the balance × the monthly rate, the principal is the payment less that interest, the balance falls by the principal, the payment is added to the total, and the month's ownership cost is the current home value × the annual percentage ÷ 12; after every twelfth month the home value is raised by the appreciation rate. At the end, net sale proceeds = home value × (1 − selling %) − remaining balance, and buying's total = down payment + purchase closing costs + payments + ownership costs − net sale proceeds.

Worked example on three horizons, every other input identical: $1,800 of rent growing 2% a year, against a $300,000 home with $45,000 down at 6.5% for 30 years, ownership costs of 1.8% of value a year, appreciation of 2.5%, selling costs of 6%, and purchase closing costs entered in dollars as $7,500 (applied as $7,500). Over 3 years, renting totals $66,105 and buying nets $69,313 after $57,819 of sale proceeds, so renting is cheaper by $3,208. Over 7 years, renting totals $160,581 and buying nets $123,997 after $104,648 of proceeds, so buying is cheaper by $36,583. Over 12 years, renting totals $289,701 and buying nets $184,747 after $174,345 of proceeds, so buying is cheaper by $104,955. Nothing but the horizon changed between the three runs. The up-front costs are the same dollars spread over more or fewer months, the selling costs are taken on a price that has had more or fewer years of appreciation, the rent has had more or fewer annual increases, and the loan balance has had more or less time to fall.

Validation. A stay longer than the mortgage term is rejected with “Years to stay cannot exceed the mortgage term.”; entering purchase closing costs both as a percent and as dollars is rejected with “Enter purchase closing costs as either a percent of the price or a dollar amount — not both.” Tool: Rent vs. Buy Calculator. Guide: Rent vs. buy: how the simulation works.

How to read the output

The outputs are plain ratios and totals, and mistakes in reading them come from forgetting what went in. These are the readings that go wrong, each tied to a figure computed above.

  • Operating expenses exclude the mortgage. Principal and interest belong in the cash-flow line, not the expense line. The cap-rate example shows what happens otherwise: the same building reports 0.67% instead of 6.42% once a $791.41 payment is misfiled as an expense.
  • Cap rate is financing-independent; cash-on-cash is not. The rental example at its entered rate and again at 0% returns the same 6.52% cap rate with cash-on-cash returns of 2.03% and 17.34%. If two analyses show different cap rates, the properties differ; if they show different cash-on-cash returns, the financing may be all that differs.
  • The horizon drives rent vs. buy. The same home, rent, and assumptions produce three different comparisons above at 3, 7, and 12 years. A result for a stay you will not actually make is a result for someone else.
  • Vacancy is a steady haircut. The 8% allowance in the rental example reduces every month's $1,650 of rent to $1,518.00; it does not place an empty month anywhere in particular.
  • Cash invested is not the purchase price. In the rental example cash invested is $40,000 — down payment plus closing costs plus rehab — against a $180,000 price, and the cash-on-cash return is measured against the smaller figure.
  • The 1% rule and GRM are gross-rent screens. Neither sees expenses, vacancy, or financing. They order a list of candidates by rent against price; they do not say whether any candidate works.
  • A negative result is a result. Negative cash flow, a negative cash-on-cash return, and a negative projected flip profit are returned as such, not suppressed, because a model that only reports good news is not a model.

What the models do not include

These are screening and planning tools, not underwriting engines. They do not model income taxes, depreciation deductions, appreciation on rentals, principal paydown as a return component, PMI, financing points, rent growth on investment properties, or market cycles. The rent-vs-buy model excludes the opportunity cost of the down payment and any tax treatment of mortgage interest, and it counts purchase closing costs only when you enter them — it never assumes a default. Each calculator's page states its own key omissions, and every calculator page and every guide carries a "not financial advice" note. Treat the output as a way to understand a deal's shape, not as a guarantee.

"Not modeled" means absent, not approximated. There is no hidden adjustment standing in for an omitted factor. The rental functions have no field for appreciation, so a property's cap rate and cash-on-cash return are the same whatever happens to its value. The flip function has no field for financing on the purchase, so its projected profit is the same whether the purchase is cash or borrowed. The rent-vs-buy function has no field for what the down payment might have earned elsewhere, so its buying total is the same whatever that return would have been. When an omitted factor matters to your decision, the number you need is not on this site, and no setting here will produce it. The guide What these models leave out goes through the omissions calculator by calculator.

Worked examples can't drift

The numbers in each page's explanation — every figure such as the $269.07 of monthly cash flow in the reference example below — are computed at build time by the very same engine that runs the interactive calculator, not typed in by hand. If the calculation logic ever changed, the copy would change with it (or the build would fail), so the documentation cannot silently disagree with the tool.

Concretely, each page declares its example inputs in its front matter, calls the engine with them while the site is being built, and interpolates the returned values into the sentences you read. A helper named mustOk throws — failing the build — if the engine rejects an example, and a companion mustFail does the reverse for the validation messages quoted on this page, throwing if a call that is supposed to be rejected is accepted. Where a page asserts a relationship between two results — that the cap rate did not move when the rate did, that a monthly and an annual GRM entry agree, that a per-square-foot figure is absent without an area — the assertion is checked at build time too. No computed figure on this page was typed.

Tested against reference figures

The engine is covered by automated tests that check it against independently computed reference values — for example, a $220,000 purchase at 20% down and 7% for 30 years producing a $1,170.93 payment, $269.07 monthly cash flow, 6.21% cash-on-cash, and a 7.85% cap rate. If you believe a result is wrong, that is exactly the kind of report we want: see the contact page, and confirmed issues are fixed in the engine and locked in with a new test.

The remaining inputs behind those four figures are $2,200 of monthly rent, a 5% vacancy allowance, $650 of monthly operating expenses, $5,000 of closing costs, and $3,000 of initial rehab, for $52,000 of cash invested and $17,280 of NOI. The figures above are recomputed by the engine each time this page is built, not copied from the test file, so the page and the tests are two independent checks on the same code.

Not financial advice: this page documents how the calculators compute. It is general educational material, not a recommendation to buy, sell, rent, renovate, or finance any property, and it cannot account for local market conditions, taxes, financing structures, or the condition of a specific property. Verify any consequential figure with qualified professionals before relying on it. Values entered in the calculators are processed locally in your browser and never transmitted.