Calculate Cash Flow, Cap Rate, and Cash on Cash Return for your real estate investment.
(Taxes, Insurance, HOA, Maintenance)
Investment Analysis
Monthly Cash Flow
–
Cash on Cash Return
–
Cap Rate
–
Net Operating Income (NOI)
–
Monthly Mortgage Payment
–
Total Cash Invested
–
Understanding Your Rental Property Returns
Real estate investing requires precise calculations to ensure a property will generate profit. This Rental Property ROI Calculator helps investors analyze the potential performance of an investment property by looking at key metrics like Cash Flow, Cap Rate, and Cash on Cash Return.
Key Metrics Explained
1. Net Operating Income (NOI)
NOI is the total income the property generates annually minus all necessary operating expenses (taxes, insurance, maintenance, vacancy). Importantly, NOI does not include mortgage payments. It represents the profitability of the asset itself, independent of financing.
Formula: Gross Income – Operating Expenses = NOI
2. Capitalization Rate (Cap Rate)
The Cap Rate measures the natural rate of return on the property assuming it was bought with cash. It allows you to compare different properties regardless of how they are financed. A higher cap rate generally indicates a higher potential return, but may come with higher risk.
Formula: (NOI / Purchase Price) × 100
3. Cash Flow
Cash Flow is the money left over after all bills, operating expenses, and debt service (mortgage payments) are paid. Positive cash flow is essential for a sustainable long-term investment strategy. This calculator accounts for vacancy rates to give a realistic monthly estimate.
4. Cash on Cash Return
This is arguably the most important metric for investors using leverage (mortgages). It measures the annual cash income earned on the actual cash invested (Down Payment + Closing Costs). It tells you how hard your specific dollars are working.
Formula: (Annual Cash Flow / Total Cash Invested) × 100
How to Use This Calculator
Purchase Price: The agreed-upon price of the property.
Down Payment & Closing Costs: Your initial cash outlay.
Expenses: Estimate property taxes, insurance, HOA fees, and maintenance. A common rule of thumb is to set aside 1% of the property value annually for maintenance.
Vacancy Rate: The percentage of time the property sits empty. 5-8% is a standard conservative estimate.
function calculateROI() {
// 1. Get Inputs
var price = parseFloat(document.getElementById('purchasePrice').value);
var downPayment = parseFloat(document.getElementById('downPayment').value);
var closingCosts = parseFloat(document.getElementById('closingCosts').value);
var interestRate = parseFloat(document.getElementById('interestRate').value);
var loanTerm = parseFloat(document.getElementById('loanTerm').value);
var monthlyRent = parseFloat(document.getElementById('monthlyRent').value);
var annualExpenses = parseFloat(document.getElementById('annualExpenses').value);
var vacancyRate = parseFloat(document.getElementById('vacancyRate').value);
// Validation
if (isNaN(price) || isNaN(downPayment) || isNaN(monthlyRent)) {
alert("Please enter valid numbers for Price, Down Payment, and Rent.");
return;
}
// 2. Loan Calculations
var loanAmount = price – downPayment;
var monthlyRate = (interestRate / 100) / 12;
var numberOfPayments = loanTerm * 12;
var monthlyMortgage = 0;
if (loanAmount > 0) {
if (interestRate === 0) {
monthlyMortgage = loanAmount / numberOfPayments;
} else {
monthlyMortgage = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numberOfPayments)) / (Math.pow(1 + monthlyRate, numberOfPayments) – 1);
}
}
// 3. Income & Expense Calculations
var vacancyLoss = (monthlyRent * 12) * (vacancyRate / 100);
var grossAnnualIncome = (monthlyRent * 12) – vacancyLoss;
var netOperatingIncome = grossAnnualIncome – annualExpenses; // NOI
var annualDebtService = monthlyMortgage * 12;
var annualCashFlow = netOperatingIncome – annualDebtService;
var monthlyCashFlow = annualCashFlow / 12;
var totalCashInvested = downPayment + closingCosts;
// 4. Return Metrics
var capRate = (netOperatingIncome / price) * 100;
var cashOnCash = 0;
if (totalCashInvested > 0) {
cashOnCash = (annualCashFlow / totalCashInvested) * 100;
}
// 5. Update UI
var currencyFormatter = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' });
var percentFormatter = new Intl.NumberFormat('en-US', { style: 'percent', minimumFractionDigits: 2, maximumFractionDigits: 2 });
document.getElementById('monthlyCashFlow').innerHTML = currencyFormatter.format(monthlyCashFlow);
document.getElementById('cashOnCash').innerHTML = cashOnCash.toFixed(2) + "%";
document.getElementById('capRate').innerHTML = capRate.toFixed(2) + "%";
document.getElementById('noi').innerHTML = currencyFormatter.format(netOperatingIncome);
document.getElementById('monthlyMortgage').innerHTML = currencyFormatter.format(monthlyMortgage);
document.getElementById('totalInvested').innerHTML = currencyFormatter.format(totalCashInvested);
// Styling for positive/negative values
var cashFlowEl = document.getElementById('monthlyCashFlow');
if (monthlyCashFlow >= 0) {
cashFlowEl.className = "value positive";
} else {
cashFlowEl.className = "value negative";
}
var cocEl = document.getElementById('cashOnCash');
if (cashOnCash >= 0) {
cocEl.className = "value positive";
} else {
cocEl.className = "value negative";
}
document.getElementById('results').style.display = "block";
}