In the world of real estate investing, not all metrics are created equal. While Cap Rate measures the raw potential of a property without financing, Cash on Cash Return (CoC ROI) is widely considered the most important metric for investors using leverage (mortgages). It answers the fundamental question: "For every dollar I pull out of my pocket, how much actual cash am I getting back this year?"
The Formula:
Cash on Cash Return = (Annual Pre-Tax Cash Flow / Total Cash Invested) × 100
How to Use This Calculator
Our specific Rental Property Calculator helps you break down the deal into three crucial components:
Initial Investment: This isn't just the down payment. It includes closing costs and immediate rehab/repair costs. If you forget these, your ROI calculation will be artificially high.
Income Stream: Beyond just rent, consider laundry income, parking fees, or pet fees.
Operating Expenses: The "silent killers" of cash flow. Always account for vacancy (typically 5-8% of rent), maintenance reserves (5-10%), property management, taxes, and insurance.
What is a Good Cash on Cash Return?
There is no universal "good" number, as it depends on your risk tolerance and the local market. However, general benchmarks include:
8-12%: Often considered a solid return for residential rentals in stable markets.
15%+: Excellent returns, often found in riskier neighborhoods or properties requiring significant work (BRRRR strategy).
Under 5%: Generally considered poor for cash flow investing, though investors might accept this if they are banking on significant property appreciation.
Cash Flow vs. Appreciation
This calculator focuses strictly on cash flow. It does not account for mortgage principal paydown or property value appreciation. While appreciation builds wealth over the long term, positive cash flow is what keeps your business solvent month-to-month. A property with negative cash flow is a liability, regardless of how much it might appreciate in ten years.
function calculateROI() {
// 1. Get Input Values
var downPayment = parseFloat(document.getElementById("downPayment").value) || 0;
var closingCosts = parseFloat(document.getElementById("closingCosts").value) || 0;
var rehabCosts = parseFloat(document.getElementById("rehabCosts").value) || 0;
var monthlyRent = parseFloat(document.getElementById("monthlyRent").value) || 0;
var otherIncome = parseFloat(document.getElementById("otherIncome").value) || 0;
var mortgagePayment = parseFloat(document.getElementById("mortgagePayment").value) || 0;
var propertyTax = parseFloat(document.getElementById("propertyTax").value) || 0;
var insurance = parseFloat(document.getElementById("insurance").value) || 0;
var managementFee = parseFloat(document.getElementById("managementFee").value) || 0;
var maintenance = parseFloat(document.getElementById("maintenance").value) || 0;
var vacancy = parseFloat(document.getElementById("vacancy").value) || 0;
// 2. Calculate Totals
// Total Cash Invested
var totalInvested = downPayment + closingCosts + rehabCosts;
// Total Monthly Income
var totalMonthlyIncome = monthlyRent + otherIncome;
// Total Monthly Expenses
var totalMonthlyExpenses = mortgagePayment + propertyTax + insurance + managementFee + maintenance + vacancy;
// Monthly Cash Flow
var monthlyCashFlow = totalMonthlyIncome – totalMonthlyExpenses;
// Annual Cash Flow
var annualCashFlow = monthlyCashFlow * 12;
// 3. Calculate ROI (Cash on Cash Return)
var roi = 0;
if (totalInvested > 0) {
roi = (annualCashFlow / totalInvested) * 100;
}
// 4. Update Display with currency formatting
var formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
minimumFractionDigits: 2
});
document.getElementById("displayTotalInvested").innerText = formatter.format(totalInvested);
document.getElementById("displayTotalIncome").innerText = formatter.format(totalMonthlyIncome);
document.getElementById("displayTotalExpenses").innerText = formatter.format(totalMonthlyExpenses);
var cfElement = document.getElementById("displayMonthlyCashFlow");
cfElement.innerText = formatter.format(monthlyCashFlow);
// Color coding for positive/negative cash flow
if(monthlyCashFlow < 0) {
cfElement.style.color = "#c0392b";
} else {
cfElement.style.color = "#27ae60";
}
document.getElementById("displayAnnualCashFlow").innerText = formatter.format(annualCashFlow);
var roiElement = document.getElementById("displayROI");
roiElement.innerText = roi.toFixed(2) + "%";
if(roi < 0) {
roiElement.style.color = "#c0392b";
} else {
roiElement.style.color = "#27ae60";
}
// Show results
document.getElementById("resultsContainer").style.display = "block";
}