Analyze your real estate investment performance instantly.
(Taxes, Insurance, HOA, Maintenance)
Investment Analysis
Monthly Cash Flow
–
Cash on Cash Return
–
Cap Rate
–
Total Cash Invested:–
Monthly Mortgage Payment:–
What is Cash on Cash Return?
Cash on Cash Return (CoC) is a metric used in real estate investing to calculate the cash income earned on the cash invested in a property. Unlike standard ROI which might include appreciation or loan paydown, Cash on Cash Return strictly measures the cash flow relative to the actual capital you deployed to acquire the asset. It is the most practical metric for investors looking for passive income.
How the Formula Works
This calculator uses the following logic to determine your returns:
Total Cash Invested: This is the sum of your Down Payment, Closing Costs, and any immediate Rehab costs.
Annual Cash Flow: This is calculated by taking the Monthly Rent and subtracting the Monthly Mortgage Payment and all other Operating Expenses (Taxes, Insurance, HOA, Vacancy reserves), then multiplying by 12.
Real estate investment requires precision. A "gut feeling" isn't enough when dealing with mortgages, interest rates, and operating margins. By using this calculator, you can:
Determine if a property meets your "1% Rule" or minimum cash flow thresholds.
Compare different financing scenarios (e.g., 15-year vs. 30-year mortgages).
Avoid negative cash flow properties that drain your bank account.
Understanding Cap Rate vs. Cash on Cash
While Cash on Cash return measures the return on your specific equity, the Cap Rate (Capitalization Rate) measures the natural rate of return of the property as if it were bought all cash. Cap Rate is calculated as (Net Operating Income / Purchase Price). Our calculator provides both metrics to give you a complete picture of the deal.
function calculateROI() {
// 1. Get Input Values
var price = parseFloat(document.getElementById("purchasePrice").value);
var downPayment = parseFloat(document.getElementById("downPayment").value);
var closingCosts = parseFloat(document.getElementById("closingCosts").value);
var rent = parseFloat(document.getElementById("monthlyRent").value);
var expenses = parseFloat(document.getElementById("monthlyExpenses").value);
var rate = parseFloat(document.getElementById("interestRate").value);
var years = parseFloat(document.getElementById("loanTerm").value);
// 2. Validation
if (isNaN(price) || isNaN(downPayment) || isNaN(rent) || isNaN(expenses) || isNaN(rate) || isNaN(years)) {
alert("Please fill in all numeric fields correctly.");
return;
}
if (isNaN(closingCosts)) closingCosts = 0;
// 3. Mortgage Calculation
var loanAmount = price – downPayment;
var monthlyRate = (rate / 100) / 12;
var numPayments = years * 12;
// Mortgage formula: M = P [ i(1 + i)^n ] / [ (1 + i)^n – 1 ]
var monthlyMortgage = 0;
if (loanAmount > 0) {
if (rate === 0) {
monthlyMortgage = loanAmount / numPayments;
} else {
monthlyMortgage = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numPayments)) / (Math.pow(1 + monthlyRate, numPayments) – 1);
}
}
// 4. Cash Flow Calculation
var totalMonthlyExpenses = monthlyMortgage + expenses;
var monthlyCashFlow = rent – totalMonthlyExpenses;
var annualCashFlow = monthlyCashFlow * 12;
// 5. Investment Metrics
var totalInvested = downPayment + closingCosts;
var cashOnCash = 0;
if (totalInvested > 0) {
cashOnCash = (annualCashFlow / totalInvested) * 100;
}
// Cap Rate Calculation: (NOI / Price)
// NOI = Annual Rent – Annual Operating Expenses (excluding mortgage)
var annualNOI = (rent – expenses) * 12;
var capRate = (annualNOI / price) * 100;
// 6. Display Results
var resultsDiv = document.getElementById("resultsArea");
resultsDiv.style.display = "block";
// Helper for formatting currency
var formatCurrency = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
minimumFractionDigits: 2
});
document.getElementById("resCashFlow").innerHTML = formatCurrency.format(monthlyCashFlow);
document.getElementById("resCashFlow").className = "result-value " + (monthlyCashFlow >= 0 ? "positive" : "negative");
document.getElementById("resCoC").innerHTML = cashOnCash.toFixed(2) + "%";
document.getElementById("resCoC").className = "result-value " + (cashOnCash >= 0 ? "positive" : "negative");
document.getElementById("resCapRate").innerHTML = capRate.toFixed(2) + "%";
document.getElementById("resTotalInvested").innerHTML = formatCurrency.format(totalInvested);
document.getElementById("resMortgage").innerHTML = formatCurrency.format(monthlyMortgage);
}