Rental Property ROI Calculator
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
line-height: 1.6;
color: #333;
max-width: 1200px;
margin: 0 auto;
padding: 20px;
background-color: #f9f9f9;
}
.calculator-wrapper {
background: #fff;
padding: 30px;
border-radius: 8px;
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
margin-bottom: 40px;
}
.calc-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 30px;
}
@media (max-width: 768px) {
.calc-grid {
grid-template-columns: 1fr;
}
}
.input-section h3, .results-section h3 {
margin-top: 0;
color: #2c3e50;
border-bottom: 2px solid #eee;
padding-bottom: 10px;
margin-bottom: 20px;
}
.form-group {
margin-bottom: 15px;
}
.form-group label {
display: block;
margin-bottom: 5px;
font-weight: 600;
font-size: 0.9em;
color: #555;
}
.input-group {
display: flex;
align-items: center;
}
.input-group input {
width: 100%;
padding: 10px;
border: 1px solid #ddd;
border-radius: 4px;
font-size: 16px;
}
.input-group span {
padding: 10px;
background: #eee;
border: 1px solid #ddd;
border-left: none;
border-radius: 0 4px 4px 0;
color: #666;
min-width: 30px;
text-align: center;
}
.input-group.prefix span {
border-left: 1px solid #ddd;
border-right: none;
border-radius: 4px 0 0 4px;
}
.calc-btn {
width: 100%;
padding: 15px;
background-color: #27ae60;
color: white;
border: none;
border-radius: 4px;
font-size: 18px;
font-weight: bold;
cursor: pointer;
transition: background 0.3s;
margin-top: 10px;
}
.calc-btn:hover {
background-color: #219150;
}
.results-section {
background-color: #f8fcf9;
border: 1px solid #e0e0e0;
border-radius: 8px;
padding: 20px;
}
.result-row {
display: flex;
justify-content: space-between;
padding: 12px 0;
border-bottom: 1px solid #eee;
}
.result-row:last-child {
border-bottom: none;
}
.result-label {
color: #666;
}
.result-value {
font-weight: bold;
color: #2c3e50;
}
.highlight-result {
background-color: #27ae60;
color: white;
padding: 15px;
border-radius: 6px;
margin-top: 20px;
text-align: center;
}
.highlight-result .result-label {
color: #e8f5e9;
font-size: 0.9em;
display: block;
margin-bottom: 5px;
}
.highlight-result .result-value {
color: white;
font-size: 2em;
}
.content-article {
background: #fff;
padding: 30px;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0,0,0,0.05);
}
.content-article h2 {
color: #2c3e50;
margin-top: 30px;
}
.content-article p {
margin-bottom: 15px;
color: #444;
}
.content-article ul {
margin-bottom: 20px;
padding-left: 20px;
}
.content-article li {
margin-bottom: 10px;
}
Investment Analysis
Total Cash Invested
$0
Monthly Principal & Interest
$0
Monthly Expenses (w/o Mortgage)
$0
Net Operating Income (Annual)
$0
Cash on Cash Return
0.00%
Monthly Cash Flow
$0
Annual Cash Flow
$0
Rental Property ROI Calculator
Investing in real estate is one of the most effective ways to build long-term wealth, but success relies heavily on the numbers. Our Rental Property ROI Calculator is designed to help investors determine the profitability of a potential real estate purchase. Specifically, this tool focuses on the "Cash on Cash Return," a critical metric for gauging the efficiency of the capital you actually invest.
What is Cash on Cash Return?
Cash on Cash Return (CoC) measures the annual pre-tax cash flow generated by the property relative to the total amount of cash invested. Unlike a simple "Return on Investment" (ROI) which might account for loan paydown and appreciation, CoC focuses purely on the liquid cash available to you at the end of the year.
The Formula:
Cash on Cash Return = (Annual Pre-Tax Cash Flow / Total Cash Invested) × 100%
How to Use This Calculator
To get an accurate analysis of your rental property, you will need to input the following data points:
- Purchase Price: The agreed-upon price of the property.
- Down Payment & Loan Details: These determine your monthly mortgage obligation (Principal & Interest). A higher down payment reduces the loan payment but increases your initial cash investment.
- Closing Costs: Don't forget to include inspection fees, title insurance, and origination fees. These are part of your "Total Cash Invested."
- Rental Income: Be realistic about the rent. Check local comps (comparables) to see what similar units are renting for.
- Operating Expenses: This is where many investors make mistakes. Ensure you account for Taxes, Insurance, Maintenance (saving for future repairs), and Vacancy (months where the property sits empty).
Interpreting Your Results
1. Monthly Cash Flow
This is your profit after all expenses and the mortgage are paid. A positive cash flow indicates the property pays for itself and provides income. A negative cash flow means you are feeding the property monthly.
2. Net Operating Income (NOI)
NOI is calculated by subtracting all operating expenses from total revenue, excluding the mortgage payment. This number is useful for calculating the Cap Rate, which allows you to compare the property's raw profitability against other investments independent of financing.
3. What is a "Good" Return?
While this varies by market and investor goals, many real estate investors aim for a Cash on Cash return between 8% and 12%. In highly competitive markets, investors might accept 4-6% hoping for appreciation, while in riskier markets, investors might demand 15% or higher.
Example Calculation
Imagine you buy a property for $200,000 with 20% down ($40,000) and $5,000 in closing costs. Your total cash invested is $45,000.
If the property generates $1,500/month in rent and your total expenses (mortgage + taxes + insurance + maintenance) are $1,200/month, your monthly cash flow is $300.
Annual Cash Flow: $300 × 12 = $3,600.
Cash on Cash Return: ($3,600 / $45,000) = 8.0%.
function calculateROI() {
// 1. Get Input Values
var price = parseFloat(document.getElementById('purchasePrice').value) || 0;
var downPercent = parseFloat(document.getElementById('downPaymentPercent').value) || 0;
var interestRate = parseFloat(document.getElementById('interestRate').value) || 0;
var termYears = parseFloat(document.getElementById('loanTerm').value) || 0;
var closingCosts = parseFloat(document.getElementById('closingCosts').value) || 0;
var rent = parseFloat(document.getElementById('monthlyRent').value) || 0;
var tax = parseFloat(document.getElementById('annualTax').value) || 0;
var insurance = parseFloat(document.getElementById('annualInsurance').value) || 0;
var maintRate = parseFloat(document.getElementById('maintenanceRate').value) || 0;
var vacancyRate = parseFloat(document.getElementById('vacancyRate').value) || 0;
// 2. Calculate Initial Investment
var downPayment = price * (downPercent / 100);
var loanAmount = price – downPayment;
var totalCashInvested = downPayment + closingCosts;
// 3. Calculate Mortgage Payment (Principal + Interest)
var monthlyRate = (interestRate / 100) / 12;
var totalPayments = termYears * 12;
var monthlyMortgage = 0;
if (loanAmount > 0 && interestRate > 0) {
// Standard amortization formula: M = P [ i(1 + i)^n ] / [ (1 + i)^n – 1]
monthlyMortgage = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, totalPayments)) / (Math.pow(1 + monthlyRate, totalPayments) – 1);
} else if (loanAmount > 0 && interestRate === 0) {
monthlyMortgage = loanAmount / totalPayments;
}
// 4. Calculate Operating Expenses
// Vacancy is lost income, maintenance is an expense based on gross rent
var monthlyVacancyCost = rent * (vacancyRate / 100);
var monthlyMaintenance = rent * (maintRate / 100);
var monthlyTax = tax / 12;
var monthlyInsurance = insurance / 12;
// Total Monthly Expenses (excluding mortgage)
// Note: Vacancy is usually treated as a reduction of income, but for cash flow calc we subtract it from Gross Potential Rent
var totalMonthlyOperatingExpenses = monthlyTax + monthlyInsurance + monthlyMaintenance + monthlyVacancyCost;
// 5. Calculate Net Operating Income (NOI)
// NOI = Annual Rent – Annual Operating Expenses (Excluding Mortgage)
var annualRent = rent * 12;
var annualOperatingExpenses = totalMonthlyOperatingExpenses * 12;
var annualNOI = annualRent – annualOperatingExpenses;
// 6. Calculate Cash Flow
var monthlyCashFlow = rent – totalMonthlyOperatingExpenses – monthlyMortgage;
var annualCashFlow = monthlyCashFlow * 12;
// 7. Calculate Cash on Cash Return
var cocReturn = 0;
if (totalCashInvested > 0) {
cocReturn = (annualCashFlow / totalCashInvested) * 100;
}
// 8. Update UI
// Helper for currency formatting
var formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
minimumFractionDigits: 0,
maximumFractionDigits: 0,
});
document.getElementById('resTotalCash').innerText = formatter.format(totalCashInvested);
document.getElementById('resMortgage').innerText = formatter.format(monthlyMortgage);
document.getElementById('resExpenses').innerText = formatter.format(totalMonthlyOperatingExpenses);
document.getElementById('resNOI').innerText = formatter.format(annualNOI);
// Handle coloring for Cash Flow
var cfEl = document.getElementById('resMonthlyCashflow');
var acfEl = document.getElementById('resAnnualCashflow');
cfEl.innerText = formatter.format(monthlyCashFlow);
acfEl.innerText = formatter.format(annualCashFlow);
if(monthlyCashFlow < 0) {
cfEl.style.color = "#c0392b";
acfEl.style.color = "#c0392b";
} else {
cfEl.style.color = "#27ae60";
acfEl.style.color = "#27ae60";
}
document.getElementById('resCoC').innerText = cocReturn.toFixed(2) + "%";
}
// Run once on load to populate defaults
window.onload = function() {
calculateROI();
};