Calculate the Capitalization Rate for your real estate investments.
$
$
$
$
$
%
%
Please enter valid numerical values.
Analysis Results
Cap Rate
0.00%
Net Operating Income (NOI)
$0
Gross Annual Income
$0
Total Annual Expenses
$0
What is Capitalization Rate (Cap Rate)?
The Capitalization Rate, or Cap Rate, is one of the most fundamental metrics in real estate investing. It is used to estimate the potential return on an investment property, assuming the property is purchased entirely with cash (without a mortgage).
Essentially, the Cap Rate tells you how much income the property generates annually relative to its purchase price. A higher Cap Rate generally indicates a higher potential return, but often comes with higher risk or a less desirable location.
How to Calculate Cap Rate
The formula for calculating Cap Rate is straightforward:
Cap Rate = (Net Operating Income / Current Market Value) × 100
Where Net Operating Income (NOI) is your total rental income minus all operating expenses (taxes, insurance, maintenance, vacancy, management) but excluding mortgage payments.
What is a Good Cap Rate?
"Good" is subjective and depends on the market and your investment strategy.
4% – 5%: Typical for high-demand, low-risk areas (Class A properties in major cities). Stability is high, but cash flow is lower.
6% – 8%: A balanced range often sought by investors looking for a mix of stability and decent cash flow.
8% – 10%+: Often found in riskier neighborhoods or rural areas. While the return is higher, the risk of vacancy or repair costs may also be higher.
Why Use This Calculator?
Before making an offer on a rental property, you need to strip away emotional bias and look at the raw numbers. This calculator helps you determine if a property's income justifies its asking price. By adjusting the vacancy rate and management fees, you can stress-test your investment to see how it performs under different scenarios.
function calculateCapRate() {
// 1. Get Input Values
var propertyPrice = parseFloat(document.getElementById("propertyPrice").value);
var monthlyRent = parseFloat(document.getElementById("monthlyRent").value);
var annualTax = parseFloat(document.getElementById("annualTax").value);
var annualInsurance = parseFloat(document.getElementById("annualInsurance").value);
var annualMaintenance = parseFloat(document.getElementById("annualMaintenance").value);
var vacancyRate = parseFloat(document.getElementById("vacancyRate").value);
var managementFee = parseFloat(document.getElementById("managementFee").value);
// Default values for empty fields to avoid NaN errors on optional fields
if (isNaN(vacancyRate)) vacancyRate = 0;
if (isNaN(managementFee)) managementFee = 0;
if (isNaN(annualTax)) annualTax = 0;
if (isNaN(annualInsurance)) annualInsurance = 0;
if (isNaN(annualMaintenance)) annualMaintenance = 0;
// Validation for critical fields
var errorDisplay = document.getElementById("errorDisplay");
if (isNaN(propertyPrice) || isNaN(monthlyRent) || propertyPrice <= 0) {
errorDisplay.style.display = "block";
document.getElementById("resultsSection").style.display = "none";
return;
} else {
errorDisplay.style.display = "none";
}
// 2. Perform Calculations
// Gross Potential Income (Annual)
var grossAnnualIncome = monthlyRent * 12;
// Vacancy Loss
var vacancyLoss = grossAnnualIncome * (vacancyRate / 100);
// Effective Gross Income
var effectiveGrossIncome = grossAnnualIncome – vacancyLoss;
// Management Fee (calculated on collected income, usually effective gross)
var managementCost = effectiveGrossIncome * (managementFee / 100);
// Total Operating Expenses
var totalExpenses = annualTax + annualInsurance + annualMaintenance + managementCost;
// Net Operating Income (NOI)
var noi = effectiveGrossIncome – totalExpenses;
// Cap Rate Calculation
var capRate = (noi / propertyPrice) * 100;
// 3. Update the DOM
// Formatter for currency
var formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
minimumFractionDigits: 0,
maximumFractionDigits: 0,
});
document.getElementById("resultCapRate").innerText = capRate.toFixed(2) + "%";
document.getElementById("resultNOI").innerText = formatter.format(noi);
document.getElementById("resultGrossIncome").innerText = formatter.format(grossAnnualIncome);
document.getElementById("resultExpenses").innerText = formatter.format(totalExpenses);
// Show results
document.getElementById("resultsSection").style.display = "block";
}