Analyze your real estate investment potential accurately.
Purchase Information
Loan Details
30 Years
15 Years
10 Years
Income & Expenses
Total Cash Invested:$0
Monthly Mortgage Payment:$0
Monthly Cash Flow:$0
Annual Cash Flow:$0
Cash-on-Cash Return:0.00%
Understanding Cash-on-Cash Return in Real Estate
Cash-on-Cash (CoC) return is one of the most important metrics for real estate investors. Unlike Cap Rate, which looks at the property's performance regardless of how it was bought, CoC return measures the annual return on the actual cash you invested. It is essential for understanding the velocity of your money and comparing real estate performance against other investment vehicles like stocks or bonds.
How the Calculator Works
This calculator determines your ROI by breaking down the investment into three core components:
Total Cash Invested: This is the sum of your down payment, closing costs, and immediate rehab or repair costs. This is your "skin in the game."
Annual Cash Flow: This is your Net Operating Income (NOI) minus your debt service (mortgage payments). It calculates income from rent and deducts expenses like taxes, insurance, HOA fees, vacancy reserves, and loan payments.
The Formula:Annual Pre-Tax Cash Flow / Total Cash Invested = Cash-on-Cash Return
What is a Good Cash-on-Cash Return?
While "good" is subjective, most seasoned investors target a CoC return between 8% and 12%.
8-12%: Generally considered a solid, safe return in many markets.
15%+: Excellent return, often found in lower-cost markets or properties requiring significant value-add (BRRRR strategy).
Below 5%: Might be acceptable in high-appreciation markets (like coastal cities) where investors bank on long-term equity growth rather than immediate cash flow.
Tips to Improve Your ROI
If your calculation shows a low return, consider these levers:
1. Decrease Expenses: Shop for cheaper insurance or self-manage the property.
2. Increase Rent: Small cosmetic updates can often justify higher monthly rent.
3. Refinance: Lowering your interest rate reduces your largest monthly expense.
function calculateROI() {
// 1. Get Input Values
var price = parseFloat(document.getElementById('propPrice').value) || 0;
var down = parseFloat(document.getElementById('downPayment').value) || 0;
var closing = parseFloat(document.getElementById('closingCosts').value) || 0;
var rehab = parseFloat(document.getElementById('rehabCosts').value) || 0;
var rate = parseFloat(document.getElementById('interestRate').value) || 0;
var termYears = parseFloat(document.getElementById('loanTerm').value) || 30;
var monthlyRent = parseFloat(document.getElementById('monthlyRent').value) || 0;
var otherIncome = parseFloat(document.getElementById('otherIncome').value) || 0;
var monthlyExp = parseFloat(document.getElementById('monthlyExpenses').value) || 0;
var vacancyRate = parseFloat(document.getElementById('vacancyRate').value) || 0;
// 2. Calculate Initial Cash Invested
var totalCashInvested = down + closing + rehab;
// 3. Calculate Mortgage Payment
var loanAmount = price – down;
var monthlyMortgage = 0;
if (loanAmount > 0 && rate > 0) {
var monthlyRate = (rate / 100) / 12;
var numberOfPayments = termYears * 12;
// M = P [ i(1 + i)^n ] / [ (1 + i)^n – 1 ]
monthlyMortgage = loanAmount * ( (monthlyRate * Math.pow(1 + monthlyRate, numberOfPayments)) / (Math.pow(1 + monthlyRate, numberOfPayments) – 1) );
} else if (loanAmount > 0 && rate === 0) {
monthlyMortgage = loanAmount / (termYears * 12);
}
// 4. Calculate Income & Vacancy Loss
var grossMonthlyIncome = monthlyRent + otherIncome;
var vacancyLoss = (vacancyRate / 100) * grossMonthlyIncome;
var effectiveIncome = grossMonthlyIncome – vacancyLoss;
// 5. Calculate Cash Flow
var totalMonthlyOutflow = monthlyExp + monthlyMortgage;
var monthlyCashFlow = effectiveIncome – totalMonthlyOutflow;
var annualCashFlow = monthlyCashFlow * 12;
// 6. Calculate CoC Return
var cocReturn = 0;
if (totalCashInvested > 0) {
cocReturn = (annualCashFlow / totalCashInvested) * 100;
}
// 7. Format Functions
function formatCurrency(num) {
return '$' + num.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,');
}
// 8. Update DOM
document.getElementById('resTotalCash').innerText = formatCurrency(totalCashInvested);
document.getElementById('resMortgage').innerText = formatCurrency(monthlyMortgage);
document.getElementById('resMonthlyCashFlow').innerText = formatCurrency(monthlyCashFlow);
document.getElementById('resAnnualCashFlow').innerText = formatCurrency(annualCashFlow);
var cocElement = document.getElementById('resCoC');
cocElement.innerText = cocReturn.toFixed(2) + '%';
// Visual feedback for positive/negative flow
if (annualCashFlow < 0) {
document.getElementById('resMonthlyCashFlow').classList.add('roi-negative');
document.getElementById('resAnnualCashFlow').classList.add('roi-negative');
cocElement.classList.add('roi-negative');
cocElement.classList.remove('roi-highlight');
} else {
document.getElementById('resMonthlyCashFlow').classList.remove('roi-negative');
document.getElementById('resAnnualCashFlow').classList.remove('roi-negative');
cocElement.classList.remove('roi-negative');
cocElement.classList.add('roi-highlight');
}
// Show Results
document.getElementById('resultsArea').style.display = 'block';
}