Analyze cash flow and cash-on-cash return for your real estate investment.
30 Years
15 Years
10 Years
(Taxes, Ins, HOA, Repairs)
Monthly Mortgage Payment (P&I):$0.00
Total Monthly Expenses:$0.00
Net Monthly Cash Flow:$0.00
Cash-on-Cash ROI:0.00%
Annual Net Income:$0.00
Understanding Rental Property ROI
Calculating the Return on Investment (ROI) is the fundamental step in evaluating whether a rental property is a sound financial decision. Unlike buying a personal home, a rental property is a business, and its viability is determined by the math, not emotions.
What is Cash-on-Cash Return?
While there are many ways to calculate returns (like Cap Rate or IRR), Cash-on-Cash Return is arguably the most important metric for buy-and-hold investors. It measures the annual cash income earned on the property against the actual cash invested (your down payment and closing costs).
The formula is:
Cash-on-Cash ROI = (Annual Pre-Tax Cash Flow / Total Cash Invested) × 100%
Key Metrics Explained
Monthly Cash Flow: This is your "take-home" profit every month after all expenses are paid. It is calculated as Gross Rent – (Mortgage + Taxes + Insurance + HOA + Maintenance + Vacancy). Positive cash flow ensures the property pays for itself.
NOI (Net Operating Income): This is the profitability of the property before adding in the mortgage financing cost. It helps compare properties regardless of how they are financed.
The 1% Rule: A quick "rule of thumb" used by investors to screen properties quickly. It suggests that the monthly rent should be at least 1% of the purchase price. For example, a $200,000 home should rent for at least $2,000/month.
How to Improve Your ROI
If your calculation shows a low or negative return, consider these strategies:
Increase Rent: Are you charging market rates? Minor cosmetic upgrades can often justify higher rent.
Decrease Expenses: Shop around for cheaper landlord insurance or manage the property yourself to save on property management fees.
Refinance: If interest rates have dropped, refinancing can lower your monthly mortgage payment, instantly boosting cash flow.
function calculateROI() {
// 1. Get Input Values
var price = parseFloat(document.getElementById('propPrice').value);
var downPercent = parseFloat(document.getElementById('downPayment').value);
var rate = parseFloat(document.getElementById('interestRate').value);
var termYears = parseFloat(document.getElementById('loanTerm').value);
var rent = parseFloat(document.getElementById('monthlyRent').value);
var expenses = parseFloat(document.getElementById('monthlyExp').value);
// 2. Validation
if (isNaN(price) || isNaN(downPercent) || isNaN(rate) || isNaN(termYears) || isNaN(rent) || isNaN(expenses)) {
alert("Please enter valid numbers in all fields.");
return;
}
// 3. Core Calculations
// Down Payment Amount
var downPaymentAmount = price * (downPercent / 100);
// Loan Amount
var loanAmount = price – downPaymentAmount;
// Monthly Interest Rate (decimal)
var monthlyRate = (rate / 100) / 12;
// Total Payments (Months)
var n = termYears * 12;
// Mortgage Payment Calculation (Principal + Interest)
// Formula: M = P [ i(1 + i)^n ] / [ (1 + i)^n – 1 ]
var mortgagePayment = 0;
if (rate === 0) {
mortgagePayment = loanAmount / n;
} else {
mortgagePayment = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, n)) / (Math.pow(1 + monthlyRate, n) – 1);
}
// Total Monthly Outflow
var totalMonthlyCost = mortgagePayment + expenses;
// Net Monthly Cash Flow
var monthlyCashFlow = rent – totalMonthlyCost;
// Annual Cash Flow
var annualCashFlow = monthlyCashFlow * 12;
// Cash on Cash ROI
// ROI = (Annual Cash Flow / Total Cash Invested) * 100
// Note: Assuming Closing costs are negligible for this simple calc, or user can add to down payment field conceptually.
// We divide by downPaymentAmount. If downpayment is 0 (100% financing), ROI is infinite technically.
var roi = 0;
if (downPaymentAmount > 0) {
roi = (annualCashFlow / downPaymentAmount) * 100;
} else {
roi = 0; // Handle edge case
}
// 4. Formatting Output
var formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
minimumFractionDigits: 2
});
// 5. Update DOM
document.getElementById('resMortgage').innerHTML = formatter.format(mortgagePayment);
document.getElementById('resTotalExp').innerHTML = formatter.format(totalMonthlyCost);
var cashFlowEl = document.getElementById('resCashFlow');
cashFlowEl.innerHTML = formatter.format(monthlyCashFlow);
// Color coding for cash flow
if(monthlyCashFlow >= 0) {
cashFlowEl.className = "roi-result-value roi-highlight";
} else {
cashFlowEl.className = "roi-result-value roi-highlight-negative";
}
var roiEl = document.getElementById('resROI');
roiEl.innerHTML = roi.toFixed(2) + "%";
// Color coding for ROI
if(roi >= 0) {
roiEl.className = "roi-result-value roi-highlight";
} else {
roiEl.className = "roi-result-value roi-highlight-negative";
}
document.getElementById('resAnnual').innerHTML = formatter.format(annualCashFlow);
// Show results container
document.getElementById('resultsArea').style.display = "block";
}