Investing in real estate is one of the most reliable ways to build wealth, but simply buying a property and renting it out doesn't guarantee a profit. To succeed, investors must calculate their Cash Flow and Cash on Cash Return accurately.
What is Cash Flow?
Cash flow represents the net amount of money moving in and out of your investment each month. It is calculated by taking your total income (rent) and subtracting all expenses, including the mortgage, taxes, insurance, vacancy reserves, and maintenance costs.
Positive Cash Flow: Your property generates more income than it costs to operate. This is the goal for passive income investors.
Negative Cash Flow: The property costs you money every month. While some investors accept this for potential appreciation, it carries higher risk.
Why Cash on Cash Return Matters
While cash flow tells you how much money you make monthly, Cash on Cash Return (CoC) tells you how hard your money is working. It compares your annual pre-tax cash flow to the total cash you actually invested (usually the down payment and closing costs).
Formula: (Annual Cash Flow / Total Cash Invested) × 100
A good CoC return 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.
Using This Calculator
This calculator helps you estimate the financial performance of a potential rental property. By inputting the purchase price, loan details, and estimated expenses, you can determine if a deal makes financial sense before making an offer. Remember to be conservative with your estimates, particularly for vacancy and maintenance, to ensure a margin of safety.
function calculateRentalROI() {
// 1. Get Inputs
var price = parseFloat(document.getElementById('rpcPrice').value);
var downPercent = parseFloat(document.getElementById('rpcDownPayment').value);
var interestRate = parseFloat(document.getElementById('rpcInterest').value);
var termYears = parseFloat(document.getElementById('rpcTerm').value);
var rent = parseFloat(document.getElementById('rpcRent').value);
var vacancyRate = parseFloat(document.getElementById('rpcVacancy').value);
var annualTax = parseFloat(document.getElementById('rpcPropTax').value);
var annualIns = parseFloat(document.getElementById('rpcInsurance').value);
var monthlyMaint = parseFloat(document.getElementById('rpcMaintenance').value);
var monthlyHOA = parseFloat(document.getElementById('rpcHOA').value);
// Validation
if (isNaN(price) || isNaN(downPercent) || isNaN(rent)) {
alert("Please enter valid numbers for Price, Down Payment, and Rent.");
return;
}
// 2. Mortgage Calculation
var downPayment = price * (downPercent / 100);
var loanAmount = price – downPayment;
var monthlyRate = (interestRate / 100) / 12;
var numPayments = termYears * 12;
var mortgagePayment = 0;
if (interestRate > 0) {
mortgagePayment = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numPayments)) / (Math.pow(1 + monthlyRate, numPayments) – 1);
} else {
mortgagePayment = loanAmount / numPayments;
}
// 3. Expense Calculation
var monthlyTax = annualTax / 12;
var monthlyIns = annualIns / 12;
var vacancyCost = rent * (vacancyRate / 100);
var totalMonthlyExpenses = mortgagePayment + monthlyTax + monthlyIns + monthlyMaint + monthlyHOA; // Vacancy is usually deducted from income, but acts like an expense reduction
var totalOperatingExpenses = monthlyTax + monthlyIns + monthlyMaint + monthlyHOA + vacancyCost;
// 4. Income Calculation
var adjustedRent = rent – vacancyCost;
// 5. Cash Flow Calculation
var monthlyCashFlow = adjustedRent – (mortgagePayment + monthlyTax + monthlyIns + monthlyMaint + monthlyHOA);
var annualCashFlow = monthlyCashFlow * 12;
// 6. ROI Calculation
var cashInvested = downPayment; // Keeping it simple (ignoring closing costs/rehab for this specific tool version)
var cocReturn = 0;
if (cashInvested > 0) {
cocReturn = (annualCashFlow / cashInvested) * 100;
}
// 7. Display Results
document.getElementById('resMortgage').innerText = "$" + mortgagePayment.toFixed(2);
document.getElementById('resTotalExp').innerText = "$" + (totalMonthlyExpenses + vacancyCost).toFixed(2) + " (inc. Vacancy)";
document.getElementById('resAdjRent').innerText = "$" + adjustedRent.toFixed(2);
var cfElement = document.getElementById('resCashFlow');
cfElement.innerText = "$" + monthlyCashFlow.toFixed(2);
// Style positive/negative cashflow
if (monthlyCashFlow >= 0) {
document.getElementById('rowCashFlow').style.color = "#27ae60";
} else {
document.getElementById('rowCashFlow').style.color = "#c0392b";
}
document.getElementById('resAnnualCF').innerText = "$" + annualCashFlow.toFixed(2);
document.getElementById('resCashInvested').innerText = "$" + cashInvested.toFixed(2);
document.getElementById('resCocReturn').innerText = cocReturn.toFixed(2) + "%";
// Show the result container
document.getElementById('rpcResult').style.display = 'block';
}