Cash on Cash (CoC) Return is one of the most popular metrics used by real estate investors to evaluate the performance of an income-producing property. Unlike standard ROI (Return on Investment), which might look at the total value of the asset, CoC specifically measures the annual return on the actual cash invested. This makes it an essential tool for determining how hard your specific dollars are working for you, especially when leverage (a mortgage) is involved.
How is Cash on Cash Return Calculated?
The formula for Cash on Cash Return is relatively straightforward but requires accurate inputs regarding income and expenses:
Cash on Cash Return = (Annual Pre-Tax Cash Flow / Total Cash Invested) × 100
Where:
Annual Cash Flow: This is your Net Operating Income (NOI) minus your annual debt service (mortgage payments). It represents the profit left over after all bills are paid.
Total Cash Invested: This is the total liquid capital you used to acquire the property. It includes your down payment, closing costs, and any immediate rehab or repair costs.
Example Calculation
Let's look at a realistic scenario. Suppose you buy a rental property for $200,000. You put 20% down ($40,000) and pay $5,000 in closing costs. You also spend $5,000 on paint and repairs. Your total cash invested is $50,000.
After paying the mortgage, taxes, insurance, and setting aside money for maintenance and vacancy, your monthly profit (cash flow) is $300.
Annual Cash Flow = $300 × 12 = $3,600
Total Cash Invested = $50,000
CoC Return = ($3,600 / $50,000) × 100 = 7.2%
What is a Good Cash on Cash Return?
"Good" is subjective and depends on the market and your investment strategy. However, general benchmarks suggest:
8-12%: Often considered a solid return for most residential rental markets.
Below 5%: Might be acceptable in high-appreciation markets (like San Francisco or NYC) where the primary goal is equity growth rather than cash flow.
Above 15%: Excellent returns, often found in lower-cost markets or properties requiring significant "sweat equity" (fixer-uppers).
Why Use This Calculator?
This calculator helps you factor in "hidden" costs that new investors often ignore, such as vacancy rates (months where the property sits empty) and maintenance reserves (saving for a new roof or HVAC). By including these, you get a realistic picture of your potential liquidity rather than an overly optimistic projection.
function calculateROI() {
// 1. Get Inputs
var price = parseFloat(document.getElementById('purchasePrice').value) || 0;
var downPercent = parseFloat(document.getElementById('downPayment').value) || 0;
var interestRate = parseFloat(document.getElementById('interestRate').value) || 0;
var termYears = parseFloat(document.getElementById('loanTerm').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 annualTax = parseFloat(document.getElementById('propertyTax').value) || 0;
var annualInsurance = parseFloat(document.getElementById('insurance').value) || 0;
var monthlyHOA = parseFloat(document.getElementById('hoa').value) || 0;
var vacancyPercent = parseFloat(document.getElementById('vacancyRate').value) || 0;
var maintenancePercent = parseFloat(document.getElementById('maintenanceRate').value) || 0;
// 2. Calculate Mortgage
var loanAmount = price * (1 – (downPercent / 100));
var monthlyRate = (interestRate / 100) / 12;
var numPayments = termYears * 12;
var monthlyMortgage = 0;
if (interestRate > 0) {
monthlyMortgage = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numPayments)) / (Math.pow(1 + monthlyRate, numPayments) – 1);
} else {
monthlyMortgage = loanAmount / numPayments;
}
// 3. Calculate Income & Expenses
var grossAnnualIncome = monthlyRent * 12;
var annualVacancyCost = grossAnnualIncome * (vacancyPercent / 100);
var annualMaintenanceCost = grossAnnualIncome * (maintenancePercent / 100);
var annualHOA = monthlyHOA * 12;
var totalOperatingExpenses = annualTax + annualInsurance + annualHOA + annualMaintenanceCost + annualVacancyCost;
var netOperatingIncome = grossAnnualIncome – totalOperatingExpenses;
var annualDebtService = monthlyMortgage * 12;
var annualCashFlow = netOperatingIncome – annualDebtService;
var monthlyCashFlow = annualCashFlow / 12;
// 4. Calculate Cash Invested & Returns
var downPaymentAmount = price * (downPercent / 100);
var totalCashInvested = downPaymentAmount + closingCosts + rehabCosts;
var cocReturn = 0;
if (totalCashInvested > 0) {
cocReturn = (annualCashFlow / totalCashInvested) * 100;
}
var monthlyTotalExpenses = (totalOperatingExpenses / 12) + monthlyMortgage;
// 5. Update UI
// Helper for currency formatting
var fmtMoney = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD', minimumFractionDigits: 0, maximumFractionDigits: 0 });
var fmtPct = new Intl.NumberFormat('en-US', { style: 'percent', minimumFractionDigits: 2, maximumFractionDigits: 2 });
document.getElementById('cocResult').innerHTML = cocReturn.toFixed(2) + "%";
// Color code the return
var cocElem = document.getElementById('cocResult');
if(cocReturn = 8) { cocElem.style.color = "#27ae60"; }
else { cocElem.style.color = "#f39c12"; }
document.getElementById('monthlyCashFlow').innerHTML = fmtMoney.format(monthlyCashFlow);
document.getElementById('noiResult').innerHTML = fmtMoney.format(netOperatingIncome);
document.getElementById('totalCashResult').innerHTML = fmtMoney.format(totalCashInvested);
document.getElementById('monthlyExpensesResult').innerHTML = fmtMoney.format(monthlyTotalExpenses);
document.getElementById('mortgageResult').innerHTML = fmtMoney.format(monthlyMortgage);
// Show results
document.getElementById('resultsBox').style.display = 'block';
// Scroll to results on mobile
if(window.innerWidth < 768) {
document.getElementById('resultsBox').scrollIntoView({behavior: 'smooth'});
}
}