Investing in real estate is a powerful way to build wealth, but simply buying a property and renting it out doesn't guarantee a profit. To succeed, investors must analyze the numbers objectively. This Rental Property ROI Calculator helps you evaluate the profitability of a potential investment by calculating key metrics like Cash Flow, Cap Rate, and Cash on Cash Return.
What is Cash on Cash Return?
Cash on Cash Return (CoC) is perhaps the most important metric for rental property investors. It measures the annual return you make on the actual cash you invested, expressed as a percentage. Unlike simple ROI, which might look at the total value of the asset, CoC specifically looks at the liquidity of your investment.
Formula:(Annual Pre-Tax Cash Flow / Total Cash Invested) x 100
For example, if you invest $50,000 (down payment + closing costs) and the property generates $5,000 in positive cash flow per year, your Cash on Cash return is 10%.
Understanding Cap Rate (Capitalization Rate)
The Cap Rate measures the natural rate of return of a real estate investment assuming you paid all cash for the property. It is useful for comparing the relative value of different properties regardless of how they are financed.
Formula:(Net Operating Income / Current Market Value) x 100
Net Operating Income (NOI) is your total revenue minus all operating expenses (taxes, insurance, maintenance) but excluding mortgage payments.
What is a "Good" ROI?
While answers vary based on market conditions and risk tolerance, many investors look for the following benchmarks:
Cash Flow: Aim for at least $100-$200 per door, per month in positive cash flow.
Cash on Cash Return: 8% to 12% is generally considered a solid return in the stock market; real estate investors often aim for 10% or higher.
Cap Rate: A higher Cap Rate implies a higher return but often comes with higher risk (e.g., properties in declining neighborhoods). A Cap Rate between 5% and 10% is typical for residential real estate.
Tips for Using This Calculator
When inputting your expenses, be conservative. Don't forget to account for:
Vacancy Rates: Assume the property will sit empty for at least one month a year (approx. 8% vacancy).
Maintenance: Even if the house is new, set aside 5-10% of rent for future repairs (HVAC, roof, water heater).
Property Management: If you don't plan to manage it yourself, deduct 8-10% of the monthly rent for a property manager.
function calculateRentalROI() {
// 1. Get Input Values
var price = parseFloat(document.getElementById('purchasePrice').value);
var closing = parseFloat(document.getElementById('closingCosts').value);
var downPercent = parseFloat(document.getElementById('downPaymentPercent').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('propertyTax').value);
var insurance = parseFloat(document.getElementById('insurance').value);
var maintenance = parseFloat(document.getElementById('maintenance').value);
var hoa = parseFloat(document.getElementById('hoaFees').value);
// Validation
if (isNaN(price) || isNaN(rent) || isNaN(rate) || isNaN(years)) {
alert("Please enter valid numbers for Price, Rent, Interest Rate, and Loan Term.");
return;
}
// 2. Calculations
// Loan Calculation
var downPaymentAmount = price * (downPercent / 100);
var loanAmount = price – downPaymentAmount;
var monthlyRate = rate / 100 / 12;
var numPayments = years * 12;
// Mortgage Payment Formula: M = P [ i(1 + i)^n ] / [ (1 + i)^n – 1]
var monthlyMortgage = 0;
if (rate > 0) {
monthlyMortgage = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numPayments)) / (Math.pow(1 + monthlyRate, numPayments) – 1);
} else {
monthlyMortgage = loanAmount / numPayments;
}
// Expense Calculations
var operatingExpenses = tax + insurance + maintenance + hoa;
var totalMonthlyExpenses = monthlyMortgage + operatingExpenses;
// Cash Flow
var monthlyCashFlow = rent – totalMonthlyExpenses;
var annualCashFlow = monthlyCashFlow * 12;
// NOI (Net Operating Income) = Income – Operating Expenses (Excluding Mortgage)
var monthlyNOI = rent – operatingExpenses;
var annualNOI = monthlyNOI * 12;
// Cap Rate = (Annual NOI / Purchase Price) * 100
var capRate = (annualNOI / price) * 100;
// Cash on Cash Return = (Annual Cash Flow / Total Cash Invested) * 100
var totalCashInvested = downPaymentAmount + closing;
var cashOnCash = (annualCashFlow / totalCashInvested) * 100;
// 3. Display Results
document.getElementById('resUpfront').innerText = "$" + totalCashInvested.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resMortgage').innerText = "$" + monthlyMortgage.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resExpenses').innerText = "$" + totalMonthlyExpenses.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
// Color coding for cashflow
var cashFlowEl = document.getElementById('resCashFlow');
cashFlowEl.innerText = "$" + monthlyCashFlow.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
cashFlowEl.style.color = monthlyCashFlow >= 0 ? '#28a745' : '#dc3545';
document.getElementById('resNOI').innerText = "$" + annualNOI.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resCapRate').innerText = capRate.toFixed(2) + "%";
// Color coding for CoC
var cocEl = document.getElementById('resCoC');
cocEl.innerText = cashOnCash.toFixed(2) + "%";
cocEl.style.color = cashOnCash >= 0 ? '#28a745' : '#dc3545';
// Show result container
document.getElementById('roi-results').style.display = 'block';
}