Please enter valid positive numbers for all fields.
Gross Annual Income:
Vacancy Loss:
Effective Gross Income:
Net Operating Income (NOI):
Capitalization Rate:
Understanding the Cap Rate Calculator
The Capitalization Rate, or "Cap Rate," is one of the most fundamental metrics in commercial and residential real estate investing. Unlike other ROI metrics, the Cap Rate strictly measures the natural rate of return generated by the property itself, independent of how you choose to finance the purchase (debt vs. cash).
What is Cap Rate?
Cap Rate represents the ratio of a property's Net Operating Income (NOI) to its current market value or purchase price. It effectively tells an investor: "If I paid all cash for this property, what percentage return would I make annually?"
This metric allows investors to compare properties of different sizes, prices, and locations on an apples-to-apples basis by stripping away the variables of mortgage financing.
How to Calculate Cap Rate
The formula used in our calculator is straightforward but requires accurate data inputs:
Cap Rate = (Net Operating Income / Property Value) × 100%
To derive the Net Operating Income (NOI), you must follow these steps:
Calculate Gross Income: Multiply monthly rent by 12.
Deduct Vacancy: Subtract a percentage for expected vacancy (typically 5-10%).
Subtract Operating Expenses: Deduct property taxes, insurance, property management fees, maintenance, and utilities. Note: Do NOT include mortgage principal or interest payments in this calculation.
Example Calculation
Let's look at a realistic scenario used in our calculator logic:
Purchase Price: $250,000
Monthly Rent: $2,500 (Annual: $30,000)
Vacancy Rate: 5% ($1,500 loss)
Operating Expenses: $8,000/year
Step 1: Effective Gross Income = $30,000 – $1,500 = $28,500. Step 2: NOI = $28,500 – $8,000 = $20,500. Step 3: Cap Rate = ($20,500 / $250,000) = 8.2%.
What is a Good Cap Rate?
There is no single "good" Cap Rate, as it varies heavily by location and asset class. Generally:
4% – 6%: Considered "safe" but lower return. Common in high-demand urban areas (Tier 1 cities) with low risk.
6% – 8%: A balanced range often sought by residential investors in suburban markets.
8% – 10%+: High yield, but often accompanied by higher risks, such as older buildings, lower-income tenants, or declining neighborhoods.
Cap Rate vs. Cash-on-Cash Return
It is crucial to distinguish Cap Rate from Cash-on-Cash Return. While Cap Rate looks at the property's performance as a whole, Cash-on-Cash Return factors in your financing (mortgage). If you leverage a property with a loan, your Cash-on-Cash return might be higher or lower than the Cap Rate depending on the interest rate environment.
function calculateCapRate() {
// Get Input Values
var price = document.getElementById('propertyPrice').value;
var rent = document.getElementById('monthlyRent').value;
var vacancy = document.getElementById('vacancyRate').value;
var expenses = document.getElementById('annualExpenses').value;
// UI Elements
var resultBox = document.getElementById('results');
var errorMsg = document.getElementById('errorMessage');
// Validation: Ensure inputs are numbers and positive
if (price === "" || rent === "" || expenses === "" || isNaN(price) || isNaN(rent) || isNaN(expenses)) {
errorMsg.style.display = 'block';
resultBox.style.display = 'none';
return;
}
// Parse Floats
var priceNum = parseFloat(price);
var rentNum = parseFloat(rent);
var vacancyNum = parseFloat(vacancy) || 0; // Default to 0 if empty
var expensesNum = parseFloat(expenses);
if (priceNum <= 0 || rentNum 0) {
capRate = (noi / priceNum) * 100;
}
// Format Currency
var formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
});
// Update DOM
document.getElementById('grossAnnual').innerText = formatter.format(grossAnnual);
document.getElementById('vacancyLoss').innerText = "-" + formatter.format(vacancyLoss);
document.getElementById('effectiveGross').innerText = formatter.format(effectiveGross);
document.getElementById('noiResult').innerText = formatter.format(noi);
document.getElementById('capRateResult').innerText = capRate.toFixed(2) + "%";
// Show Results
resultBox.style.display = 'block';
}