Investing in real estate is a powerful way to build wealth, but simply buying a property and renting it out doesn't guarantee profit. Successful real estate investors rely on specific metrics to evaluate whether a property is a sound investment. Our Rental Property ROI Calculator helps you analyze the numbers behind a potential deal.
What is Cash Flow?
Cash flow is the net amount of money moving into and out of your rental business each month. It is calculated by subtracting your total monthly expenses (mortgage, taxes, insurance, repairs, HOA fees) from your total monthly rental income.
Positive Cash Flow: You earn more in rent than you pay in expenses. This is the goal for most buy-and-hold investors.
Negative Cash Flow: The property costs you money every month to hold. This is generally risky unless you are banking on significant appreciation.
Why is Cash on Cash ROI Important?
While cash flow tells you how much money you make monthly, Cash on Cash Return on Investment (ROI) tells you how hard your money is working. It measures the annual cash flow relative to the total cash you invested upfront (down payment + closing costs).
For example, if you invest $50,000 to buy a property and it generates $5,000 in positive cash flow per year, your Cash on Cash ROI is 10%. This metric allows you to compare real estate returns against other investment vehicles like stocks or bonds.
The Impact of Vacancy Rates
Novice investors often assume a property will be rented 100% of the time. However, tenants move out, and turnover takes time. A standard vacancy rate to factor into your calculations is 5% to 8%. Our calculator adjusts your gross income to reflect these potential periods of vacancy, giving you a more realistic picture of your "Effective Monthly Income."
How to Use This Calculator
Enter the purchase price, your financing details, and your estimated operating expenses. Be sure to estimate repairs and maintenance accurately—often 5-10% of the rent—to ensure your cash flow projection remains realistic over the long term.
function calculateROI() {
// 1. Get Input Values
var price = parseFloat(document.getElementById('purchasePrice').value);
var downPaymentPercent = parseFloat(document.getElementById('downPayment').value);
var rate = parseFloat(document.getElementById('interestRate').value);
var years = parseFloat(document.getElementById('loanTerm').value);
var closingCosts = parseFloat(document.getElementById('closingCosts').value);
var rent = parseFloat(document.getElementById('monthlyRent').value);
var expenses = parseFloat(document.getElementById('monthlyExpenses').value);
var vacancyPercent = parseFloat(document.getElementById('vacancyRate').value);
var errorDiv = document.getElementById('errorDisplay');
var resultsDiv = document.getElementById('resultsArea');
// 2. Validation
if (isNaN(price) || isNaN(downPaymentPercent) || isNaN(rate) || isNaN(years) ||
isNaN(closingCosts) || isNaN(rent) || isNaN(expenses) || isNaN(vacancyPercent)) {
errorDiv.style.display = 'block';
resultsDiv.style.display = 'none';
return;
}
errorDiv.style.display = 'none';
// 3. Calculation Logic
// Loan Calculations
var downPaymentAmount = price * (downPaymentPercent / 100);
var loanAmount = price – downPaymentAmount;
var monthlyRate = (rate / 100) / 12;
var numberOfPayments = years * 12;
// Mortgage Calculation Formula: M = P [ i(1 + i)^n ] / [ (1 + i)^n – 1]
var monthlyMortgage = 0;
if (rate > 0) {
monthlyMortgage = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numberOfPayments)) / (Math.pow(1 + monthlyRate, numberOfPayments) – 1);
} else {
monthlyMortgage = loanAmount / numberOfPayments;
}
// Income Calculations
var vacancyLoss = rent * (vacancyPercent / 100);
var effectiveIncome = rent – vacancyLoss;
// Expense Calculations
var totalMonthlyExpenses = monthlyMortgage + expenses;
// Cash Flow Calculations
var monthlyCashFlow = effectiveIncome – totalMonthlyExpenses;
var annualCashFlow = monthlyCashFlow * 12;
// ROI Calculations
var totalInitialInvestment = downPaymentAmount + closingCosts;
var cashOnCashROI = 0;
if (totalInitialInvestment > 0) {
cashOnCashROI = (annualCashFlow / totalInitialInvestment) * 100;
}
// 4. Formatting and Display
// Format Currency Helper
var formatCurrency = function(num) {
return '$' + num.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
};
document.getElementById('displayMortgage').innerHTML = formatCurrency(monthlyMortgage);
document.getElementById('displayInvested').innerHTML = formatCurrency(totalInitialInvestment);
document.getElementById('displayIncome').innerHTML = formatCurrency(effectiveIncome);
document.getElementById('displayTotalExpenses').innerHTML = formatCurrency(totalMonthlyExpenses);
var cashFlowEl = document.getElementById('displayMonthlyCashFlow');
cashFlowEl.innerHTML = formatCurrency(monthlyCashFlow);
cashFlowEl.style.color = monthlyCashFlow >= 0 ? '#27ae60' : '#c0392b';
var annualCashFlowEl = document.getElementById('displayAnnualCashFlow');
annualCashFlowEl.innerHTML = formatCurrency(annualCashFlow);
annualCashFlowEl.style.color = annualCashFlow >= 0 ? '#27ae60' : '#c0392b';
var roiEl = document.getElementById('displayROI');
roiEl.innerHTML = cashOnCashROI.toFixed(2) + '%';
roiEl.style.color = cashOnCashROI >= 0 ? '#27ae60' : '#c0392b';
// Show Results
resultsDiv.style.display = 'block';
}