How to Analyze a Rental Property Investment
Investing in rental real estate is a powerful way to build wealth, but simply buying a property doesn't guarantee a profit. Successful investors rely on metrics like Cash Flow, Cash-on-Cash Return, and Cap Rate to evaluate the viability of a deal.
1. Monthly Cash Flow
This is the profit you take home each month after all expenses are paid. It is calculated as:
Cash Flow = Rental Income – (Mortgage + Operating Expenses)
Positive cash flow ensures the property pays for itself and provides passive income.
2. Cash-on-Cash Return (CoC)
This metric measures the return on the actual cash you invested (down payment + closing costs), rather than the total property value. It helps you compare real estate returns against other investments like stocks.
CoC Return = (Annual Pre-Tax Cash Flow / Total Cash Invested) × 100
3. Cap Rate (Capitalization Rate)
Cap Rate measures the property's natural rate of return assuming it was bought with cash. It is useful for comparing the profitability of different properties regardless of financing.
Cap Rate = (Net Operating Income / Purchase Price) × 100
Why Use This Calculator?
Our Rental Property Calculator allows you to factor in mortgage details, interest rates, and specific operating expenses to get a clear picture of your investment's potential. Adjust the down payment and loan terms to see how leverage affects your returns.
function calculateRentalROI() {
// Get Input Values
var price = parseFloat(document.getElementById('purchasePrice').value);
var downPercent = parseFloat(document.getElementById('downPayment').value);
var closingCosts = parseFloat(document.getElementById('closingCosts').value);
var interestRate = parseFloat(document.getElementById('interestRate').value);
var years = parseFloat(document.getElementById('loanTerm').value);
var monthlyRent = parseFloat(document.getElementById('monthlyRent').value);
var monthlyOpEx = parseFloat(document.getElementById('monthlyExpenses').value);
// Validation
if (isNaN(price) || isNaN(downPercent) || isNaN(interestRate) || isNaN(years) || isNaN(monthlyRent) || isNaN(monthlyOpEx)) {
alert("Please fill in all fields with valid numbers.");
return;
}
// 1. Calculate Loan Details
var downPaymentAmt = price * (downPercent / 100);
var loanAmount = price – downPaymentAmt;
var totalCashInvested = downPaymentAmt + closingCosts;
// Mortgage Calculation (Principal + Interest)
// Formula: M = P [ i(1 + i)^n ] / [ (1 + i)^n – 1 ]
var monthlyRate = (interestRate / 100) / 12;
var numPayments = years * 12;
var monthlyMortgage = 0;
if (interestRate === 0) {
monthlyMortgage = loanAmount / numPayments;
} else {
monthlyMortgage = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numPayments)) / (Math.pow(1 + monthlyRate, numPayments) – 1);
}
// 2. Calculate Cash Flow
var totalMonthlyExpenses = monthlyMortgage + monthlyOpEx;
var monthlyCashFlow = monthlyRent – totalMonthlyExpenses;
var annualCashFlow = monthlyCashFlow * 12;
// 3. Calculate NOI (Net Operating Income) -> Rent – Operating Expenses (Excluding Mortgage)
var annualNOI = (monthlyRent * 12) – (monthlyOpEx * 12);
// 4. Calculate Returns
var cashOnCash = (annualCashFlow / totalCashInvested) * 100;
var capRate = (annualNOI / price) * 100;
// 5. Update UI
document.getElementById('resCashFlow').innerText = "$" + monthlyCashFlow.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resCoC').innerText = cashOnCash.toFixed(2) + "%";
document.getElementById('resCapRate').innerText = capRate.toFixed(2) + "%";
document.getElementById('resMortgage').innerText = "$" + monthlyMortgage.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resNOI').innerText = "$" + annualNOI.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resCashInvested').innerText = "$" + totalCashInvested.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
// Styling for positive/negative cash flow
if (monthlyCashFlow >= 0) {
document.getElementById('resCashFlow').style.color = "#27ae60";
} else {
document.getElementById('resCashFlow').style.color = "#c0392b";
}
// Show Results
document.getElementById('resultsArea').style.display = "block";
}