Determine the potential return on your investment property instantly.
Effective Gross Income:$0.00
Net Operating Income (NOI):$0.00
Capitalization Rate:0.00%
Understanding the Cap Rate Calculator
For real estate investors, the Capitalization Rate (or Cap Rate) is one of the most fundamental metrics used to evaluate the profitability of an investment property. Unlike cash-on-cash return, the cap rate focuses solely on the property's ability to generate revenue relative to its purchase price, ignoring financing methods.
This calculator helps you determine the intrinsic value of a deal by computing the Net Operating Income (NOI) and dividing it by the property's current market value or purchase price.
The Formula Used
Our calculator uses the standard commercial real estate formula:
Cap Rate = (Net Operating Income / Current Market Value) × 100
Where Net Operating Income (NOI) is calculated as:
Gross Rental Income: The total income if the property was 100% occupied.
Less Vacancy: An allowance for periods when units sit empty (typically 5-10%).
Less Operating Expenses: Costs such as property management, taxes, insurance, utilities, and maintenance reserves. (Note: Mortgage payments are not included in NOI).
What is a "Good" Cap Rate?
There is no single answer to what constitutes a good cap rate, as it varies heavily by location and asset class. However, generally speaking:
4% – 5%: Common in "Class A" properties in high-demand, low-risk areas (e.g., downtown New York or San Francisco). Lower risk implies lower returns.
6% – 8%: Often seen in suburban areas or stabilized "Class B" properties. This is a balanced target for many investors.
8% – 12%+: Typical for higher-risk assets, older buildings ("Class C"), or rural areas. These offer higher potential returns to offset the increased risk of vacancy or repairs.
Why Use This Tool?
Using a Cap Rate Calculator allows you to compare apples to apples. Whether you are looking at a duplex in Ohio or a commercial strip center in Florida, the cap rate strips away the mortgage terms and lets you see the raw yield of the asset. Use this tool to quickly filter out properties that do not meet your minimum yield requirements before digging deeper into due diligence.
function calculateCapRate() {
// 1. Get Input Values
var price = document.getElementById('propertyPrice').value;
var income = document.getElementById('grossIncome').value;
var vacancy = document.getElementById('vacancyRate').value;
var expenses = document.getElementById('operatingExpenses').value;
// 2. Validate Inputs
if (price === "" || income === "" || expenses === "") {
alert("Please fill in all required fields (Price, Income, and Expenses).");
return;
}
// Convert to floats
var priceNum = parseFloat(price);
var incomeNum = parseFloat(income);
var vacancyNum = parseFloat(vacancy);
var expensesNum = parseFloat(expenses);
// Handle NaN cases and basic validation
if (isNaN(priceNum) || priceNum <= 0) {
alert("Please enter a valid Property Price.");
return;
}
if (isNaN(incomeNum) || incomeNum < 0) {
alert("Please enter a valid Gross Income.");
return;
}
if (isNaN(expensesNum) || expensesNum < 0) {
alert("Please enter valid Operating Expenses.");
return;
}
if (isNaN(vacancyNum) || vacancyNum < 0) {
vacancyNum = 0; // Default to 0 if invalid
}
// 3. Perform Calculations
// Calculate Effective Gross Income (Gross – Vacancy Loss)
var vacancyLoss = incomeNum * (vacancyNum / 100);
var effectiveGrossIncome = incomeNum – vacancyLoss;
// Calculate Net Operating Income (EGI – Expenses)
var noi = effectiveGrossIncome – expensesNum;
// Calculate Cap Rate ((NOI / Price) * 100)
var capRate = (noi / priceNum) * 100;
// 4. Update the DOM with Results
// Format Currency
var formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
});
document.getElementById('displayEGI').innerText = formatter.format(effectiveGrossIncome);
document.getElementById('displayNOI').innerText = formatter.format(noi);
document.getElementById('displayCapRate').innerText = capRate.toFixed(2) + "%";
// Show results container
document.getElementById('resultsArea').style.display = 'block';
}