When investing in rental properties, understanding your return on investment (ROI) is crucial for making informed financial decisions.
Unlike the stock market, where returns are often calculated simply on capital appreciation, real estate offers a unique metric known as
Cash-on-Cash Return (CoC).
What is Cash-on-Cash Return?
Cash-on-Cash Return is a percentage that calculates the annual pre-tax cash flow generated by the property divided by the total cash invested.
It effectively measures the return on the actual cash you put into the deal, rather than the total value of the property.
The Formula: Cash-on-Cash Return = (Annual Pre-Tax Cash Flow / Total Cash Invested) x 100%
Why Use This Calculator?
This Rental Property ROI Calculator helps investors determine the viability of a potential rental unit. By inputting specific data such as
purchase price, financing terms, and projected rental income, you can see exactly how hard your money is working for you.
Key Metrics Explained
Monthly Cash Flow: This is your profit each month after the mortgage, taxes, insurance, and maintenance costs are paid. Positive cash flow is essential for long-term sustainability.
Annual Expenses: Don't forget to factor in property taxes, landlord insurance, HOA fees, vacancy reserves, and maintenance costs. A common mistake is underestimating these ongoing liabilities.
Good CoC ROI: While it varies by market, many investors target a Cash-on-Cash return of 8% to 12% or higher. This often outperforms inflation and traditional savings accounts.
How to Improve Your Returns
If your calculated return is lower than expected, consider these strategies:
Increase Rent: Are you charging market rates? Minor renovations can often justify a rent increase.
Reduce Expenses: Shop around for cheaper insurance or handle minor maintenance tasks yourself.
Refinance: If interest rates drop, refinancing can lower your monthly mortgage payment, instantly boosting cash flow.
function calculateROI() {
// 1. Get Input Values
var price = parseFloat(document.getElementById('purchasePrice').value);
var down = parseFloat(document.getElementById('downPayment').value);
var rate = parseFloat(document.getElementById('interestRate').value);
var years = parseFloat(document.getElementById('loanTerm').value);
var rent = parseFloat(document.getElementById('monthlyRent').value);
var expenses = parseFloat(document.getElementById('annualExpenses').value);
// 2. Validate Inputs
if (isNaN(price) || isNaN(down) || isNaN(rate) || isNaN(years) || isNaN(rent) || isNaN(expenses)) {
alert("Please fill in all fields with valid numbers before calculating.");
return;
}
if (down >= price) {
alert("Down payment cannot be greater than or equal to the purchase price for this mortgage calculation.");
return;
}
// 3. Perform Calculations
// Loan Calculation
var principal = price – down;
var monthlyRate = (rate / 100) / 12;
var numberOfPayments = years * 12;
// Mortgage Formula: M = P [ i(1 + i)^n ] / [ (1 + i)^n – 1 ]
var mortgagePayment = 0;
if (rate === 0) {
mortgagePayment = principal / numberOfPayments;
} else {
mortgagePayment = principal * ( (monthlyRate * Math.pow(1 + monthlyRate, numberOfPayments)) / (Math.pow(1 + monthlyRate, numberOfPayments) – 1) );
}
// Expense Calculation
var monthlyExpensesOnly = expenses / 12;
var totalMonthlyOutflow = mortgagePayment + monthlyExpensesOnly;
// Cash Flow Calculation
var monthlyCashFlow = rent – totalMonthlyOutflow;
var annualCashFlow = monthlyCashFlow * 12;
// Cash on Cash Return Calculation
// Note: For simplicity, Total Cash Invested is assumed to be the Down Payment.
// In a real scenario, closing costs and rehab costs would be added here.
var cashInvested = down;
var cocReturn = 0;
if (cashInvested > 0) {
cocReturn = (annualCashFlow / cashInvested) * 100;
}
// 4. Update UI with Results
var resultArea = document.getElementById('results-area');
resultArea.style.display = 'block';
// Format Currency Helper
var formatCurrency = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
minimumFractionDigits: 2
});
document.getElementById('resMortgage').innerText = formatCurrency.format(mortgagePayment);
document.getElementById('resTotalExp').innerText = formatCurrency.format(totalMonthlyOutflow);
// Handle negative cash flow styling
var cfElement = document.getElementById('resCashFlow');
cfElement.innerText = formatCurrency.format(monthlyCashFlow);
cfElement.style.color = monthlyCashFlow >= 0 ? '#27ae60' : '#c0392b';
var annualCfElement = document.getElementById('resAnnualFlow');
annualCfElement.innerText = formatCurrency.format(annualCashFlow);
annualCfElement.style.color = annualCashFlow >= 0 ? '#27ae60' : '#c0392b';
var cocElement = document.getElementById('resCoC');
cocElement.innerText = cocReturn.toFixed(2) + "%";
cocElement.style.color = cocReturn >= 0 ? '#27ae60' : '#c0392b';
}