Investing in real estate requires a deep dive into the numbers to ensure a property is a "cash-flowing asset" rather than a "liability." This calculator helps you determine the two most important metrics in rental investing: Cash-on-Cash Return and Net Monthly Cash Flow.
Key Metrics Explained
Cash-on-Cash Return: This is the ratio of annual before-tax cash flow to the total amount of cash invested. It tells you exactly how much "yield" your actual cash is generating.
Cap Rate (Capitalization Rate): This measures the property's natural rate of return without considering financing. It's calculated by dividing Net Operating Income (NOI) by the purchase price.
Net Cash Flow: This is the money left in your pocket every month after every single bill—mortgage, taxes, insurance, and maintenance reserves—has been paid.
Real-World Example
Imagine you buy a duplex for $300,000 with a 20% down payment ($60,000). If your total monthly expenses (including mortgage) are $2,100 and you collect $2,500 in rent, your monthly cash flow is $400. Annually, that's $4,800. Dividing $4,800 by your $60,000 investment gives you an 8% Cash-on-Cash ROI.
How to Increase Your ROI
There are generally three ways to improve these numbers: increase the rent, decrease operating expenses (like challenging property tax assessments), or buy the property at a steeper discount to reduce your mortgage payment and initial investment.
function calculateROI() {
var price = parseFloat(document.getElementById('purchasePrice').value);
var downPerc = parseFloat(document.getElementById('downPaymentPerc').value);
var rate = parseFloat(document.getElementById('interestRate').value) / 100 / 12;
var term = parseFloat(document.getElementById('loanTerm').value) * 12;
var rent = parseFloat(document.getElementById('monthlyRent').value);
var tax = parseFloat(document.getElementById('propertyTax').value);
var insurance = parseFloat(document.getElementById('insurance').value);
var maintenancePerc = parseFloat(document.getElementById('maintenancePerc').value) / 100;
if (isNaN(price) || isNaN(rent) || price 0) {
mortgage = loanAmount * (rate * Math.pow(1 + rate, term)) / (Math.pow(1 + rate, term) – 1);
} else {
mortgage = loanAmount / term;
}
var maintenanceReserve = rent * maintenancePerc;
var totalExpenses = tax + insurance + maintenanceReserve;
var totalOutflow = mortgage + totalExpenses;
var cashFlow = rent – totalOutflow;
// Annualized
var annualCashFlow = cashFlow * 12;
var closingCosts = price * 0.03; // Estimated 3% closing costs
var totalCashInvested = downPayment + closingCosts;
var roi = (annualCashFlow / totalCashInvested) * 100;
// Cap Rate Calculation (NOI / Price)
var noi = (rent – totalExpenses) * 12;
var capRate = (noi / price) * 100;
// Update UI
document.getElementById('resMortgage').innerText = "$" + mortgage.toFixed(2);
document.getElementById('resExpenses').innerText = "$" + totalExpenses.toFixed(2);
document.getElementById('resCashFlow').innerText = "$" + cashFlow.toFixed(2);
document.getElementById('resROI').innerText = roi.toFixed(2) + "%";
document.getElementById('resInvestment').innerText = "$" + totalCashInvested.toLocaleString();
document.getElementById('resCapRate').innerText = capRate.toFixed(2) + "%";
document.getElementById('results').style.display = "block";
}