Do not include mortgage payments (interest or principal) in operating expenses.
Please enter valid numeric values for all fields.
Gross Annual Income:$0.00
Vacancy Loss:$0.00
Effective Gross Income:$0.00
Operating Expenses:$0.00
Net Operating Income (NOI):$0.00
Cap Rate:0.00%
Understanding Capitalization Rate in Real Estate
The Capitalization Rate, or "Cap Rate," is one of the most fundamental metrics used by real estate investors to evaluate the profitability and return potential of an investment property. Unlike metrics that factor in financing (like Cash-on-Cash return), the Cap Rate measures the property's natural ability to generate revenue based on its purchase price.
Formula: Cap Rate = (Net Operating Income / Property Asset Value) × 100
How to Use This Calculator
Our Cap Rate Calculator simplifies the process of analyzing a potential deal. Here is what you need to input:
Property Purchase Price: The total cost to acquire the property.
Gross Monthly Rental Income: The total rent you expect to collect each month if the property is fully occupied.
Vacancy Rate: An estimate of the percentage of time the property will sit empty. A standard conservative estimate is often 5-8%.
Annual Operating Expenses: All costs required to run the property, such as property taxes, insurance, management fees, repairs, and landscaping. Note: Do not include mortgage payments here; Cap Rate is a debt-free metric.
What is a "Good" Cap Rate?
There is no single number that defines a "good" Cap Rate, as it varies heavily by location and asset class. However, generally speaking:
4% – 6%: Common in high-demand, low-risk areas (like downtown San Francisco or NYC). These properties appreciate well but offer lower immediate cash flow.
6% – 8%: Often considered a healthy balance between risk and return for residential multifamily properties in stable suburban markets.
8% – 12%+: Higher returns are typically found in riskier areas, older properties requiring renovation, or smaller rural markets.
Why Net Operating Income (NOI) Matters
The core of the Cap Rate calculation is the Net Operating Income (NOI). NOI is calculated by taking your total income and subtracting all operating expenses. It represents the cash flow the property generates before any debt service (mortgage) or income taxes are paid. A higher NOI relative to the purchase price results in a higher Cap Rate, indicating a better return on investment assuming an all-cash purchase.
Limitations of Cap Rate
While useful, the Cap Rate should not be the only metric you use. It assumes you are paying cash for the property and ignores the benefits of leverage (loans). It also doesn't account for future property appreciation or tax benefits like depreciation. Always use Cap Rate in conjunction with other metrics like Internal Rate of Return (IRR) and Cash-on-Cash Return for a complete financial picture.
function calculateCapRate() {
// Get input elements
var priceInput = document.getElementById("propertyPrice");
var rentInput = document.getElementById("monthlyRent");
var vacancyInput = document.getElementById("vacancyRate");
var expenseInput = document.getElementById("annualExpenses");
var errorDiv = document.getElementById("errorDisplay");
var resultsDiv = document.getElementById("resultsContainer");
// Get values
var price = parseFloat(priceInput.value);
var monthlyRent = parseFloat(rentInput.value);
var vacancyRate = parseFloat(vacancyInput.value);
var expenses = parseFloat(expenseInput.value);
// Validation
if (isNaN(price) || isNaN(monthlyRent) || isNaN(expenses) || price <= 0) {
errorDiv.style.display = "block";
resultsDiv.style.display = "none";
return;
} else {
errorDiv.style.display = "none";
}
// Handle optional vacancy (default to 0 if empty or NaN)
if (isNaN(vacancyRate)) {
vacancyRate = 0;
}
// Calculations
var grossAnnualIncome = monthlyRent * 12;
var vacancyLoss = grossAnnualIncome * (vacancyRate / 100);
var effectiveGrossIncome = grossAnnualIncome – vacancyLoss;
var netOperatingIncome = effectiveGrossIncome – expenses;
var capRate = (netOperatingIncome / price) * 100;
// Display Results
document.getElementById("resGrossIncome").innerText = "$" + grossAnnualIncome.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("resVacancyLoss").innerText = "$" + vacancyLoss.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("resEffectiveIncome").innerText = "$" + effectiveGrossIncome.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("resExpenses").innerText = "$" + expenses.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("resNOI").innerText = "$" + netOperatingIncome.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("resCapRate").innerText = capRate.toFixed(2) + "%";
// Analysis Text
var analysisDiv = document.getElementById("capRateAnalysis");
var analysisText = "";
if (capRate < 4) {
analysisText = "Analysis: This Cap Rate is quite low. This usually indicates a very expensive market or high property value relative to rent. Ensure appreciation potential is high.";
} else if (capRate >= 4 && capRate < 8) {
analysisText = "Analysis: This is a standard Cap Rate for many stable markets. It suggests a balance between risk and return.";
} else if (capRate >= 8 && capRate < 12) {
analysisText = "Analysis: This indicates a strong return. Common in cash-flow focused markets, though verify if deferred maintenance is required.";
} else {
analysisText = "Analysis: This is an unusually high Cap Rate. While the return looks great, double-check your expense estimates and ensure the neighborhood is stable.";
}
if (netOperatingIncome < 0) {
analysisText = "Warning: Your expenses exceed your income, resulting in negative NOI. This property is losing money.";
document.getElementById("resCapRate").style.color = "#c0392b";
document.getElementById("resNOI").style.color = "#c0392b";
} else {
document.getElementById("resCapRate").style.color = "#27ae60";
document.getElementById("resNOI").style.color = "#27ae60";
}
analysisDiv.innerHTML = analysisText;
resultsDiv.style.display = "block";
}