Rental Property ROI Calculator: Cap Rate & Cash Flow Analysis
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
line-height: 1.6;
color: #333;
max-width: 800px;
margin: 0 auto;
padding: 20px;
}
.calculator-wrapper {
background: #f9f9f9;
border: 1px solid #e0e0e0;
border-radius: 8px;
padding: 25px;
margin-bottom: 40px;
box-shadow: 0 4px 6px rgba(0,0,0,0.05);
}
.calc-header {
text-align: center;
margin-bottom: 25px;
color: #2c3e50;
}
.input-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
margin-bottom: 20px;
}
@media (max-width: 600px) {
.input-grid {
grid-template-columns: 1fr;
}
}
.input-group {
display: flex;
flex-direction: column;
}
.input-group label {
font-weight: 600;
margin-bottom: 5px;
font-size: 0.9em;
color: #555;
}
.input-group input {
padding: 10px;
border: 1px solid #ccc;
border-radius: 4px;
font-size: 16px;
}
.input-group input:focus {
border-color: #3498db;
outline: none;
}
.section-title {
grid-column: 1 / -1;
font-weight: bold;
color: #2c3e50;
border-bottom: 1px solid #ddd;
padding-bottom: 5px;
margin-top: 10px;
}
.btn-calculate {
background-color: #27ae60;
color: white;
border: none;
padding: 15px 30px;
font-size: 18px;
font-weight: bold;
border-radius: 5px;
cursor: pointer;
width: 100%;
transition: background-color 0.3s;
}
.btn-calculate:hover {
background-color: #219150;
}
.results-container {
margin-top: 25px;
background: #fff;
border: 1px solid #ddd;
border-radius: 5px;
padding: 20px;
display: none;
}
.result-row {
display: flex;
justify-content: space-between;
padding: 10px 0;
border-bottom: 1px solid #eee;
}
.result-row:last-child {
border-bottom: none;
}
.result-label {
font-weight: 500;
color: #555;
}
.result-value {
font-weight: bold;
color: #2c3e50;
}
.highlight-result {
background-color: #f0fdf4;
padding: 15px;
border-radius: 5px;
margin-bottom: 15px;
border: 1px solid #bbf7d0;
}
.highlight-result .result-value {
color: #166534;
font-size: 1.2em;
}
.content-article h2 {
color: #2c3e50;
margin-top: 30px;
}
.content-article h3 {
color: #34495e;
margin-top: 20px;
}
.content-article ul {
margin-bottom: 20px;
}
.content-article li {
margin-bottom: 10px;
}
.error-msg {
color: #e74c3c;
text-align: center;
margin-top: 10px;
display: none;
font-weight: bold;
}
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [{
"@type": "Question",
"name": "What is Cap Rate in real estate?",
"acceptedAnswer": {
"@type": "Answer",
"text": "The Capitalization Rate (Cap Rate) is a metric used to evaluate the profitability of an investment property. It is calculated by dividing the Net Operating Income (NOI) by the current market value or purchase price of the property."
}
}, {
"@type": "Question",
"name": "How is Cash on Cash Return calculated?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Cash on Cash Return measures the annual pre-tax cash flow relative to the total amount of cash invested. The formula is Annual Pre-Tax Cash Flow divided by Total Cash Invested."
}
}, {
"@type": "Question",
"name": "What is a good ROI for a rental property?",
"acceptedAnswer": {
"@type": "Answer",
"text": "A good ROI typically depends on the market and strategy, but many investors aim for a Cash on Cash return of 8-12% and a Cap Rate of 5-10%."
}
}]
}
Rental Property ROI Calculator
Purchase Details
Loan Details
Income & Expenses
Please enter valid positive numbers.
Cash on Cash Return:0.00%
Cap Rate:0.00%
Monthly Figures
Gross Monthly Income:$0.00
Operating Expenses (excl. mortgage):-$0.00
Net Operating Income (NOI):$0.00
Mortgage Payment (P&I):-$0.00
Monthly Cash Flow:$0.00
Annual Summary
Annual NOI:$0.00
Annual Cash Flow:$0.00
Total Cash Invested:$0.00
Understanding Rental Property ROI
Investing in rental real estate can be a lucrative way to build wealth, but analyzing a deal correctly is critical to success. This Rental Property ROI Calculator helps investors determine if a specific property is a viable investment by calculating key performance metrics like Cash on Cash Return, Cap Rate, and Monthly Cash Flow.
Key Metrics Explained
1. Cash on Cash Return
This is arguably the most important metric for rental property investors. It measures the annual return on the actual cash you invested, rather than the total purchase price. This is particularly useful when using leverage (a mortgage).
Formula: Annual Pre-Tax Cash Flow / Total Cash Invested
For example, if you invest $50,000 cash (down payment + closing costs + repairs) and the property generates $5,000 in net cash flow per year, your Cash on Cash return is 10%.
2. Capitalization Rate (Cap Rate)
The Cap Rate measures the natural rate of return of the property assuming you paid all cash. It allows you to compare properties regardless of financing.
Formula: Net Operating Income (NOI) / Purchase Price
Net Operating Income is your total revenue minus operating expenses (taxes, insurance, maintenance, etc.), excluding mortgage payments.
3. Net Operating Income (NOI) vs. Cash Flow
NOI: Indicates the profitability of the property itself. It strips away the financing structure.
Cash Flow: What actually hits your bank account every month. This is NOI minus your debt service (mortgage payments). Positive cash flow is essential for long-term sustainability.
How to Use This Calculator
Enter Purchase Details: Input the price, your down payment, and any upfront costs like closing fees or immediate repairs.
Input Loan Terms: Enter your interest rate and loan term (usually 30 years).
Estimate Income & Expenses: Be realistic. Don't forget to account for vacancy (time without a tenant) and maintenance (saving for future repairs).
Analyze: Look at the "Cash on Cash Return" to see how hard your money is working, and ensure the "Monthly Cash Flow" is positive.
What is a "Good" ROI?
While targets vary by investor and market conditions, many real estate investors look for:
Cash Flow: At least $100-$200 per door, per month.
Cash on Cash Return: 8% to 12% or higher.
Cap Rate: 5% to 8% in stable markets, higher in riskier areas.
Always verify your estimates with local property managers or real estate agents to ensure your numbers for rent, vacancy, and maintenance are accurate for the specific neighborhood.
function calculateROI() {
// 1. Get Inputs
var propPrice = parseFloat(document.getElementById('propPrice').value);
var downPayment = parseFloat(document.getElementById('downPayment').value);
var closingCosts = parseFloat(document.getElementById('closingCosts').value);
var rehabCosts = parseFloat(document.getElementById('rehabCosts').value);
var interestRate = parseFloat(document.getElementById('interestRate').value);
var loanTerm = parseFloat(document.getElementById('loanTerm').value);
var monthlyRent = parseFloat(document.getElementById('monthlyRent').value);
var otherIncome = parseFloat(document.getElementById('otherIncome').value);
var propTax = parseFloat(document.getElementById('propTax').value);
var propInsurance = parseFloat(document.getElementById('propInsurance').value);
var hoaFees = parseFloat(document.getElementById('hoaFees').value);
var maintenancePct = parseFloat(document.getElementById('maintenance').value);
var vacancyPct = parseFloat(document.getElementById('vacancy').value);
// 2. Validate Inputs
if (isNaN(propPrice) || isNaN(downPayment) || isNaN(interestRate) || isNaN(loanTerm) || isNaN(monthlyRent)) {
document.getElementById('errorMsg').style.display = 'block';
document.getElementById('results').style.display = 'none';
return;
} else {
document.getElementById('errorMsg').style.display = 'none';
}
// 3. Loan Calculations
var loanAmount = propPrice – downPayment;
var monthlyRate = (interestRate / 100) / 12;
var numberOfPayments = loanTerm * 12;
// Mortgage Payment Formula: M = P [ i(1 + i)^n ] / [ (1 + i)^n – 1 ]
var monthlyMortgage = 0;
if (interestRate > 0 && loanAmount > 0) {
monthlyMortgage = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, numberOfPayments)) / (Math.pow(1 + monthlyRate, numberOfPayments) – 1);
}
// 4. Income Calculations
var totalMonthlyIncome = monthlyRent + otherIncome;
var grossAnnualIncome = totalMonthlyIncome * 12;
// 5. Expense Calculations
var monthlyVacancyCost = monthlyRent * (vacancyPct / 100);
var monthlyMaintenanceCost = monthlyRent * (maintenancePct / 100);
var monthlyPropTax = propTax / 12;
var monthlyInsurance = propInsurance / 12;
// Operating Expenses (Excluding Mortgage)
var totalMonthlyOpExpenses = monthlyPropTax + monthlyInsurance + hoaFees + monthlyVacancyCost + monthlyMaintenanceCost;
var totalAnnualOpExpenses = totalMonthlyOpExpenses * 12;
// 6. NOI & Cash Flow
var monthlyNOI = totalMonthlyIncome – totalMonthlyOpExpenses;
var annualNOI = monthlyNOI * 12;
var monthlyCashFlow = monthlyNOI – monthlyMortgage;
var annualCashFlow = monthlyCashFlow * 12;
// 7. Returns Metrics
var totalCashInvested = downPayment + closingCosts + rehabCosts;
// Cap Rate = Annual NOI / Purchase Price
var capRate = (annualNOI / propPrice) * 100;
// Cash on Cash = Annual Pre-Tax Cash Flow / Total Cash Invested
var cashOnCash = 0;
if (totalCashInvested > 0) {
cashOnCash = (annualCashFlow / totalCashInvested) * 100;
}
// 8. Display Results
document.getElementById('resCoc').innerText = cashOnCash.toFixed(2) + "%";
document.getElementById('resCapRate').innerText = capRate.toFixed(2) + "%";
document.getElementById('resGrossIncome').innerText = "$" + totalMonthlyIncome.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resOpExpenses').innerText = "-$" + totalMonthlyOpExpenses.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resNOI').innerText = "$" + monthlyNOI.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resMortgage').innerText = "-$" + monthlyMortgage.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resCashFlow').innerText = "$" + monthlyCashFlow.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
// Color code cash flow
if(monthlyCashFlow >= 0) {
document.getElementById('resCashFlow').style.color = '#166534';
} else {
document.getElementById('resCashFlow').style.color = '#e74c3c';
}
document.getElementById('resAnnualNOI').innerText = "$" + annualNOI.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resAnnualCashFlow').innerText = "$" + annualCashFlow.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resTotalInvested').innerText = "$" + totalCashInvested.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('results').style.display = 'block';
}