Calculate Cash on Cash Return, Cash Flow, and Cap Rate
Purchase Information
Loan Details
Rental Income
Annual Expenses
Total Cash Invested:$0
Monthly Cash Flow:$0
Annual Cash Flow:$0
Net Operating Income (NOI):$0
Cap Rate:0%
Cash on Cash Return:0%
Understanding Cash on Cash Return in Real Estate
When investing in rental properties, understanding your return on investment (ROI) is crucial for making informed financial decisions. Unlike stocks where you might simply look at appreciation, real estate offers multiple profit centers: cash flow, principal paydown, tax benefits, and appreciation. The Cash on Cash (CoC) Return is arguably the most important metric for liquid investors because it measures the annual return on the actual capital invested, rather than the total value of the property.
What is the Cash on Cash Return Formula?
The formula is straightforward but requires accurate data inputs to be effective:
Cash on Cash Return = (Annual Pre-Tax Cash Flow / Total Cash Invested) x 100%
To use this calculator effectively, you must understand the two main components:
Annual Cash Flow: This is your Net Operating Income (NOI) minus your annual debt service (mortgage payments). It represents the profit you pocket at the end of the year.
Total Cash Invested: This is not just the down payment. It includes closing costs, rehab or repair costs, and any loan fees. It represents the total amount of money that left your bank account to acquire the asset.
Why Use a Rental Property Calculator?
Real estate investment involves complex variables. A slight change in interest rates, a higher-than-expected vacancy rate, or underestimated maintenance costs can turn a profitable deal into a liability. This calculator helps you stress-test your numbers before you sign a purchase agreement.
For example, a property costing $250,000 with a monthly rent of $2,200 might look like a great deal on the surface. However, once you factor in a 5% vacancy rate, 8% management fee, property taxes, insurance, and a mortgage at 6.5% interest, your actual cash flow might be much lower than the gross rent suggests.
What is a Good Cash on Cash Return?
There is no "one size fits all" answer, as "good" depends on the investor's goals and the risk profile of the property. However, general benchmarks include:
8% to 12%: Often considered a solid return for reliable, stabilized properties in decent neighborhoods.
15%+: Considered excellent, though these properties often require more work (value-add) or are located in riskier areas.
Under 5%: Unless the property is in a high-appreciation market (like San Francisco or NYC), a return this low might not justify the effort of managing a rental.
Key Terms Explained
Net Operating Income (NOI): The total income generated by the property minus all necessary operating expenses. NOI excludes debt service (mortgage payments) and income taxes.
Cap Rate (Capitalization Rate): A measure of a property's natural yield, calculated by dividing the NOI by the property's purchase price. It assumes an all-cash purchase and allows you to compare the profitability of different properties regardless of financing.
Vacancy Rate: The estimated percentage of time the property will sit empty without paying tenants. A standard conservative estimate is 5% to 8% (roughly 2-4 weeks per year).
function calculateRentalROI() {
// 1. Get Inputs using var
var price = parseFloat(document.getElementById('calc_price').value) || 0;
var closingCosts = parseFloat(document.getElementById('calc_closing').value) || 0;
var rehabCosts = parseFloat(document.getElementById('calc_repair').value) || 0;
var downPercent = parseFloat(document.getElementById('calc_down_percent').value) || 0;
var interestRate = parseFloat(document.getElementById('calc_rate').value) || 0;
var loanTermYears = parseFloat(document.getElementById('calc_term').value) || 0;
var monthlyRent = parseFloat(document.getElementById('calc_rent').value) || 0;
var vacancyRate = parseFloat(document.getElementById('calc_vacancy').value) || 0;
var taxYear = parseFloat(document.getElementById('calc_tax').value) || 0;
var insuranceYear = parseFloat(document.getElementById('calc_insurance').value) || 0;
var hoaYear = parseFloat(document.getElementById('calc_hoa').value) || 0;
var maintYear = parseFloat(document.getElementById('calc_maintenance').value) || 0;
var mgmtPercent = parseFloat(document.getElementById('calc_mgmt').value) || 0;
// 2. Calculate Initial Investment
var downPayment = price * (downPercent / 100);
var loanAmount = price – downPayment;
var totalCashInvested = downPayment + closingCosts + rehabCosts;
// 3. Calculate Mortgage Payment (Principal and Interest)
var annualRate = interestRate / 100;
var monthlyRate = annualRate / 12;
var totalPayments = loanTermYears * 12;
var monthlyPI = 0;
if (monthlyRate > 0 && totalPayments > 0) {
monthlyPI = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, totalPayments)) / (Math.pow(1 + monthlyRate, totalPayments) – 1);
} else if (totalPayments > 0) {
monthlyPI = loanAmount / totalPayments; // 0% interest case
}
var annualDebtService = monthlyPI * 12;
// 4. Calculate Operating Income
var grossAnnualRent = monthlyRent * 12;
var vacancyCost = grossAnnualRent * (vacancyRate / 100);
var effectiveGrossIncome = grossAnnualRent – vacancyCost;
// 5. Calculate Operating Expenses
var mgmtCost = effectiveGrossIncome * (mgmtPercent / 100);
var totalOperatingExpenses = taxYear + insuranceYear + hoaYear + maintYear + mgmtCost;
// 6. Calculate Metrics
var noi = effectiveGrossIncome – totalOperatingExpenses; // Net Operating Income
var annualCashFlow = noi – annualDebtService;
var monthlyCashFlow = annualCashFlow / 12;
var capRate = 0;
if (price > 0) {
capRate = (noi / price) * 100;
}
var cashOnCash = 0;
if (totalCashInvested > 0) {
cashOnCash = (annualCashFlow / totalCashInvested) * 100;
}
// 7. Display Results with formatting
var formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
minimumFractionDigits: 0,
maximumFractionDigits: 0,
});
document.getElementById('res_invested').innerText = formatter.format(totalCashInvested);
document.getElementById('res_monthly_cf').innerText = formatter.format(monthlyCashFlow);
document.getElementById('res_annual_cf').innerText = formatter.format(annualCashFlow);
document.getElementById('res_noi').innerText = formatter.format(noi);
// Color code cash flow
if(monthlyCashFlow < 0) {
document.getElementById('res_monthly_cf').style.color = "#c0392b";
} else {
document.getElementById('res_monthly_cf').style.color = "#27ae60";
}
document.getElementById('res_cap').innerText = capRate.toFixed(2) + "%";
document.getElementById('res_coc').innerText = cashOnCash.toFixed(2) + "%";
// Show results container
document.getElementById('roi-results').style.display = 'block';
}