When investing in rental properties, simply looking at the monthly profit doesn't tell the whole story. The Cash on Cash Return (CoC) is one of the most critical metrics for real estate investors because it calculates the cash income earned on the cash invested in a property. Unlike the Cap Rate, which looks at the property's performance regardless of debt, the Cash on Cash return specifically measures the efficiency of your invested capital (down payment, closing costs, and rehab costs).
How is Cash on Cash Return Calculated?
The formula used in this calculator is:
Cash on Cash Return = (Annual Pre-Tax Cash Flow / Total Cash Invested) × 100
Annual Pre-Tax Cash Flow: This is your gross rental income minus all operating expenses (taxes, insurance, HOA, maintenance) and debt service (mortgage payments).
Total Cash Invested: This is the actual liquidity you used to acquire the property. It includes your down payment, closing costs, and any immediate repair or renovation costs.
What is a Good Cash on Cash Return?
While "good" is subjective and depends on the market and your investment strategy, many real estate investors aim for a Cash on Cash return between 8% and 12%.
8-12%: Generally considered a solid return that outperforms typical stock market averages while building equity.
Below 5%: Might be acceptable in high-appreciation markets where cash flow is secondary to property value growth.
Above 15%: Often found in lower-cost areas or properties requiring significant "sweat equity" and management intensity.
Why Mortgage Terms Matter
As demonstrated by the calculator above, your interest rate and loan term significantly impact your bottom line. A higher interest rate increases your monthly P&I (Principal and Interest) payment, which directly reduces your monthly cash flow. If the cash flow drops too low, your Cash on Cash return will suffer, even if you put a large down payment on the property. Always stress-test your investment with slightly higher vacancy rates or expenses to ensure you remain cash-flow positive.
function calculateRentalROI() {
// Get Input Values
var price = parseFloat(document.getElementById('purchasePrice').value);
var downPerc = parseFloat(document.getElementById('downPaymentPerc').value);
var closing = parseFloat(document.getElementById('closingCosts').value);
var rehab = parseFloat(document.getElementById('rehabCosts').value);
var rate = parseFloat(document.getElementById('interestRate').value);
var term = parseFloat(document.getElementById('loanTerm').value);
var rent = parseFloat(document.getElementById('monthlyRent').value);
var expenses = parseFloat(document.getElementById('monthlyExpenses').value);
// Validation to prevent NaN errors
if (isNaN(price) || isNaN(downPerc) || isNaN(rate) || isNaN(term) || isNaN(rent) || isNaN(expenses)) {
alert("Please enter valid numbers in all fields.");
return;
}
// 1. Calculate Initial Cash Investment
var downPaymentAmt = price * (downPerc / 100);
var totalInvested = downPaymentAmt + closing + rehab;
// 2. Calculate Mortgage Payment
var loanAmount = price – downPaymentAmt;
var monthlyRate = (rate / 100) / 12;
var numPayments = term * 12;
// Standard Mortgage Formula: M = P [ i(1 + i)^n ] / [ (1 + i)^n – 1 ]
var mortgagePayment = 0;
if (rate > 0) {
mortgagePayment = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numPayments)) / (Math.pow(1 + monthlyRate, numPayments) – 1);
} else {
mortgagePayment = loanAmount / numPayments;
}
// 3. Calculate Cash Flow
var totalMonthlyOutflow = mortgagePayment + expenses;
var monthlyCashFlow = rent – totalMonthlyOutflow;
var annualCashFlow = monthlyCashFlow * 12;
// 4. Calculate CoC Return
var cocReturn = 0;
if (totalInvested > 0) {
cocReturn = (annualCashFlow / totalInvested) * 100;
}
// 5. Update UI
document.getElementById('resTotalInvested').innerText = "$" + totalInvested.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resMortgage').innerText = "$" + mortgagePayment.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
var monthlyFlowEl = document.getElementById('resMonthlyCashFlow');
monthlyFlowEl.innerText = "$" + monthlyCashFlow.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
monthlyFlowEl.style.color = monthlyCashFlow >= 0 ? "#2c3e50" : "#d63638";
var annualFlowEl = document.getElementById('resAnnualCashFlow');
annualFlowEl.innerText = "$" + annualCashFlow.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
annualFlowEl.style.color = annualCashFlow >= 0 ? "#2c3e50" : "#d63638";
var cocEl = document.getElementById('resCoC');
cocEl.innerText = cocReturn.toFixed(2) + "%";
cocEl.style.color = cocReturn >= 0 ? "#0073aa" : "#d63638";
// Show results container
document.getElementById('calcResults').style.display = "block";
}