Cap rate is the number institutional real-estate buyers actually speak: the unlevered yield of a property — net operating income divided by what you pay, before any mortgage. This page computes an implied cap rate for every scored ZIP from modeled NOI, ranks the markets, and shows how cap rate is just DSCR with the financing stripped out. It is a screen, not an appraisal.
Every number here is generated by
scripts/compute_cap_rate.py from zip_render.json
— Zillow ZHVI / ACS home values, a blended best-rent series, NAIC 2022
DP-3 landlord insurance and Tax Foundation per-state property tax. The NOI
is the canonical one — the exact op-cost model the
DSCR v3 recompute uses.
Cap rate asks one question: if you paid cash for this asset, what yield does it throw off? It is unlevered by definition — no mortgage, no loan-to-value, no debt service. Just NOI over price.
Effective rent
(best_rent × 12 × 0.89, an 11% vacancy / credit-loss
haircut) minus three real operating costs: Tax Foundation per-state
effective property tax, NAIC 2022 DP-3 landlord insurance, and a
labeled 0.50% maintenance reserve assumption. This is
the same NOI the DSCR v3 model uses — cap rate and DSCR share a
numerator.
No mortgage enters the cap rate. That is the point: it isolates the asset's return from the buyer's financing choice. Two investors with different loans see the same cap rate on the same building; they see different DSCRs. Cap rate is the property; DSCR is the deal.
Modeled cap rate across every scored ZIP, in 1-point buckets. The bulk of the country clusters in a low single-digit band — modern home values have outrun rents — with a long, thin high-cap-rate tail of distressed and rural markets.
Metro-scale counties (≥8 scored ZIPs, >150k people) ranked by median cap rate. Fat cap rates concentrate in low-price markets: when home values are cheap relative to rent, the unlevered yield is high — and so, usually, is the perceived risk.
The other tail: expensive coastal and resort metros where home prices are driven by owner-occupier and second-home demand, not rent. A cap rate near zero — or negative — means modeled NOI barely covers, or fails to cover, the carrying costs.
The two metrics are the same NOI seen through two different denominators.
Answers: what does the property yield, full stop. Independent of rates, of LTV, of who is buying. The number a seller and an all-cash buyer agree on.
Answers: does the rent cover this loan. Same NOI on top; the denominator is debt service instead of price. When mortgage rates rise, DSCR falls while cap rate does not move — that gap is the financing drag.
Mechanically, for a fixed loan,
DSCR is just cap rate scaled: dscr = cap_rate ÷
(LTV × ann_factor). So a market's cap-rate rank and its DSCR rank
move together — cap rate tells you which markets yield; DSCR
tells you whether today's debt lets you keep that yield. Hunt with cap rate;
underwrite with DSCR.
Cap rate is computed by
scripts/compute_cap_rate.py over the
— ZIPs in zip_render.json that
carry both a home value and a rent. Home value is Zillow ZHVI where
available, ACS median home value otherwise. Output is the new file
data/cap_rate.json — this script writes nothing into
zip_master.json or the heatmap.