Investing in real estate is one of the most reliable ways to build wealth, but simply buying a property doesn't guarantee a profit. To succeed, investors rely on specific metrics to evaluate the performance of an asset. The most critical of these for rental properties is the Cash on Cash (CoC) Return.
This calculator helps you determine if a potential rental property will generate positive cash flow and provides a percentage return based on the actual cash you invest, rather than the total loan amount.
What is Cash on Cash Return?
Cash on Cash Return measures the annual pre-tax cash flow generated by the property compared to the amount of cash invested. Unlike Cap Rate, which looks at the property's unleveraged yield, CoC Return factors in your mortgage financing, making it a "real world" metric for your bank account.
Formula:
Cash on Cash Return = (Annual Pre-Tax Cash Flow / Total Cash Invested) × 100%
How to Analyze the Results
Monthly Cash Flow: This is your "net" profit every month after the mortgage, taxes, insurance, and operating costs are paid. A positive number is essential for a sustainable investment.
Cash on Cash Return: Most investors aim for a CoC return of 8-12% or higher. This compares favorably to the stock market average (~7-10%) because real estate also offers benefits like appreciation, depreciation tax breaks, and principal paydown.
Total Cash Invested: This includes your down payment plus closing costs and any immediate renovation (rehab) costs.
Realistic Example
Let's say you purchase a single-family home for $200,000.
Investment: You put 20% down ($40,000) and pay $5,000 in closing costs. Total Cash Invested = $45,000.
Income: You rent the property for $1,800/month.
Expenses: Your mortgage is roughly $1,000, and other expenses (taxes, repairs, vacancy) are $500. Total Outflow = $1,500.
Result: ($3,600 / $45,000) = 8.0% Cash on Cash Return.
This 8% return is liquid cash, not including the wealth built as the tenant pays down your mortgage principal or the property value increases over time.
Why Use This Calculator?
Real estate markets move fast. By inputting your purchase price, financing terms, and projected expenses, you can instantly see if a deal makes sense financially. Avoid emotional buying decisions and stick to the numbers to build a profitable portfolio.
function calculateRentalReturns() {
// 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 interestRate = parseFloat(document.getElementById('interestRate').value);
var loanTerm = parseFloat(document.getElementById('loanTerm').value);
var monthlyRent = parseFloat(document.getElementById('monthlyRent').value);
var monthlyExpenses = parseFloat(document.getElementById('monthlyExpenses').value);
// Validation: Ensure valid numbers are entered
if (isNaN(price) || isNaN(downPayment) || isNaN(closingCosts) || isNaN(interestRate) ||
isNaN(loanTerm) || isNaN(monthlyRent) || isNaN(monthlyExpenses)) {
alert("Please enter valid numbers in all fields.");
return;
}
if (price <= 0 || loanTerm 0) {
cocReturn = (annualCashFlow / totalCashInvested) * 100;
} else {
cocReturn = 0; // Avoid division by zero if infinite return
}
// 5. Update HTML Results
// Format Currency
var formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
minimumFractionDigits: 2
});
document.getElementById('monthlyMortgage').innerHTML = formatter.format(monthlyMortgage);
document.getElementById('monthlyCashFlow').innerHTML = formatter.format(monthlyCashFlow);
document.getElementById('annualCashFlow').innerHTML = formatter.format(annualCashFlow);
// Color coding for cash flow
var mcfElement = document.getElementById('monthlyCashFlow');
if (monthlyCashFlow >= 0) {
mcfElement.className = "result-value positive";
} else {
mcfElement.className = "result-value negative";
}
// Format Percent
document.getElementById('cocReturn').innerHTML = cocReturn.toFixed(2) + "%";
var cocElement = document.getElementById('cocReturn');
if (cocReturn >= 0) {
cocElement.className = "result-value positive";
} else {
cocElement.className = "result-value negative";
}
// Show Results Area
document.getElementById('results-area').style.display = "block";
}