Analyze your real estate investment's potential cash flow and return on investment.
Investment Analysis Results
Monthly Mortgage (P&I):$0.00
Total Monthly Expenses:$0.00
Monthly Cash Flow:$0.00
Cap Rate:0.00%
Cash-on-Cash Return:0.00%
Understanding Rental Property ROI
Investing in real estate is one of the most proven ways to build wealth, but the numbers must make sense. A Rental Property ROI Calculator helps investors determine if a property will generate enough income to cover its costs and provide a meaningful return. Unlike primary residences, rental properties are valued based on their ability to produce Net Operating Income (NOI).
Key Metrics Explained
Cap Rate (Capitalization Rate): This measures the property's natural rate of return without considering financing. It's calculated by dividing the Net Operating Income by the purchase price.
Cash-on-Cash Return (CoC): This is often more important for leveraged investors. it measures the annual cash flow relative to the actual cash you invested (your down payment).
Monthly Cash Flow: This is the "pocket money" left over after every single bill—mortgage, taxes, insurance, and maintenance—has been paid.
Example Calculation
Imagine you buy a property for $300,000 with a 20% down payment ($60,000). Your monthly rent is $2,200. After paying your mortgage ($1,500), taxes ($250), insurance ($100), and setting aside 10% for maintenance ($220), your monthly cash flow is $130. While that may seem small, your Cash-on-Cash return accounts for the equity growth and tax benefits not seen in the simple cash flow number.
Metric
Good Target
Excellent Target
Cap Rate
4% – 6%
8% +
Cash-on-Cash Return
8% – 10%
15% +
Monthly Cash Flow
$100 – $200 / unit
$400+ / unit
Common Mistakes to Avoid
Many new investors forget to account for "hidden" costs. When using this calculator, ensure you are realistic about the Maintenance & Vacancy percentage. Most professionals set aside at least 10% to 15% of gross rent to cover times when the unit is empty or when the water heater inevitably breaks. Underestimating these costs is the fastest way to turn a "good deal" into a financial burden.
function calculateRentalROI() {
var purchasePrice = parseFloat(document.getElementById('purchasePrice').value);
var downPaymentPct = parseFloat(document.getElementById('downPayment').value);
var interestRate = parseFloat(document.getElementById('interestRate').value);
var loanTerm = parseFloat(document.getElementById('loanTerm').value);
var monthlyRent = parseFloat(document.getElementById('monthlyRent').value);
var annualTax = parseFloat(document.getElementById('annualTax').value);
var annualInsurance = parseFloat(document.getElementById('annualInsurance').value);
var maintenancePct = parseFloat(document.getElementById('maintenancePercent').value);
if (isNaN(purchasePrice) || isNaN(monthlyRent) || isNaN(interestRate)) {
alert("Please enter valid numbers in all required fields.");
return;
}
// Mortgage Calculation
var downPaymentAmt = purchasePrice * (downPaymentPct / 100);
var loanAmount = purchasePrice – downPaymentAmt;
var monthlyInt = (interestRate / 100) / 12;
var numPayments = loanTerm * 12;
var monthlyMortgage = 0;
if (interestRate > 0) {
monthlyMortgage = loanAmount * (monthlyInt * Math.pow(1 + monthlyInt, numPayments)) / (Math.pow(1 + monthlyInt, numPayments) – 1);
} else {
monthlyMortgage = loanAmount / numPayments;
}
// Monthly Expenses
var monthlyTax = annualTax / 12;
var monthlyInsurance = annualInsurance / 12;
var monthlyMaintenance = monthlyRent * (maintenancePct / 100);
var totalMonthlyExpenses = monthlyMortgage + monthlyTax + monthlyInsurance + monthlyMaintenance;
// ROI Metrics
var monthlyCashFlow = monthlyRent – totalMonthlyExpenses;
var annualCashFlow = monthlyCashFlow * 12;
var annualExpensesNoDebt = (monthlyTax + monthlyInsurance + monthlyMaintenance) * 12;
var annualNOI = (monthlyRent * 12) – annualExpensesNoDebt;
var capRate = (annualNOI / purchasePrice) * 100;
var cashOnCash = (annualCashFlow / downPaymentAmt) * 100;
// Display Results
document.getElementById('roiResults').style.display = 'block';
document.getElementById('resMortgage').innerText = '$' + monthlyMortgage.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resExpenses').innerText = '$' + totalMonthlyExpenses.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resCashFlow').innerText = '$' + monthlyCashFlow.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resCapRate').innerText = capRate.toFixed(2) + '%';
document.getElementById('resCoC').innerText = cashOnCash.toFixed(2) + '%';
// Color coding for cash flow
var flowEl = document.getElementById('resCashFlow');
if (monthlyCashFlow > 0) {
flowEl.style.color = '#27ae60';
} else {
flowEl.style.color = '#e74c3c';
}
}