Cash on Cash (CoC) Return is one of the most popular metrics used by real estate investors to evaluate the performance of a rental property. Unlike a standard Return on Investment (ROI) calculation which might look at total potential equity, CoC Return focuses strictly on the cash flow generated relative to the actual cash you put into the deal.
This metric is essential because it tells you exactly how hard your money is working. If you put $50,000 into a savings account, you might get a 4% return. If you put that same $50,000 into a rental property (as a down payment and closing costs), the Cash on Cash Return tells you the percentage yield you are earning on that specific capital.
The Cash on Cash Return Formula
The calculation is relatively straightforward but requires accuracy regarding your expenses. The formula is:
Cash on Cash Return = (Annual Pre-Tax Cash Flow / Total Cash Invested) × 100
Key Components:
Annual Pre-Tax Cash Flow: This is your Gross Annual Rent minus all Operating Expenses (taxes, insurance, maintenance, management fees) and minus your Annual Debt Service (mortgage payments).
Total Cash Invested: This is the sum of your Down Payment, Closing Costs, and any immediate Repair/Rehab costs required to get the property rented.
Example Scenario
Let's say you buy a property for $200,000.
Down Payment: $40,000 (20%)
Closing/Repairs: $10,000
Total Cash Invested: $50,000
Now let's look at the cash flow:
Annual Rental Income: $24,000 ($2,000/month)
Annual Expenses (Taxes/Ins/Maint): -$8,000
Annual Mortgage Payments: -$11,000
Net Annual Cash Flow: $5,000
Calculation: ($5,000 / $50,000) = 0.10, or 10% Cash on Cash Return.
What is a "Good" Return?
While answers vary depending on the market and the investor's strategy, a Cash on Cash return between 8% and 12% is generally considered strong for long-term buy-and-hold investments. In highly competitive markets, investors might accept 5-7% anticipating appreciation, while in riskier markets, investors might demand 15% or higher.
function calculateCoC() {
// 1. Get DOM elements
var purchasePriceInput = document.getElementById('purchasePrice');
var downPaymentInput = document.getElementById('downPayment');
var closingCostsInput = document.getElementById('closingCosts');
var interestRateInput = document.getElementById('interestRate');
var loanTermInput = document.getElementById('loanTerm');
var monthlyRentInput = document.getElementById('monthlyRent');
var monthlyExpensesInput = document.getElementById('monthlyExpenses');
var resultSection = document.getElementById('resultSection');
var errorDisplay = document.getElementById('errorDisplay');
// 2. Parse values
var price = parseFloat(purchasePriceInput.value);
var downPayment = parseFloat(downPaymentInput.value);
var closing = parseFloat(closingCostsInput.value);
var rate = parseFloat(interestRateInput.value);
var term = parseFloat(loanTermInput.value);
var rent = parseFloat(monthlyRentInput.value);
var ops = parseFloat(monthlyExpensesInput.value);
// 3. Validation
if (isNaN(price) || isNaN(downPayment) || isNaN(closing) || isNaN(rate) || isNaN(term) || isNaN(rent) || isNaN(ops)) {
errorDisplay.style.display = 'block';
resultSection.style.display = 'none';
return;
}
errorDisplay.style.display = 'none';
// 4. Logic Calculation
// Loan Amount
var loanAmount = price – downPayment;
// Mortgage Payment Calculation (Principal + Interest)
// M = P [ i(1 + i)^n ] / [ (1 + i)^n – 1 ]
var monthlyRate = (rate / 100) / 12;
var totalMonths = term * 12;
var mortgagePayment = 0;
if (rate === 0) {
mortgagePayment = loanAmount / totalMonths;
} else {
mortgagePayment = loanAmount * ( (monthlyRate * Math.pow(1 + monthlyRate, totalMonths)) / (Math.pow(1 + monthlyRate, totalMonths) – 1) );
}
// Annual Aggregation
var annualIncome = rent * 12;
var annualOpExpenses = ops * 12;
var annualDebtService = mortgagePayment * 12;
var annualCashFlow = annualIncome – annualOpExpenses – annualDebtService;
var totalInvested = downPayment + closing;
// CoC Calculation
var cocReturn = 0;
if (totalInvested > 0) {
cocReturn = (annualCashFlow / totalInvested) * 100;
}
// 5. Formatting and Display
// Formatter for Currency
var currencyFormat = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
minimumFractionDigits: 0,
maximumFractionDigits: 0,
});
// Formatter for Percent
var percentFormat = new Intl.NumberFormat('en-US', {
style: 'decimal',
minimumFractionDigits: 2,
maximumFractionDigits: 2,
});
document.getElementById('resTotalInvested').innerText = currencyFormat.format(totalInvested);
document.getElementById('resMortgage').innerText = currencyFormat.format(mortgagePayment) + " / mo";
var cashFlowEl = document.getElementById('resCashFlow');
cashFlowEl.innerText = currencyFormat.format(annualCashFlow);
if (annualCashFlow < 0) {
cashFlowEl.style.color = '#c0392b';
} else {
cashFlowEl.style.color = '#27ae60'; // Reset to green/dark
}
var cocEl = document.getElementById('resCoC');
cocEl.innerText = percentFormat.format(cocReturn) + "%";
if (cocReturn < 0) {
cocEl.style.color = '#c0392b';
} else {
cocEl.style.color = '#27ae60';
}
resultSection.style.display = 'block';
}