.calc-header { text-align: center; margin-bottom: 30px; }
.calc-header h2 { color: #2c3e50; font-size: 28px; margin-bottom: 10px; }
.calc-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }
.input-group { margin-bottom: 15px; }
.input-group label { display: block; margin-bottom: 5px; font-weight: 600; color: #34495e; }
.input-group input { width: 100%; padding: 10px; border: 1px solid #ddd; border-radius: 4px; font-size: 16px; box-sizing: border-box; }
.input-group input:focus { border-color: #3498db; outline: none; }
.calc-btn { grid-column: 1 / -1; background: #27ae60; color: white; border: none; padding: 15px; font-size: 18px; font-weight: bold; border-radius: 4px; cursor: pointer; transition: background 0.3s; width: 100%; margin-top: 10px; }
.calc-btn:hover { background: #219150; }
.results-section { background: #f8f9fa; padding: 20px; border-radius: 6px; margin-top: 30px; border-left: 5px solid #27ae60; display: none; }
.result-row { display: flex; justify-content: space-between; margin-bottom: 10px; padding-bottom: 10px; border-bottom: 1px solid #e9ecef; }
.result-row:last-child { border-bottom: none; }
.result-label { font-weight: 600; color: #555; }
.result-value { font-weight: bold; color: #2c3e50; font-size: 18px; }
.highlight-result { color: #27ae60; font-size: 24px; }
.article-content { margin-top: 50px; line-height: 1.6; color: #333; }
.article-content h3 { color: #2c3e50; margin-top: 30px; }
.article-content ul { padding-left: 20px; }
.article-content li { margin-bottom: 10px; }
@media (max-width: 600px) { .calc-grid { grid-template-columns: 1fr; } }
Understanding Cash on Cash Return in Real Estate
Cash on Cash Return (CoC) is one of the most critical metrics for real estate investors. Unlike generic ROI, which might look at the total value of the asset, CoC specifically measures the annual return you earn on the actual cash you invested out-of-pocket. This makes it an essential tool for comparing the performance of a rental property against other investment vehicles like stocks or bonds.
How is Cash on Cash Return Calculated?
The formula for Cash on Cash Return is straightforward but requires accurate inputs to be effective:
CoC Return = (Annual Pre-Tax Cash Flow / Total Cash Invested) × 100
Here is a breakdown of the components:
- Annual Cash Flow: This is your gross rental income minus all operating expenses and debt service (mortgage payments).
- Total Cash Invested: This includes your down payment, closing costs, and any immediate rehab costs paid in cash.
Example Calculation
Imagine you purchase a property for $200,000.
- Down Payment (20%): $40,000
- Closing Costs: $5,000
- Total Cash Invested: $45,000
If the property generates $3,000 in net positive cash flow per year (after paying the mortgage, taxes, and insurance):
$3,000 / $45,000 = 0.0667 or 6.67% CoC Return.
Why Differentiate CoC from Cap Rate?
While this calculator provides both metrics, they serve different purposes. Cap Rate measures the property's natural profitability regardless of financing (assuming you paid all cash). Cash on Cash Return measures the efficiency of your specific capital leverage. A property with a low Cap Rate can still have a high Cash on Cash return if structured with favorable financing terms.
What is a "Good" Return?
While "good" is subjective, many professional investors target a Cash on Cash return of 8% to 12%. However, in high-appreciation markets, investors may accept lower cash flow returns (4-6%) in exchange for potential long-term equity growth.
function calculateReturns() {
// Get inputs
var price = parseFloat(document.getElementById('purchasePrice').value);
var downPct = parseFloat(document.getElementById('downPayment').value);
var rate = parseFloat(document.getElementById('interestRate').value);
var term = parseFloat(document.getElementById('loanTerm').value);
var closing = parseFloat(document.getElementById('closingCosts').value);
var rent = parseFloat(document.getElementById('monthlyRent').value);
var expenses = parseFloat(document.getElementById('monthlyExpenses').value);
// Validation to prevent NaN errors
if (isNaN(price) || isNaN(downPct) || isNaN(rate) || isNaN(term) || isNaN(rent) || isNaN(expenses)) {
// Do not clear results immediately on partial input, wait for valid numbers
return;
}
if (isNaN(closing)) closing = 0;
// Calculations
var downAmount = price * (downPct / 100);
var loanAmount = price – downAmount;
var totalInvested = downAmount + closing;
// Mortgage Calculation (P & I)
var monthlyRate = (rate / 100) / 12;
var numPayments = term * 12;
var mortgage = 0;
if (rate === 0) {
mortgage = loanAmount / numPayments;
} else {
mortgage = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numPayments)) / (Math.pow(1 + monthlyRate, numPayments) – 1);
}
// Cash Flow Stats
var totalMonthlyExpenses = mortgage + expenses;
var monthlyCashFlow = rent – totalMonthlyExpenses;
var annualCashFlow = monthlyCashFlow * 12;
// Returns
var cocReturn = 0;
if (totalInvested > 0) {
cocReturn = (annualCashFlow / totalInvested) * 100;
}
// Cap Rate: (NOI / Price) * 100. NOI = Annual Rent – Annual Operating Expenses (Excluding Mortgage)
var annualNOI = (rent * 12) – (expenses * 12);
var capRate = 0;
if (price > 0) {
capRate = (annualNOI / price) * 100;
}
// Display Results
document.getElementById('resultsSection').style.display = 'block';
// Format Currency
var formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
});
document.getElementById('resTotalInvested').innerText = formatter.format(totalInvested);
document.getElementById('resMortgage').innerText = formatter.format(mortgage);
document.getElementById('resMonthlyCashFlow').innerText = formatter.format(monthlyCashFlow);
document.getElementById('resAnnualCashFlow').innerText = formatter.format(annualCashFlow);
// Format Percentages
document.getElementById('resCoC').innerText = cocReturn.toFixed(2) + "%";
document.getElementById('resCapRate').innerText = capRate.toFixed(2) + "%";
// Color coding for cash flow
if (monthlyCashFlow >= 0) {
document.getElementById('resMonthlyCashFlow').style.color = "#27ae60";
document.getElementById('resCoC').style.color = "#27ae60";
} else {
document.getElementById('resMonthlyCashFlow').style.color = "#c0392b";
document.getElementById('resCoC').style.color = "#c0392b";
}
}