For real estate investors, calculating the Cash on Cash (CoC) Return is one of the most effective ways to evaluate the performance of a rental property. Unlike a simple cap rate or ROI, the Cash on Cash metric focuses specifically on the money you actually invested out-of-pocket, giving you a clear picture of how hard your cash is working for you.
What is Cash on Cash Return?
Cash on Cash Return is a percentage that compares your property's annual pre-tax cash flow to the total amount of cash invested. It essentially answers the question: "For every dollar I put into this deal, how many cents do I get back this year?"
Total Cash Invested: This isn't just your down payment. It must include closing costs, renovation budgets (rehab costs), and any inspection fees.
Annual Cash Flow: This is your gross rental income minus ALL expenses, including mortgage payments (principal and interest), taxes, insurance, vacancy reserves, and maintenance.
Example Calculation
Let's say you purchase a rental property for $200,000.
You put 20% down ($40,000) and pay $5,000 in closing costs. Total Cash Invested = $45,000.
Your monthly rent is $2,000.
Your mortgage is $1,000/month, and other expenses (taxes/insurance/vacancy) are $600/month.
Monthly Cash Flow = $2,000 – $1,600 = $400.
Annual Cash Flow = $400 × 12 = $4,800.
To find the return: ($4,800 / $45,000) = 0.1066. Multiplied by 100, your Cash on Cash Return is 10.66%. This is generally considered a solid return in many real estate markets.
Why Use This Calculator?
This tool allows investors to quickly adjust variables. By modifying the interest rate, down payment percentage, or estimated vacancy rate, you can see how sensitive your return is to market changes. High cash-on-cash returns often signal positive cash flow, which is critical for long-term portfolio growth and financial freedom.
function calculateROI() {
// Get Inputs
var price = parseFloat(document.getElementById('purchasePrice').value);
var closing = parseFloat(document.getElementById('closingCosts').value);
var downPercent = parseFloat(document.getElementById('downPayment').value);
var rate = parseFloat(document.getElementById('interestRate').value);
var years = parseFloat(document.getElementById('loanTerm').value);
var rent = parseFloat(document.getElementById('monthlyRent').value);
var expenses = parseFloat(document.getElementById('monthlyExpenses').value);
var vacancy = parseFloat(document.getElementById('vacancyRate').value);
// Validation
if (isNaN(price) || isNaN(closing) || isNaN(downPercent) || isNaN(rate) ||
isNaN(years) || isNaN(rent) || isNaN(expenses) || isNaN(vacancy)) {
document.getElementById('errorDisplay').style.display = 'block';
document.getElementById('resultsArea').style.display = 'none';
return;
}
document.getElementById('errorDisplay').style.display = 'none';
// 1. Calculate Cash Invested
var downPaymentAmount = price * (downPercent / 100);
var totalCashInvested = downPaymentAmount + closing;
// 2. Calculate Mortgage Payment (Monthly)
var loanAmount = price – downPaymentAmount;
var monthlyRate = (rate / 100) / 12;
var numberOfPayments = years * 12;
var mortgagePayment = 0;
if (rate === 0) {
mortgagePayment = loanAmount / numberOfPayments;
} else {
mortgagePayment = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numberOfPayments)) / (Math.pow(1 + monthlyRate, numberOfPayments) – 1);
}
// 3. Calculate Effective Income
var vacancyLoss = rent * (vacancy / 100);
var effectiveIncome = rent – vacancyLoss;
// 4. Calculate Cash Flow
var totalMonthlyExpenses = mortgagePayment + expenses;
var monthlyCashFlow = effectiveIncome – totalMonthlyExpenses;
var annualCashFlow = monthlyCashFlow * 12;
// 5. Calculate Cash on Cash Return
var cocReturn = 0;
if (totalCashInvested > 0) {
cocReturn = (annualCashFlow / totalCashInvested) * 100;
}
// Display Results
// Helper for currency formatting
var formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
minimumFractionDigits: 0,
maximumFractionDigits: 0,
});
document.getElementById('resCashInvested').innerText = formatter.format(totalCashInvested);
document.getElementById('resMortgage').innerText = formatter.format(mortgagePayment) + "/mo";
document.getElementById('resMonthlyCash').innerText = formatter.format(monthlyCashFlow);
document.getElementById('resAnnualCash').innerText = formatter.format(annualCashFlow);
// CoC formatting
document.getElementById('resCoC').innerText = cocReturn.toFixed(2) + "%";
// Change color if negative
if (cocReturn < 0) {
document.getElementById('resCoC').style.color = '#c0392b';
} else {
document.getElementById('resCoC').style.color = '#27ae60';
}
document.getElementById('resultsArea').style.display = 'block';
}