Analyze cash flow and cash-on-cash return for your real estate investment.
Investment Analysis
Monthly Principal & Interest:$0.00
Total Monthly Expenses:$0.00
Monthly Cash Flow:$0.00
Net Operating Income (Annual):$0.00
Cap Rate:0.00%
Cash on Cash Return (ROI):0.00%
Understanding Rental Property ROI
Investing in real estate is one of the most reliable ways to build wealth, but simply buying a property doesn't guarantee profit.
Successful investors rely on accurate data to determine if a property will generate positive cash flow. This Rental Property ROI Calculator
helps you analyze the profitability of a potential investment by breaking down income, expenses, and returns.
Key Metrics Explained
Cash Flow: This is the net profit you pocket every month after all expenses (mortgage, taxes, insurance, repairs) are paid. Positive cash flow is essential for long-term sustainability.
Cash on Cash Return (CoC): Perhaps the most important metric for investors. It measures the annual return on the actual cash you invested (down payment + closing costs). For example, if you invest $50,000 cash and make $5,000 in net profit per year, your CoC return is 10%.
Cap Rate (Capitalization Rate): This metric evaluates the profitability of a property regardless of how it is financed. It is calculated by dividing the Net Operating Income (NOI) by the property's purchase price. It helps compare properties directly against each other.
Net Operating Income (NOI): The total annual revenue minus all necessary operating expenses. Note that NOI excludes mortgage payments (principal and interest).
How to Improve Your ROI
If the calculator shows a lower return than expected, consider these strategies:
increase the rent if the market allows, reduce operating expenses by managing the property yourself,
or negotiate a lower purchase price. A healthy Cash on Cash return varies by market, but many investors target 8-12% or higher.
function calculateRentalROI() {
// Get Inputs
var price = parseFloat(document.getElementById('purchasePrice').value);
var downPayment = 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 tax = parseFloat(document.getElementById('annualTax').value);
var insurance = parseFloat(document.getElementById('annualInsurance').value);
var ops = parseFloat(document.getElementById('monthlyOps').value);
// Validation
if (isNaN(price) || isNaN(downPayment) || isNaN(rate) || isNaN(years) || isNaN(rent) || isNaN(tax) || isNaN(insurance) || isNaN(ops)) {
alert("Please enter valid numbers in all fields.");
return;
}
// 1. Calculate Mortgage
var loanAmount = price – downPayment;
var monthlyRate = rate / 100 / 12;
var numPayments = years * 12;
var mortgagePayment = 0;
if (rate === 0) {
mortgagePayment = loanAmount / numPayments;
} else {
mortgagePayment = (loanAmount * monthlyRate) / (1 – Math.pow(1 + monthlyRate, -numPayments));
}
// 2. Calculate Monthly Expenses
var monthlyTax = tax / 12;
var monthlyIns = insurance / 12;
var totalMonthlyExp = mortgagePayment + monthlyTax + monthlyIns + ops;
// 3. Calculate Cash Flow
var monthlyCashFlow = rent – totalMonthlyExp;
var annualCashFlow = monthlyCashFlow * 12;
// 4. Calculate Net Operating Income (NOI) – Excludes Mortgage
// NOI = Annual Rent – (Tax + Insurance + Ops)
var annualOps = ops * 12;
var noi = (rent * 12) – (tax + insurance + annualOps);
// 5. Calculate Metrics
// Cash on Cash Return = Annual Cash Flow / Total Cash Invested (assuming Down Payment is total cash for this simplified calc)
var cashInvested = downPayment;
var cocReturn = 0;
if (cashInvested > 0) {
cocReturn = (annualCashFlow / cashInvested) * 100;
}
// Cap Rate = NOI / Price
var capRate = 0;
if (price > 0) {
capRate = (noi / price) * 100;
}
// Display Results
document.getElementById('resultsArea').style.display = 'block';
document.getElementById('resMortgage').innerText = "$" + mortgagePayment.toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, ",");
document.getElementById('resTotalExp').innerText = "$" + totalMonthlyExp.toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, ",");
var cfElem = document.getElementById('resCashFlow');
cfElem.innerText = "$" + monthlyCashFlow.toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, ",");
if(monthlyCashFlow < 0) {
cfElem.style.color = "#c0392b";
} else {
cfElem.style.color = "#27ae60";
}
document.getElementById('resNOI').innerText = "$" + noi.toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, ",");
document.getElementById('resCapRate').innerText = capRate.toFixed(2) + "%";
var cocElem = document.getElementById('resCOC');
cocElem.innerText = cocReturn.toFixed(2) + "%";
if(cocReturn < 0) {
cocElem.classList.add('roi-neg');
cocElem.classList.remove('roi-highlight');
} else {
cocElem.classList.remove('roi-neg');
cocElem.classList.add('roi-highlight');
}
}