Investing in real estate is a powerful way to build wealth, but not all properties are good investments. The Cash on Cash (CoC) Return is one of the most critical metrics for real estate investors. Unlike generic ROI, CoC specifically measures the annual return on the actual cash you invested, rather than the total purchase price of the property.
Why Cash on Cash Return Matters?
When you use leverage (a mortgage) to buy a property, calculating return based on the full price doesn't show you how hard your specific dollars are working. CoC Return tells you exactly what percentage of your initial cash investment you are earning back in net cash flow each year.
Formula: Annual Pre-Tax Cash Flow / Total Cash Invested
Key Terms in This Calculator
NOI (Net Operating Income): Total revenue from the property minus all necessary operating expenses. It excludes mortgage payments.
Cap Rate: Measures the natural rate of return of the property assuming it was bought with cash. Calculated as NOI / Purchase Price.
Cash Flow: The money left over after all expenses, including the mortgage, have been paid.
Total Cash Invested: This includes your down payment, closing costs, and any immediate repair/rehab costs.
What is a "Good" Return?
While targets vary by investor and market, many seasoned real estate investors aim for a Cash on Cash return of 8% to 12%. In highly appreciative markets, investors might accept lower cash flow yields (4-6%) in exchange for future equity growth.
function calculateRentalROI() {
// 1. Get Input Values
var purchasePrice = parseFloat(document.getElementById('purchasePrice').value) || 0;
var downPaymentPercent = parseFloat(document.getElementById('downPayment').value) || 0;
var closingCosts = parseFloat(document.getElementById('closingCosts').value) || 0;
var rehabCosts = parseFloat(document.getElementById('rehabCosts').value) || 0;
var interestRate = parseFloat(document.getElementById('interestRate').value) || 0;
var loanTerm = parseFloat(document.getElementById('loanTerm').value) || 0;
var monthlyRent = parseFloat(document.getElementById('monthlyRent').value) || 0;
var vacancyRate = parseFloat(document.getElementById('vacancyRate').value) || 0;
var propertyTax = parseFloat(document.getElementById('propertyTax').value) || 0;
var insurance = parseFloat(document.getElementById('insurance').value) || 0;
var maintenance = parseFloat(document.getElementById('maintenance').value) || 0;
var hoaFees = parseFloat(document.getElementById('hoaFees').value) || 0;
var managementFee = parseFloat(document.getElementById('managementFee').value) || 0;
// 2. Calculate Mortgage Details
var downPaymentAmount = purchasePrice * (downPaymentPercent / 100);
var loanAmount = purchasePrice – downPaymentAmount;
var monthlyInterestRate = (interestRate / 100) / 12;
var numberOfPayments = loanTerm * 12;
var monthlyMortgage = 0;
if (loanAmount > 0 && interestRate > 0) {
monthlyMortgage = loanAmount * (monthlyInterestRate * Math.pow(1 + monthlyInterestRate, numberOfPayments)) / (Math.pow(1 + monthlyInterestRate, numberOfPayments) – 1);
} else if (loanAmount > 0 && interestRate === 0) {
monthlyMortgage = loanAmount / numberOfPayments;
}
// 3. Calculate Expenses
var monthlyVacancyCost = monthlyRent * (vacancyRate / 100);
var totalOperatingExpenses = propertyTax + insurance + maintenance + hoaFees + managementFee + monthlyVacancyCost;
// 4. Calculate Net Operating Income (NOI)
var monthlyNOI = monthlyRent – totalOperatingExpenses;
var annualNOI = monthlyNOI * 12;
// 5. Calculate Cash Flow
var monthlyCashFlow = monthlyNOI – monthlyMortgage;
var annualCashFlow = monthlyCashFlow * 12;
// 6. Calculate Total Cash Invested
var totalCashInvested = downPaymentAmount + closingCosts + rehabCosts;
// 7. Calculate Metrics
var cocReturn = 0;
if (totalCashInvested > 0) {
cocReturn = (annualCashFlow / totalCashInvested) * 100;
}
var capRate = 0;
if (purchasePrice > 0) {
capRate = (annualNOI / purchasePrice) * 100; // Cap Rate uses Purchase Price, not invested cash
}
// 8. Update UI
document.getElementById('cocResult').innerText = cocReturn.toFixed(2) + '%';
// Determine color for Cash Flow (Green for positive, Red for negative)
var cashFlowElement = document.getElementById('cashFlowResult');
cashFlowElement.innerText = '$' + monthlyCashFlow.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
cashFlowElement.style.color = monthlyCashFlow >= 0 ? '#27ae60' : '#c0392b';
document.getElementById('noiResult').innerText = '$' + monthlyNOI.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('capRateResult').innerText = capRate.toFixed(2) + '%';
document.getElementById('mortgageResult').innerText = '$' + monthlyMortgage.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('investedResult').innerText = '$' + totalCashInvested.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
// Show results
document.getElementById('results').style.display = 'block';
}