Please enter valid positive numbers for all fields.
Cash on Cash Return
0.00%
Cap Rate
0.00%
Monthly Mortgage Payment (P&I):$0.00
Total Monthly Expenses:$0.00
Net Operating Income (Monthly):$0.00
Monthly Cash Flow:$0.00
Annual Profit:$0.00
Understanding Real Estate Investment ROI
Investing in rental properties is a proven strategy for building wealth, but ensuring a property is profitable requires careful calculation. This Rental Property ROI Calculator helps investors analyze the potential returns of a real estate deal by breaking down cash flow, capitalization rates (Cap Rate), and Cash on Cash returns.
Key Metrics Explained
To make informed investment decisions, it is crucial to understand the outputs of this calculator:
Cash on Cash Return (CoC): This is arguably the most important metric for investors using leverage (mortgages). It measures the annual pre-tax cash flow divided by the total cash invested (Down Payment + Closing Costs). A CoC of 8-12% is generally considered good in many markets.
Cap Rate (Capitalization Rate): This measures the natural rate of return of the property if it were bought in cash. It is calculated by dividing the Net Operating Income (NOI) by the purchase price. It helps compare properties regardless of financing.
Net Operating Income (NOI): This is the total income the property generates minus all necessary operating expenses (taxes, insurance, maintenance), excluding mortgage payments.
Monthly Cash Flow: The money left in your pocket every month after all expenses and mortgage payments are made.
How to Calculate Rental Property ROI
The formula for a successful rental investment involves several steps:
Determine Total Cash Investment: Sum your down payment, closing costs, and any immediate repair costs.
Calculate Operating Expenses: Add up property taxes, insurance, HOA fees, vacancy reserves, and maintenance costs.
Calculate NOI: Subtract operating expenses from your gross rental income.
Subtract Debt Service: Calculate your monthly mortgage payment (Principal & Interest) and subtract it from the NOI to find your Cash Flow.
Final ROI Calculation: Divide your Annual Cash Flow by your Total Cash Investment to get your Cash on Cash Return percentage.
Why Maintenance and Vacancy Matter
Many novice investors make the mistake of calculating ROI based only on Mortgage, Taxes, and Insurance. However, maintenance and vacancy are real costs. This calculator includes fields for maintenance to ensure you are budgeting for the inevitable repairs, such as water heaters or roof patches, that occur over the life of an investment.
function calculateROI() {
// 1. Get DOM elements and values
var price = parseFloat(document.getElementById("purchasePrice").value);
var down = parseFloat(document.getElementById("downPayment").value);
var rate = parseFloat(document.getElementById("interestRate").value);
var term = parseFloat(document.getElementById("loanTerm").value);
var closing = parseFloat(document.getElementById("closingCosts").value);
var rent = parseFloat(document.getElementById("monthlyRent").value);
var taxYear = parseFloat(document.getElementById("propertyTax").value);
var insYear = parseFloat(document.getElementById("insurance").value);
var hoa = parseFloat(document.getElementById("hoa").value);
var maint = parseFloat(document.getElementById("maintenance").value);
var errorBox = document.getElementById("errorBox");
var resultsArea = document.getElementById("resultsArea");
// 2. Validation
if (isNaN(price) || isNaN(down) || isNaN(rate) || isNaN(term) || isNaN(rent) ||
isNaN(taxYear) || isNaN(insYear) || isNaN(hoa) || isNaN(maint) || isNaN(closing)) {
errorBox.style.display = "block";
resultsArea.style.display = "none";
return;
}
if (down > price) {
alert("Down payment cannot be greater than purchase price.");
return;
}
errorBox.style.display = "none";
// 3. Calculation Logic
// Loan Amount
var loanAmount = price – down;
// Mortgage Payment (P&I) Formula
var monthlyRate = (rate / 100) / 12;
var numPayments = term * 12;
var mortgagePayment = 0;
// Handle case where interest rate is 0
if (rate === 0) {
mortgagePayment = loanAmount / numPayments;
} else {
mortgagePayment = (loanAmount * monthlyRate * Math.pow(1 + monthlyRate, numPayments)) / (Math.pow(1 + monthlyRate, numPayments) – 1);
}
// Monthly Expenses Calculation
var monthlyTax = taxYear / 12;
var monthlyIns = insYear / 12;
var totalOperatingExpenses = monthlyTax + monthlyIns + hoa + maint;
var totalMonthlyCost = totalOperatingExpenses + mortgagePayment;
// Income Metrics
var noiMonthly = rent – totalOperatingExpenses;
var noiAnnual = noiMonthly * 12;
var cashFlowMonthly = noiMonthly – mortgagePayment;
var cashFlowAnnual = cashFlowMonthly * 12;
// Total Cash Invested
var totalCashInvested = down + closing;
// ROI Metrics
var capRate = (noiAnnual / price) * 100;
var cashOnCash = 0;
if (totalCashInvested > 0) {
cashOnCash = (cashFlowAnnual / totalCashInvested) * 100;
}
// 4. Update DOM
resultsArea.style.display = "block";
document.getElementById("resCoc").innerText = cashOnCash.toFixed(2) + "%";
document.getElementById("resCap").innerText = capRate.toFixed(2) + "%";
document.getElementById("resMortgage").innerText = "$" + mortgagePayment.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
// Total expenses shown includes mortgage for clarity in "out of pocket" context
document.getElementById("resTotalExp").innerText = "$" + totalMonthlyCost.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("resNoiMonthly").innerText = "$" + noiMonthly.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
var cashFlowEl = document.getElementById("resCashFlow");
cashFlowEl.innerText = "$" + cashFlowMonthly.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
// Color coding cash flow
if (cashFlowMonthly >= 0) {
cashFlowEl.style.color = "#27ae60"; // Green
} else {
cashFlowEl.style.color = "#c0392b"; // Red
}
document.getElementById("resAnnualProfit").innerText = "$" + cashFlowAnnual.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
}
function resetCalculator() {
document.getElementById("purchasePrice").value = "";
document.getElementById("downPayment").value = "";
document.getElementById("interestRate").value = "";
document.getElementById("loanTerm").value = "";
document.getElementById("closingCosts").value = "";
document.getElementById("monthlyRent").value = "";
document.getElementById("propertyTax").value = "";
document.getElementById("insurance").value = "";
document.getElementById("hoa").value = "";
document.getElementById("maintenance").value = "";
document.getElementById("resultsArea").style.display = "none";
document.getElementById("errorBox").style.display = "none";
}