Cash on Cash Return (CoC) is one of the most important metrics in real estate investing. Unlike standard Return on Investment (ROI) which might look at the total asset value, CoC Return specifically measures the annual pre-tax cash flow generated by the property relative to the actual cash you invested.
This metric is essential for investors because it answers the question: "For every dollar I put into this deal, how much cash am I getting back this year?" It helps compare real estate investments against other vehicles like stocks, bonds, or high-yield savings accounts.
How to Calculate Cash on Cash Return
The formula for Cash on Cash Return is relatively straightforward, but gathering accurate inputs is the key to a reliable calculation.
Formula:
Cash on Cash Return = (Annual Pre-Tax Cash Flow / Total Cash Invested) × 100%
Step-by-Step Breakdown:
Determine Total Cash Invested: This includes your Down Payment, Closing Costs (inspection, title fees), and any immediate Repair or Rehab costs required to get the property rentable.
Calculate Monthly Cash Flow: Subtract all monthly expenses from your monthly rental income. Expenses must include the mortgage principal and interest, property taxes, insurance, HOA fees, property management, and allocations for vacancy and maintenance.
Annualize Cash Flow: Multiply your monthly cash flow by 12.
Divide and Convert: Divide the Annual Cash Flow by the Total Cash Invested and multiply by 100 to get your percentage.
Example Calculation
Let's look at a realistic scenario for a single-family rental property to understand how the numbers work:
Purchase Price: $200,000
Down Payment (20%): $40,000
Closing & Rehab Costs: $5,000
Total Cash Invested: $45,000
Now, let's look at the operational cash flow:
Monthly Rent: $1,800
Mortgage Payment: ~$1,000
Operating Expenses (Tax, Ins, Maint): $500
Monthly Cash Flow: $1,800 – $1,500 = $300
Annual Cash Flow: $300 × 12 = $3,600
Result: ($3,600 / $45,000) = 0.08, or an 8% Cash on Cash Return.
What is a "Good" Cash on Cash Return?
The definition of a "good" return varies by investor and market strategy, but general guidelines exist:
8% – 12%: Often considered a solid benchmark for residential rental properties in stable markets. This beats the average inflation-adjusted return of the stock market while providing the added benefits of equity paydown and tax depreciation.
Below 5%: Unless the property is in a high-appreciation market (like San Francisco or NYC), a return this low might signal negative cash flow risk if expenses rise unexpectedly.
Above 15%: These returns are typically found in lower-cost, higher-risk neighborhoods or through creative financing strategies (like BRRRR). While lucrative, they often require more active management.
Factors That Affect Your CoC ROI
Several variables can drastically change your return. Being aware of these can help you optimize your investment:
Interest Rates: A higher interest rate increases your monthly mortgage payment, directly reducing your monthly cash flow. Even a 1% difference can turn a positive cash flow property into a negative one.
Vacancy Rates: If you do not account for vacancy (typically 5-8% of gross rent), your projected returns will be artificially high. Always assume the property will sit empty for a few weeks every year or two.
Maintenance & CapEx: Many new investors ignore Capital Expenditures (CapEx) like replacing a roof or HVAC. Failing to set aside reserves for these large items will distort your true Cash on Cash Return.
function calculateCoC() {
// 1. Get input values
var propPrice = parseFloat(document.getElementById('propPrice').value);
var downPayment = parseFloat(document.getElementById('downPayment').value);
var closingCosts = parseFloat(document.getElementById('closingCosts').value);
var rehabCosts = parseFloat(document.getElementById('rehabCosts').value);
var intRate = parseFloat(document.getElementById('intRate').value);
var loanTerm = parseFloat(document.getElementById('loanTerm').value);
var monthlyRent = parseFloat(document.getElementById('monthlyRent').value);
var monthlyOps = parseFloat(document.getElementById('monthlyOps').value);
// 2. Element handles for results
var resultsBox = document.getElementById('resultsBox');
var errorDisplay = document.getElementById('errorDisplay');
// 3. Validation
if (isNaN(propPrice) || isNaN(downPayment) || isNaN(closingCosts) ||
isNaN(rehabCosts) || isNaN(intRate) || isNaN(loanTerm) ||
isNaN(monthlyRent) || isNaN(monthlyOps)) {
errorDisplay.style.display = 'block';
resultsBox.style.display = 'none';
return;
}
// Hide error if previously shown
errorDisplay.style.display = 'none';
// 4. Calculations
// A. Total Cash Invested
var totalInvested = downPayment + closingCosts + rehabCosts;
// B. Mortgage Calculation
var loanAmount = propPrice – downPayment;
var monthlyRate = (intRate / 100) / 12;
var numberOfPayments = loanTerm * 12;
var monthlyMortgage = 0;
if (loanAmount > 0 && monthlyRate > 0) {
monthlyMortgage = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numberOfPayments)) / (Math.pow(1 + monthlyRate, numberOfPayments) – 1);
} else if (loanAmount > 0 && monthlyRate === 0) {
monthlyMortgage = loanAmount / numberOfPayments;
}
// C. Cash Flow
var totalMonthlyExpenses = monthlyMortgage + monthlyOps;
var monthlyCashFlow = monthlyRent – totalMonthlyExpenses;
var annualCashFlow = monthlyCashFlow * 12;
// D. Cash on Cash Return
var cocReturn = 0;
if (totalInvested > 0) {
cocReturn = (annualCashFlow / totalInvested) * 100;
}
// 5. Formatting Helper
function formatMoney(num) {
return '$' + num.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
}
// 6. Update DOM
document.getElementById('resTotalInvested').innerHTML = formatMoney(totalInvested);
document.getElementById('resMortgage').innerHTML = formatMoney(monthlyMortgage);
document.getElementById('resTotalExpenses').innerHTML = formatMoney(totalMonthlyExpenses);
var cfElem = document.getElementById('resMonthlyCashflow');
cfElem.innerHTML = formatMoney(monthlyCashFlow);
cfElem.style.color = monthlyCashFlow >= 0 ? '#2c7a7b' : '#e53e3e';
var annualCfElem = document.getElementById('resAnnualCashflow');
annualCfElem.innerHTML = formatMoney(annualCashFlow);
annualCfElem.style.color = annualCashFlow >= 0 ? '#2c7a7b' : '#e53e3e';
var cocElem = document.getElementById('resCoC');
cocElem.innerHTML = cocReturn.toFixed(2) + '%';
cocElem.style.color = cocReturn >= 0 ? '#2c7a7b' : '#e53e3e';
// Show results
resultsBox.style.display = 'block';
}