Return on Investment (ROI) is the most critical metric for real estate investors. It measures how much profit you generate on an investment relative to its cost. However, in rental real estate, there are several ways to look at "return."
Key Metrics Explained
Cap Rate (Capitalization Rate): This measures the property's natural rate of return without considering financing. It is calculated as Net Operating Income (NOI) divided by the Purchase Price. It helps compare the intrinsic value of different properties.
Cash on Cash Return (CoC): This is often considered more important for investors using leverage (mortgages). It measures the annual cash flow relative to the actual "out-of-pocket" cash invested (your down payment and closing costs).
Monthly Cash Flow: This is the "take-home" profit after every single expense—including the mortgage, taxes, insurance, and maintenance—has been paid.
Example ROI Calculation
Imagine you buy a property for $250,000 with a 20% down payment ($50,000). Your monthly rent is $2,000. After paying your mortgage, taxes, and repairs, you have $400 left over each month.
Your annual cash flow is $4,800 ($400 x 12). To find your Cash on Cash return, you divide $4,800 by your initial $50,000 investment, resulting in a 9.6% CoC return.
Why Maintenance Matters
Many new investors fail to account for maintenance and vacancy. A good rule of thumb is to set aside 5% to 10% of the monthly rent for future repairs. Our calculator includes a "Maintenance/Misc" field to ensure your ROI projections remain realistic over the long term.
function calculateRentalROI() {
// Get Inputs
var price = parseFloat(document.getElementById('roi_price').value);
var downPercent = parseFloat(document.getElementById('roi_down_percent').value);
var interestRate = parseFloat(document.getElementById('roi_interest').value) / 100 / 12;
var loanTermYears = parseFloat(document.getElementById('roi_term').value);
var monthlyRent = parseFloat(document.getElementById('roi_rent').value);
var annualTaxes = parseFloat(document.getElementById('roi_taxes').value);
var annualInsurance = parseFloat(document.getElementById('roi_insurance').value);
var monthlyMaint = parseFloat(document.getElementById('roi_maint').value);
// Validate
if (isNaN(price) || isNaN(monthlyRent) || price 0) {
monthlyMortgage = loanAmount * (interestRate * Math.pow(1 + interestRate, numberOfPayments)) / (Math.pow(1 + interestRate, numberOfPayments) – 1);
} else {
monthlyMortgage = loanAmount / numberOfPayments;
}
var monthlyTaxes = annualTaxes / 12;
var monthlyInsurance = annualInsurance / 12;
// Operating Expenses (Excluding Mortgage)
var monthlyOpEx = monthlyTaxes + monthlyInsurance + monthlyMaint;
var annualOpEx = monthlyOpEx * 12;
// Net Operating Income (NOI)
var annualIncome = monthlyRent * 12;
var noi = annualIncome – annualOpEx;
// Cash Flow
var totalMonthlyExpenses = monthlyMortgage + monthlyOpEx;
var monthlyCashFlow = monthlyRent – totalMonthlyExpenses;
var annualCashFlow = monthlyCashFlow * 12;
// Metrics
var capRate = (noi / price) * 100;
var cashOnCash = (annualCashFlow / downPayment) * 100;
// Display Results
document.getElementById('roi_results_box').style.display = 'block';
document.getElementById('res_cash_flow').innerText = '$' + monthlyCashFlow.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('res_cap_rate').innerText = capRate.toFixed(2) + '%';
document.getElementById('res_coc').innerText = (downPayment > 0) ? cashOnCash.toFixed(2) + '%' : 'N/A';
document.getElementById('res_mortgage').innerText = '$' + monthlyMortgage.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
}