Investing in real estate is one of the most reliable ways to build wealth, but simply buying a property doesn't guarantee profit. To succeed, you must understand the numbers behind the deal. This Rental Property Cash Flow & ROI Calculator is designed to give you a clear picture of your potential investment performance by analyzing income, expenses, and financing costs.
What is Cash on Cash ROI?
Cash on Cash Return on Investment (ROI) is a metric often used in real estate transactions that calculates the cash income earned on the cash invested in a property. It measures the annual return the investor made on the property in relation to the amount of mortgage paid during the same year.
Unlike a standard return on investment calculation, Cash on Cash ROI measures the return on the actual cash invested (down payment + closing costs + rehab costs), providing a more accurate analysis of the investment's performance relative to the money you have personally put into the deal.
Key Inputs Explained
Purchase Price: The total selling price of the property.
Down Payment: The percentage of the purchase price you are paying upfront. A higher down payment reduces your monthly mortgage but increases your initial cash outlay.
Loan Term & Interest Rate: These determine your monthly mortgage principal and interest payments. Even a small difference in interest rates can significantly impact your cash flow.
Monthly Rental Income: The amount you expect to collect from tenants. Be sure to account for potential vacancies in your estimates.
Property Tax & Expenses: Taxes, insurance, HOA fees, and maintenance reserves are often underestimated. Accurate entry of these figures is crucial for a realistic result.
Interpreting Your Results
Positive Cash Flow: If your Monthly Cash Flow result is green, your property is generating income after all expenses are paid. This is the goal for most buy-and-hold investors.
Negative Cash Flow: If the number is red, the property costs more to maintain than it brings in. While some investors accept this for future appreciation, it presents a higher month-to-month financial risk.
ROI Percentage: A "good" Cash on Cash ROI varies by market and strategy, but many investors look for returns between 8% and 12% to justify the illiquidity of real estate compared to the stock market.
function calculateRentalROI() {
// 1. Get Input Values
var price = parseFloat(document.getElementById('purchasePrice').value);
var downPercent = parseFloat(document.getElementById('downPayment').value);
var interestRate = parseFloat(document.getElementById('interestRate').value);
var years = parseFloat(document.getElementById('loanTerm').value);
var rent = parseFloat(document.getElementById('monthlyRent').value);
var taxRate = parseFloat(document.getElementById('annualTaxRate').value);
var otherExp = parseFloat(document.getElementById('monthlyExpenses').value);
// 2. Validation
if (isNaN(price) || isNaN(downPercent) || isNaN(interestRate) || isNaN(years) || isNaN(rent) || isNaN(taxRate) || isNaN(otherExp)) {
alert("Please fill in all fields with valid numbers.");
return;
}
// 3. Calculation Logic
var downPaymentAmount = price * (downPercent / 100);
var loanAmount = price – downPaymentAmount;
// Mortgage Calculation (Monthly Principal & Interest)
var monthlyRate = (interestRate / 100) / 12;
var numberOfPayments = years * 12;
var monthlyMortgage = 0;
if (interestRate === 0) {
monthlyMortgage = loanAmount / numberOfPayments;
} else {
monthlyMortgage = (loanAmount * monthlyRate * Math.pow(1 + monthlyRate, numberOfPayments)) / (Math.pow(1 + monthlyRate, numberOfPayments) – 1);
}
// Property Tax Calculation (Monthly)
var monthlyTax = (price * (taxRate / 100)) / 12;
// Total Monthly Expenses
var totalMonthlyExpenses = monthlyMortgage + monthlyTax + otherExp;
// Cash Flow Calculation
var monthlyCashFlow = rent – totalMonthlyExpenses;
var annualCashFlow = monthlyCashFlow * 12;
// Cash on Cash ROI Calculation
// Assuming Closing costs are roughly 2% of price for estimation if not explicitly asked,
// but to keep it strict to inputs, we divide Annual Cash Flow by Down Payment Amount.
var cashInvested = downPaymentAmount;
var roi = 0;
if (cashInvested > 0) {
roi = (annualCashFlow / cashInvested) * 100;
}
// 4. Update UI
var mortgageEl = document.getElementById('displayMortgage');
var expEl = document.getElementById('displayTotalExp');
var cashFlowEl = document.getElementById('displayCashFlow');
var roiEl = document.getElementById('displayROI');
var resultsDiv = document.getElementById('roiResults');
// Formatting currency
mortgageEl.innerText = '$' + monthlyMortgage.toFixed(2);
expEl.innerText = '$' + totalMonthlyExpenses.toFixed(2);
cashFlowEl.innerText = '$' + monthlyCashFlow.toFixed(2);
roiEl.innerText = roi.toFixed(2) + '%';
// Styling logic for Positive/Negative
if (monthlyCashFlow >= 0) {
cashFlowEl.classList.remove('negative');
cashFlowEl.classList.add('positive');
} else {
cashFlowEl.classList.remove('positive');
cashFlowEl.classList.add('negative');
}
if (roi >= 0) {
roiEl.classList.remove('negative');
roiEl.classList.add('positive');
} else {
roiEl.classList.remove('positive');
roiEl.classList.add('negative');
}
// Show results
resultsDiv.style.display = 'block';
}