In the world of real estate investing, the Cash on Cash Return (CoC) is one of the most critical metrics for evaluating the performance of a rental property. Unlike simple ROI (Return on Investment), which might look at the total value of the asset, CoC specifically measures the annual return the investor made on the property in relation to the amount of mortgage paid during the same year. It effectively tells you how hard your actual cash dollars are working for you.
How the Formula Works
The Cash on Cash Return formula is relatively straightforward but requires accurate inputs regarding your income and expenses. The basic formula is:
Annual Cash Flow: This is your Gross Rental Income minus all operating expenses and debt service (mortgage payments). Operating expenses include property taxes, insurance, maintenance, property management fees, and vacancy reserves.
Total Cash Invested: This represents the actual cash you put into the deal to acquire it. It includes your Down Payment, Closing Costs, and any immediate Rehab or Repair costs. It does not include the loan amount.
Why Use a Cash on Cash Return Calculator?
Using a specialized calculator allows investors to quickly analyze "deal" vs. "no deal" scenarios. A property might have positive cash flow, but if you have to invest a massive amount of capital to get a small monthly return, your percentage return might be lower than what you could get in the stock market or a high-yield savings account.
Example Scenario
Imagine you buy a property for $200,000. You put $40,000 down and pay $5,000 in closing costs (Total Invested: $45,000). After paying the mortgage and all expenses, the property generates $300 per month in pure profit (cash flow).
Annual Cash Flow = $300 × 12 = $3,600
Total Invested = $45,000
CoC Return = ($3,600 / $45,000) = 0.08 or 8%
What is a Good Cash on Cash Return?
While "good" is subjective and varies by market condition and investor goals, many real estate investors target a Cash on Cash return between 8% and 12%. Returns above 15% are generally considered excellent but may come with higher risks or require more active management (such as short-term rentals or properties in developing neighborhoods).
function calculateRentalCoC() {
// 1. Get Inputs by ID
var price = parseFloat(document.getElementById('purchasePrice').value);
var downPayment = parseFloat(document.getElementById('downPayment').value);
var closingCosts = parseFloat(document.getElementById('closingCosts').value);
var interestRate = parseFloat(document.getElementById('interestRate').value);
var loanTerm = parseFloat(document.getElementById('loanTerm').value);
var monthlyRent = parseFloat(document.getElementById('monthlyRent').value);
var annualTaxes = parseFloat(document.getElementById('annualTaxes').value);
var annualInsurance = parseFloat(document.getElementById('annualInsurance').value);
var monthlyMaintenance = parseFloat(document.getElementById('monthlyMaintenance').value);
// 2. Validate Inputs
if (isNaN(price) || isNaN(downPayment) || isNaN(interestRate) || isNaN(loanTerm) || isNaN(monthlyRent)) {
alert("Please enter valid numbers for all fields.");
return;
}
// 3. Calculate Loan Details
var loanAmount = price – downPayment;
var monthlyRate = (interestRate / 100) / 12;
var numberOfPayments = loanTerm * 12;
// Mortgage Calculation (Principal + Interest)
// M = P [ i(1 + i)^n ] / [ (1 + i)^n – 1 ]
var monthlyMortgage = 0;
if (loanAmount > 0) {
if (interestRate === 0) {
monthlyMortgage = loanAmount / numberOfPayments;
} else {
monthlyMortgage = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numberOfPayments)) / (Math.pow(1 + monthlyRate, numberOfPayments) – 1);
}
}
// 4. Calculate Expenses
var monthlyTaxes = annualTaxes / 12;
var monthlyInsurance = annualInsurance / 12;
var totalMonthlyExpenses = monthlyMortgage + monthlyTaxes + monthlyInsurance + monthlyMaintenance;
// 5. Calculate Cash Flow
var monthlyCashFlow = monthlyRent – totalMonthlyExpenses;
var annualCashFlow = monthlyCashFlow * 12;
// 6. Calculate Total Cash Invested (Denominator)
var totalInvested = downPayment + closingCosts;
// 7. Calculate Cash on Cash Return
var cocReturn = 0;
if (totalInvested > 0) {
cocReturn = (annualCashFlow / totalInvested) * 100;
}
// 8. Update Result UI
document.getElementById('displayTotalInvested').innerHTML = "$" + totalInvested.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('displayMortgage').innerHTML = "$" + monthlyMortgage.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('displayTotalExpenses').innerHTML = "$" + totalMonthlyExpenses.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
var flowEl = document.getElementById('displayMonthlyCashFlow');
flowEl.innerHTML = "$" + monthlyCashFlow.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
flowEl.style.color = monthlyCashFlow >= 0 ? "#2c7a7b" : "#e53e3e";
var annualEl = document.getElementById('displayAnnualCashFlow');
annualEl.innerHTML = "$" + annualCashFlow.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
annualEl.style.color = annualCashFlow >= 0 ? "#333" : "#e53e3e";
var cocEl = document.getElementById('displayCoC');
cocEl.innerHTML = cocReturn.toFixed(2) + "%";
cocEl.style.color = cocReturn >= 0 ? "#2c7a7b" : "#e53e3e";
// Show results section
document.getElementById('resultsSection').style.display = "block";
}