Return on Investment (ROI) is the most critical metric for real estate investors. It measures the efficiency of an investment or compares the efficiencies of several different investments. In rental real estate, we focus on two primary types of returns: Cap Rate and Cash-on-Cash Return.
Key Metrics Explained
Cap Rate (Capitalization Rate): Calculated as Net Operating Income (NOI) divided by the purchase price. It ignores financing and shows the property's natural yield.
Cash-on-Cash ROI: This is the ratio of annual before-tax cash flow to the total amount of cash invested. It is more accurate for investors using mortgages.
Net Operating Income (NOI): Your total annual income minus all operating expenses (excluding mortgage payments).
Realistic Example
Suppose you buy a duplex for $300,000 with a 20% down payment ($60,000).
If your total monthly expenses (mortgage, tax, insurance, maintenance) are $2,100 and your rent is $2,500, your monthly cash flow is $400.
Annually, that is $4,800. Your Cash-on-Cash ROI would be $4,800 divided by your $60,000 investment, resulting in an 8% CoC Return.
Why Maintenance and Vacancy Matter
New investors often forget to factor in maintenance (usually 1% of property value per year) and vacancy (typically 5% of gross rent). Failing to include these can lead to "phantom profits" that disappear when a water heater breaks or a tenant moves out.
function calculateROI() {
var price = parseFloat(document.getElementById('propPrice').value);
var downPercent = parseFloat(document.getElementById('downPercent').value);
var intRate = parseFloat(document.getElementById('intRate').value) / 100 / 12;
var termMonths = parseFloat(document.getElementById('loanTerm').value) * 12;
var rent = parseFloat(document.getElementById('monthlyRent').value);
var tax = parseFloat(document.getElementById('annualTax').value);
var ins = parseFloat(document.getElementById('annualIns').value);
var maint = parseFloat(document.getElementById('monthlyMaint').value);
if (isNaN(price) || isNaN(rent) || price 0) {
monthlyMortgage = loanAmt * (intRate * Math.pow(1 + intRate, termMonths)) / (Math.pow(1 + intRate, termMonths) – 1);
} else {
monthlyMortgage = loanAmt / termMonths;
}
// Monthly Expenses
var monthlyTax = tax / 12;
var monthlyIns = ins / 12;
var totalExpenses = monthlyMortgage + monthlyTax + monthlyIns + maint;
// Cash Flow
var monthlyCashFlow = rent – totalExpenses;
var annualCashFlow = monthlyCashFlow * 12;
// Cap Rate (NOI / Price)
// NOI = Annual Rent – Operating Expenses (No mortgage)
var annualOperatingExp = tax + ins + (maint * 12);
var noi = (rent * 12) – annualOperatingExp;
var capRate = (noi / price) * 100;
// Cash on Cash ROI
var cocROI = (annualCashFlow / downAmt) * 100;
// Update Results
document.getElementById('resDownPay').innerText = "$" + downAmt.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resMortgage').innerText = "$" + monthlyMortgage.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resExpenses').innerText = "$" + totalExpenses.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resCashFlow').innerText = "$" + monthlyCashFlow.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resCapRate').innerText = capRate.toFixed(2) + "%";
document.getElementById('resCoC').innerText = cocROI.toFixed(2) + "%";
document.getElementById('roiResults').style.display = 'block';
}