Calculate Cash Flow, Cap Rate, and Cash on Cash Return
Purchase Details
Income & Expenses
Please enter valid positive numbers for all fields.
Cash on Cash Return
0.00%
Cap Rate
0.00%
Monthly Cash Flow
$0.00
Net Operating Income (Mo)
$0.00
Total Cash Needed
$0.00
Monthly Mortgage
$0.00
Understanding Rental Property ROI
Investing in real estate is one of the most reliable ways to build wealth, but simply buying a property doesn't guarantee a profit. To succeed, investors must analyze the numbers rigorously. This Rental Property ROI Calculator helps you evaluate the potential profitability of an investment property by calculating key metrics like Cash on Cash Return, Cap Rate, and Monthly Cash Flow.
What is Cash on Cash Return?
Cash on Cash (CoC) Return is arguably the most important metric for rental property investors. It measures the annual return you earn on the actual cash you invested, rather than the total price of the property.
Formula: (Annual Cash Flow / Total Cash Invested) × 100
Why it matters: It tells you how hard your money is working. If you put $50,000 into a deal and get $5,000 back in profit per year, your CoC return is 10%. This allows you to compare real estate returns directly against other investments like stocks or bonds.
Understanding Cap Rate (Capitalization Rate)
The Cap Rate measures the natural rate of return of the property assuming you paid all cash. It helps you compare the profitability of similar properties regardless of how they are financed.
Formula: (Net Operating Income / Purchase Price) × 100
Usage: Use Cap Rate to compare the value of the building itself. A higher cap rate generally implies a better return but may come with higher risk (e.g., a property in a declining neighborhood).
Net Operating Income (NOI) vs. Cash Flow
It is crucial to distinguish between NOI and Cash Flow:
NOI: Total Income minus Operating Expenses (Vacancy, Taxes, Insurance, Maintenance). NOI excludes mortgage payments.
Cash Flow: NOI minus Mortgage Payments (Principal and Interest). This is the actual money that hits your bank account every month.
The Importance of Vacancy and Maintenance
Novice investors often overestimate profits by forgetting to account for "silent" costs. This calculator includes inputs for Vacancy Rate (periods where the property sits empty) and Maintenance (setting aside a percentage of rent for future repairs). A standard conservative estimate is 5-10% for each, depending on the age and location of the property.
function calculateROI() {
// Get Input Values
var purchasePrice = parseFloat(document.getElementById('purchasePrice').value);
var downPaymentPercent = parseFloat(document.getElementById('downPayment').value);
var closingCosts = parseFloat(document.getElementById('closingCosts').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 hoaFee = parseFloat(document.getElementById('hoaFee').value);
var maintenancePercent = parseFloat(document.getElementById('maintenance').value);
var vacancyPercent = parseFloat(document.getElementById('vacancy').value);
// Validation
if (isNaN(purchasePrice) || isNaN(monthlyRent) || isNaN(interestRate) || purchasePrice 0) {
cashOnCash = (annualCashFlow / totalCashInvested) * 100;
}
// 5. Display Results
document.getElementById('resCoc').innerHTML = cashOnCash.toFixed(2) + '%';
document.getElementById('resCap').innerHTML = capRate.toFixed(2) + '%';
document.getElementById('resCashFlow').innerHTML = '$' + monthlyCashFlow.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resNOI').innerHTML = '$' + monthlyNOI.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resCashNeeded').innerHTML = '$' + totalCashInvested.toLocaleString('en-US', {minimumFractionDigits: 0, maximumFractionDigits: 0});
document.getElementById('resMortgage').innerHTML = '$' + monthlyMortgage.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
// Show Results container
document.getElementById('roiResults').style.display = 'block';
}