Calculate your potential Return on Investment and Monthly Cash Flow
Total Cash Invested (Down Payment)$0.00
Monthly Mortgage (P&I)$0.00
Monthly Cash Flow$0.00
Annual Cash Flow$0.00
Cash on Cash ROI0.00%
How to Calculate Rental Property ROI
Investing in real estate is one of the most proven ways to build wealth, but the secret lies in the numbers. ROI (Return on Investment) tells you how much profit you are making relative to the amount of cash you've put into the deal. Specifically, for rental properties, we look at Cash on Cash Return.
The Formula for Cash on Cash Return
To calculate your ROI, you need to follow these steps:
Annual Pre-Tax Cash Flow: Monthly Rent – (Monthly Mortgage + Monthly Expenses like tax, insurance, and maintenance) × 12.
Total Cash Invested: This is typically your down payment plus closing costs or renovation fees.
ROI Equation: (Annual Cash Flow / Total Cash Invested) × 100.
Real-World Example
Imagine you buy a property for $250,000 with a 20% down payment ($50,000). If your monthly rent is $2,200 and your total expenses (mortgage, tax, insurance) are $1,800, your monthly cash flow is $400. Over a year, that's $4,800. Your ROI would be $4,800 / $50,000 = 9.6%.
Factors That Influence Your Return
Several variables can shift your ROI significantly:
Interest Rates: Even a 1% increase in mortgage rates can slash your monthly cash flow.
Vacancy Rates: Smart investors always factor in a 5-10% vacancy rate to account for months when the property is empty.
Property Management: If you hire a manager, they typically take 8-12% of the monthly rent.
Maintenance: Older properties usually require 1-2% of the property value per year in upkeep.
function calculateRentalROI() {
// Fetch values
var price = parseFloat(document.getElementById("propPrice").value);
var downPct = parseFloat(document.getElementById("downPayment").value);
var rate = parseFloat(document.getElementById("interestRate").value);
var term = parseFloat(document.getElementById("loanTerm").value);
var rent = parseFloat(document.getElementById("monthlyRent").value);
var expenses = parseFloat(document.getElementById("monthlyExpenses").value);
// Validation
if (isNaN(price) || isNaN(downPct) || isNaN(rate) || isNaN(term) || isNaN(rent) || isNaN(expenses)) {
alert("Please enter valid numerical values for all fields.");
return;
}
// Calculations
var cashInvested = price * (downPct / 100);
var loanAmount = price – cashInvested;
// Monthly Mortgage Formula: P [ i(1 + i)^n ] / [ (1 + i)^n – 1]
var monthlyInterest = (rate / 100) / 12;
var numberOfPayments = term * 12;
var mortgage = 0;
if (monthlyInterest > 0) {
mortgage = loanAmount * (monthlyInterest * Math.pow(1 + monthlyInterest, numberOfPayments)) / (Math.pow(1 + monthlyInterest, numberOfPayments) – 1);
} else {
mortgage = loanAmount / numberOfPayments;
}
var monthlyCashFlow = rent – mortgage – expenses;
var annualCashFlow = monthlyCashFlow * 12;
var roi = (annualCashFlow / cashInvested) * 100;
// Display Results
document.getElementById("resCashInvested").innerText = "$" + cashInvested.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("resMortgage").innerText = "$" + mortgage.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("resCashFlow").innerText = "$" + monthlyCashFlow.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("resAnnualFlow").innerText = "$" + annualCashFlow.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("resROI").innerText = roi.toFixed(2) + "%";
// Show Section
document.getElementById("resultsArea").style.display = "block";
}