Investing in real estate requires precise numbers to ensure a property will be profitable. This Cash on Cash Return Calculator helps investors analyze the performance of rental properties by comparing annual pre-tax cash flow to the total amount of cash invested. Whether you are analyzing a long-term rental or an Airbnb, use this tool to determine your true Return on Investment (ROI).
Investment Property Analysis
(Taxes, Ins, HOA, Maintenance)
Please enter valid numeric values for all fields.
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:0.00%
What is Cash on Cash Return?
Cash on Cash Return (CoC) is a metric used in real estate transactions to calculate the cash income earned on the cash invested in a property. Unlike standard Return on Investment (ROI), which might look at the total value of the asset including debt, CoC strictly measures the return on the actual cash you put into the deal (down payment, closing costs, and repairs).
It is arguably the most important metric for cash-flow investors because it tells you exactly how hard your money is working for you. For example, if you invest $100,000 cash and generate $10,000 in net positive cash flow per year, your Cash on Cash return is 10%.
How to Calculate Cash on Cash Return
The formula for Cash on Cash Return is relatively straightforward:
Cash on Cash Return = (Annual Pre-Tax Cash Flow / Total Cash Invested) × 100
To use this formula accurately, you must determine two main components:
Annual Cash Flow: This is your Gross Rental Income minus ALL expenses. Expenses include the mortgage payment (principal and interest), taxes, insurance, HOA fees, vacancy reserves, repairs, and property management fees.
Total Cash Invested: This is the sum of your down payment, closing costs, inspection fees, and any immediate renovation costs required to get the property rentable.
What is a Good Cash on Cash Return?
The definition of a "good" return varies by market and investor strategy, but here are general benchmarks for real estate investors:
8-12%: Generally considered a solid return for long-term buy-and-hold residential properties.
15%+: Considered excellent performance, often found in high-risk areas, student housing, or short-term rentals (Airbnb/VRBO).
Under 5%: Might be acceptable in rapidly appreciating markets (like San Francisco or New York) where the investor is banking on appreciation rather than cash flow, but risky for pure cash-flow investors.
Why Use This Calculator?
Real estate leverage changes the math significantly compared to stocks. By using a mortgage, you can acquire a $500,000 asset with only $100,000 cash. This calculator helps you see if the rental income covers that debt service while still providing a profit on your specific cash contribution. It prevents the common mistake of ignoring "hidden" costs like vacancies and maintenance which can quickly turn a profitable-looking property into a liability.
function calculateROI() {
// 1. Get Input Values
var price = parseFloat(document.getElementById("purchasePrice").value);
var downPayment = parseFloat(document.getElementById("downPayment").value);
var interestRate = parseFloat(document.getElementById("interestRate").value);
var termYears = parseFloat(document.getElementById("loanTerm").value);
var closingCosts = parseFloat(document.getElementById("closingCosts").value);
var monthlyRent = parseFloat(document.getElementById("monthlyRent").value);
var monthlyExpenses = parseFloat(document.getElementById("monthlyExpenses").value);
// 2. Element references for output
var resTotalInvested = document.getElementById("resTotalInvested");
var resMortgage = document.getElementById("resMortgage");
var resTotalExpenses = document.getElementById("resTotalExpenses");
var resMonthlyCashFlow = document.getElementById("resMonthlyCashFlow");
var resAnnualCashFlow = document.getElementById("resAnnualCashFlow");
var resCoC = document.getElementById("resCoC");
var errorMsg = document.getElementById("errorMsg");
var resultsBox = document.getElementById("results");
// 3. Validation
if (isNaN(price) || isNaN(downPayment) || isNaN(interestRate) ||
isNaN(termYears) || isNaN(closingCosts) || isNaN(monthlyRent) ||
isNaN(monthlyExpenses)) {
errorMsg.style.display = "block";
resultsBox.style.display = "none";
return;
}
// Check for logical errors (e.g. down payment > price)
if (downPayment > price) {
alert("Down payment cannot be greater than purchase price.");
return;
}
errorMsg.style.display = "none";
resultsBox.style.display = "block";
// 4. Calculations
// A. Loan Amount
var loanAmount = price – downPayment;
// B. Mortgage Payment Formula: M = P [ i(1 + i)^n ] / [ (1 + i)^n – 1 ]
var monthlyRate = (interestRate / 100) / 12;
var totalMonths = termYears * 12;
var mortgagePayment = 0;
if (loanAmount > 0) {
if (monthlyRate === 0) {
mortgagePayment = loanAmount / totalMonths;
} else {
mortgagePayment = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, totalMonths)) / (Math.pow(1 + monthlyRate, totalMonths) – 1);
}
}
// C. Total Monthly Outflow
var totalMonthlyExpenses = mortgagePayment + monthlyExpenses;
// D. Cash Flow
var monthlyCashFlow = monthlyRent – totalMonthlyExpenses;
var annualCashFlow = monthlyCashFlow * 12;
// E. Total Cash Invested
var totalCashInvested = downPayment + closingCosts;
// F. Cash on Cash Return
var cocReturn = 0;
if (totalCashInvested > 0) {
cocReturn = (annualCashFlow / totalCashInvested) * 100;
}
// 5. Formatting and Display
var formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
minimumFractionDigits: 2
});
resTotalInvested.innerHTML = formatter.format(totalCashInvested);
resMortgage.innerHTML = formatter.format(mortgagePayment);
resTotalExpenses.innerHTML = formatter.format(totalMonthlyExpenses);
// Handle coloring for negative cash flow
resMonthlyCashFlow.innerHTML = formatter.format(monthlyCashFlow);
resMonthlyCashFlow.style.color = monthlyCashFlow >= 0 ? "#228be6" : "#e03131";
resAnnualCashFlow.innerHTML = formatter.format(annualCashFlow);
resAnnualCashFlow.style.color = annualCashFlow >= 0 ? "#228be6" : "#e03131";
resCoC.innerHTML = cocReturn.toFixed(2) + "%";
resCoC.style.color = cocReturn >= 0 ? "#228be6" : "#e03131";
}