When investing in rental properties, understanding your true return on investment (ROI) is crucial. The Cash-on-Cash (CoC) Return is widely considered the most important metric for buy-and-hold real estate investors. Unlike Cap Rate, which looks at the property's performance regardless of debt, Cash-on-Cash return measures how hard your specific invested dollars are working for you.
Essentially, it answers the question: "For every dollar I paid out of pocket to acquire this property, how much cash am I getting back this year?"
How the Formula Works
The formula for Cash-on-Cash Return is relatively straightforward but requires accurate inputs to be meaningful:
Annual Pre-Tax Cash Flow: This is your gross rental income minus all operating expenses (taxes, insurance, maintenance, vacancy, HOA) and minus your debt service (mortgage payments).
Total Cash Invested: This is the total liquid cash you needed to close the deal. It includes the down payment, closing costs, and any immediate repair or rehab costs.
Real-World Example
Let's look at a realistic scenario to illustrate how this calculator works:
Imagine you are buying a single-family home for $300,000.
Down Payment: 20% ($60,000)
Closing & Rehab Costs: $10,000
Total Cash Invested: $70,000
Now, let's look at the income:
Rental Income: $2,500/month
Mortgage Payment: $1,500/month
Operating Expenses: $600/month
Monthly Cash Flow: $400 ($4,800/year)
In this scenario, your Cash-on-Cash Return would be ($4,800 / $70,000) = 6.85%. This means you are earning a 6.85% yield on your cash, plus benefiting from mortgage paydown and property appreciation.
What is a "Good" Cash-on-Cash Return?
Target returns vary by market and investor strategy. Generally:
8-12%: Often considered a solid benchmark for residential rentals in stable markets.
15%+: Considered excellent, typically found in higher-risk neighborhoods or through value-add strategies (renovating distressed properties).
Below 5%: Might be acceptable in rapidly appreciating markets (like coastal cities) where investors rely more on equity growth than immediate cash flow.
Use the calculator above to adjust your offer price or down payment to see how different deal structures affect your bottom line.
function calculateRentalROI() {
// 1. Get Input Values
var price = parseFloat(document.getElementById('purchasePrice').value);
var downPercent = parseFloat(document.getElementById('downPayment').value);
var closing = parseFloat(document.getElementById('closingCosts').value);
var rehab = parseFloat(document.getElementById('rehabCosts').value);
var rate = parseFloat(document.getElementById('interestRate').value);
var years = parseFloat(document.getElementById('loanTerm').value);
var rent = parseFloat(document.getElementById('monthlyRent').value);
var opsExpenses = parseFloat(document.getElementById('monthlyExpenses').value);
// 2. Validations
if (isNaN(price) || isNaN(downPercent) || isNaN(rate) || isNaN(years) || isNaN(rent) || isNaN(opsExpenses)) {
alert("Please fill in all required fields with valid numbers.");
return;
}
// Handle optional fields becoming NaN if empty
if (isNaN(closing)) closing = 0;
if (isNaN(rehab)) rehab = 0;
// 3. Calculate Initial Investment (Denominator)
var downAmount = price * (downPercent / 100);
var loanAmount = price – downAmount;
var totalCashInvested = downAmount + closing + rehab;
// 4. Calculate Mortgage Payment (Monthly)
// Formula: M = P [ i(1 + i)^n ] / [ (1 + i)^n – 1 ]
var monthlyRate = (rate / 100) / 12;
var numberOfPayments = years * 12;
var monthlyMortgage = 0;
if (rate === 0) {
monthlyMortgage = loanAmount / numberOfPayments;
} else {
monthlyMortgage = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numberOfPayments)) / (Math.pow(1 + monthlyRate, numberOfPayments) – 1);
}
// 5. Calculate Cash Flow (Numerator)
var totalMonthlyExpenses = monthlyMortgage + opsExpenses;
var monthlyCashFlow = rent – totalMonthlyExpenses;
var annualCashFlow = monthlyCashFlow * 12;
// 6. Calculate CoC ROI
var cocRoi = 0;
if (totalCashInvested > 0) {
cocRoi = (annualCashFlow / totalCashInvested) * 100;
}
// 7. Display Results
var resultsDiv = document.getElementById('resultsArea');
resultsDiv.style.display = 'block';
// Helper for currency formatting
var currencyFormatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
});
document.getElementById('cocResult').innerHTML = cocRoi.toFixed(2) + "%";
document.getElementById('cashFlowResult').innerHTML = currencyFormatter.format(monthlyCashFlow);
document.getElementById('cashNeededResult').innerHTML = currencyFormatter.format(totalCashInvested);
document.getElementById('mortgageResult').innerHTML = currencyFormatter.format(monthlyMortgage);
// Style negative numbers red
var cashFlowElem = document.getElementById('cashFlowResult');
if (monthlyCashFlow < 0) {
cashFlowElem.classList.add('negative');
} else {
cashFlowElem.classList.remove('negative');
}
var cocElem = document.getElementById('cocResult');
if (cocRoi < 0) {
cocElem.classList.add('negative');
} else {
cocElem.classList.remove('negative');
}
}