Analyze your real estate investment performance instantly.
Purchase Information
Financing Details
Rental Income
Monthly Expenses
Investment Analysis
Total Cash Invested:$0.00
Monthly Mortgage Payment:$0.00
Total Monthly Expenses:$0.00
Monthly Cash Flow:$0.00
Annual Cash Flow:$0.00
Cash on Cash Return (CoC):0.00%
Cap Rate:0.00%
Understanding Cash on Cash Return in Real Estate
When investing in rental properties, determining the profitability of a potential deal is crucial before signing any contracts. While there are many metrics to track, such as Internal Rate of Return (IRR) or Gross Rent Multiplier (GRM), the Cash on Cash (CoC) Return is widely regarded as the premier metric for immediate cash flow analysis.
This calculator helps investors determine exactly how hard their money is working for them by comparing the annual pre-tax cash flow to the total amount of cash actually invested.
What is the Cash on Cash Return Formula?
The formula is relatively straightforward but requires accurate inputs to be effective:
Cash on Cash Return = (Annual Pre-Tax Cash Flow / Total Cash Invested) × 100%
Key Inputs Explained
Total Cash Invested: This is not just the down payment. It includes closing costs, rehab or renovation costs, and any other upfront fees required to get the property operational.
Annual Cash Flow: This is your gross rental income minus ALL expenses (mortgage, taxes, insurance, vacancy allowance, repairs, and management fees).
Vacancy Rate: Real estate isn't occupied 365 days a year. A standard conservative estimate is 5-8%, representing the time between tenants.
Maintenance & CapEx: Even if a house is new, things break. Setting aside 5-10% of monthly rent helps cover future repairs like water heaters or roof patches.
What is a "Good" Cash on Cash Return?
A "good" return varies by market and investor strategy, but generally:
8-12%: Considered a solid return in most stable markets.
15%+: Excellent return, often found in lower-cost markets or properties requiring significant "sweat equity" (rehab).
Below 5%: Usually considered poor for cash flow investing, though investors might accept this in high-appreciation markets (like coastal cities) where the long-term value growth is the primary goal.
Why Use This Calculator?
Real estate is a numbers game. Emotions should not dictate purchase decisions. By using this tool, you can objectively compare Property A vs. Property B. For example, a cheaper property might look attractive, but after factoring in higher repair costs and utility expenses, the CoC return might be lower than a slightly more expensive, turnkey property.
function calculateRentalROI() {
// 1. Get Input Values
var price = parseFloat(document.getElementById('purchasePrice').value) || 0;
var closing = parseFloat(document.getElementById('closingCosts').value) || 0;
var rehab = parseFloat(document.getElementById('rehabCosts').value) || 0;
var downPercent = parseFloat(document.getElementById('downPaymentPercent').value) || 0;
var interestRate = parseFloat(document.getElementById('interestRate').value) || 0;
var termYears = parseFloat(document.getElementById('loanTerm').value) || 0;
var monthlyRent = parseFloat(document.getElementById('monthlyRent').value) || 0;
var vacancyRate = parseFloat(document.getElementById('vacancyRate').value) || 0;
var propertyTaxAnnual = parseFloat(document.getElementById('propertyTax').value) || 0;
var insuranceAnnual = parseFloat(document.getElementById('insurance').value) || 0;
var hoaMonthly = parseFloat(document.getElementById('hoaFees').value) || 0;
var maintenancePercent = parseFloat(document.getElementById('maintenance').value) || 0;
var managementPercent = parseFloat(document.getElementById('managementFee').value) || 0;
// 2. Calculate Initial Investment
var downPaymentAmount = price * (downPercent / 100);
var loanAmount = price – downPaymentAmount;
var totalCashInvested = downPaymentAmount + closing + rehab;
// 3. Calculate Mortgage (Principal + Interest)
var monthlyMortgage = 0;
if (loanAmount > 0 && interestRate > 0 && termYears > 0) {
var monthlyRate = (interestRate / 100) / 12;
var numberOfPayments = termYears * 12;
// Formula: M = P [ i(1 + i)^n ] / [ (1 + i)^n – 1 ]
monthlyMortgage = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numberOfPayments)) / (Math.pow(1 + monthlyRate, numberOfPayments) – 1);
}
// 4. Calculate Income
var grossMonthlyIncome = monthlyRent;
var vacancyLoss = monthlyRent * (vacancyRate / 100);
var effectiveMonthlyIncome = grossMonthlyIncome – vacancyLoss;
// 5. Calculate Operating Expenses
var monthlyTax = propertyTaxAnnual / 12;
var monthlyInsurance = insuranceAnnual / 12;
var monthlyMaintenance = monthlyRent * (maintenancePercent / 100);
var monthlyManagement = monthlyRent * (managementPercent / 100);
// Total Monthly Expenses (Operating + Mortgage)
var totalMonthlyExpenses = monthlyMortgage + monthlyTax + monthlyInsurance + hoaMonthly + monthlyMaintenance + monthlyManagement;
// 6. Calculate Cash Flow
var monthlyCashFlow = effectiveMonthlyIncome – totalMonthlyExpenses;
var annualCashFlow = monthlyCashFlow * 12;
// 7. Calculate Returns
var cocReturn = 0;
if (totalCashInvested > 0) {
cocReturn = (annualCashFlow / totalCashInvested) * 100;
}
// Calculate Cap Rate: (Net Operating Income / Current Market Value)
// NOI = Annual Income – Operating Expenses (Excluding Mortgage)
var annualOperatingExpenses = (monthlyTax + monthlyInsurance + hoaMonthly + monthlyMaintenance + monthlyManagement) * 12; // Excludes mortgage
var annualNOI = (effectiveMonthlyIncome * 12) – annualOperatingExpenses;
var capRate = 0;
if (price > 0) {
capRate = (annualNOI / price) * 100;
}
// 8. Display Results
// Formatting helper
var formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
});
document.getElementById('resTotalInvested').innerText = formatter.format(totalCashInvested);
document.getElementById('resMortgage').innerText = formatter.format(monthlyMortgage);
document.getElementById('resTotalExpenses').innerText = formatter.format(totalMonthlyExpenses);
document.getElementById('resMonthlyCashFlow').innerText = formatter.format(monthlyCashFlow);
document.getElementById('resAnnualCashFlow').innerText = formatter.format(annualCashFlow);
// Color coding for negative flow
var cashFlowEl = document.getElementById('resMonthlyCashFlow');
if(monthlyCashFlow < 0) {
cashFlowEl.style.color = 'red';
} else {
cashFlowEl.style.color = '#0073aa';
}
document.getElementById('resCoC').innerText = cocReturn.toFixed(2) + "%";
document.getElementById('resCapRate').innerText = capRate.toFixed(2) + "%";
// Show results container
document.getElementById('results').style.display = 'block';
}