When investing in rental properties, determining the profitability of an asset goes beyond just looking at the monthly rent. The Cash on Cash (CoC) Return is one of the most critical metrics for real estate investors, as it measures the annual return on the actual cash invested, rather than the total purchase price.
What is the Cash on Cash Return Formula?
The formula focuses specifically on the money that leaves your pocket (liquidity) and the money that enters your pocket (cash flow). It differs from ROI because it doesn't account for equity paydown or property appreciation immediately.
Formula: Cash on Cash Return = (Annual Pre-Tax Cash Flow / Total Cash Invested) × 100%
Key Inputs Explained
Purchase Price: The agreed-upon price of the property.
Closing & Rehab Costs: Unlike a standard home purchase, investment properties often require immediate renovations (CapEx) to become rentable. These are cash outlays added to your total investment.
Monthly Cash Flow: This is calculated by taking your Gross Rental Income and subtracting ALL expenses, including the mortgage principal and interest, property taxes, insurance, HOA fees, and maintenance reserves.
What is a Good Cash on Cash Return?
While "good" is subjective and depends on the local market and interest rates, most investors target a CoC return of 8% to 12%. A return in this range typically outperforms the stock market while providing the added benefits of real estate ownership, such as tax depreciation and asset appreciation.
Use the calculator above to model different scenarios. For example, see how increasing your down payment affects your cash flow versus your percentage return. Often, putting less money down increases leverage and CoC return, even if monthly cash flow drops slightly.
function calculateROI() {
// 1. Get Inputs
var price = parseFloat(document.getElementById("purchasePrice").value);
var closingCosts = parseFloat(document.getElementById("closingCosts").value);
var repairCosts = parseFloat(document.getElementById("repairCosts").value);
var downPaymentPercent = parseFloat(document.getElementById("downPaymentPercent").value);
var interestRate = parseFloat(document.getElementById("interestRate").value);
var loanTermYears = parseFloat(document.getElementById("loanTerm").value);
var monthlyRent = parseFloat(document.getElementById("monthlyRent").value);
var otherExpenses = parseFloat(document.getElementById("otherExpenses").value);
// 2. Validation
if (isNaN(price) || isNaN(downPaymentPercent) || isNaN(interestRate) || isNaN(monthlyRent)) {
alert("Please enter valid numbers for Price, Down Payment %, Interest Rate, and Rent.");
return;
}
// Handle optional empty fields as 0
if (isNaN(closingCosts)) closingCosts = 0;
if (isNaN(repairCosts)) repairCosts = 0;
if (isNaN(otherExpenses)) otherExpenses = 0;
// 3. Calculation Logic
// A. Loan and Investment Calculations
var downPaymentAmount = price * (downPaymentPercent / 100);
var loanAmount = price – downPaymentAmount;
var totalCashInvested = downPaymentAmount + closingCosts + repairCosts;
// B. Mortgage Calculation (Principal & Interest)
// Formula: M = P [ i(1 + i)^n ] / [ (1 + i)^n – 1 ]
var monthlyRate = (interestRate / 100) / 12;
var numberOfPayments = loanTermYears * 12;
var mortgagePayment = 0;
if (monthlyRate > 0) {
mortgagePayment = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numberOfPayments)) / (Math.pow(1 + monthlyRate, numberOfPayments) – 1);
} else {
mortgagePayment = loanAmount / numberOfPayments;
}
// C. Cash Flow Calculations
var totalMonthlyExpenses = mortgagePayment + otherExpenses;
var monthlyCashFlow = monthlyRent – totalMonthlyExpenses;
var annualCashFlow = monthlyCashFlow * 12;
// D. Cash on Cash Return
var cocReturn = 0;
if (totalCashInvested > 0) {
cocReturn = (annualCashFlow / totalCashInvested) * 100;
}
// 4. Output Display
// Helper function for currency formatting
var formatCurrency = function(num) {
return "$" + num.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,');
};
document.getElementById("resTotalInvested").innerText = formatCurrency(totalCashInvested);
document.getElementById("resMortgage").innerText = formatCurrency(mortgagePayment);
document.getElementById("resTotalExpenses").innerText = formatCurrency(totalMonthlyExpenses);
// Handle negative cashflow styling
var mCashFlowEl = document.getElementById("resMonthlyCashflow");
mCashFlowEl.innerText = formatCurrency(monthlyCashFlow);
mCashFlowEl.style.color = monthlyCashFlow >= 0 ? "#2c3e50" : "#c0392b";
var aCashFlowEl = document.getElementById("resAnnualCashflow");
aCashFlowEl.innerText = formatCurrency(annualCashFlow);
aCashFlowEl.style.color = annualCashFlow >= 0 ? "#2c3e50" : "#c0392b";
var cocEl = document.getElementById("resCoC");
cocEl.innerText = cocReturn.toFixed(2) + "%";
// Color code the result based on profitability
if(cocReturn < 0) {
cocEl.style.color = "#c0392b"; // Red
} else if (cocReturn < 8) {
cocEl.style.color = "#f39c12"; // Orange/Yellow
} else {
cocEl.style.color = "#27ae60"; // Green
}
// Show results
document.getElementById("results-area").style.display = "block";
}