A transparent explanation of every number on this site — where it comes from and how it’s combined.
Data sources
Everything on this site is built from publicly available, citable sources. We do not collect proprietary data.
| Source | What it provides | Refresh |
|---|---|---|
| Zillow ZHVI (Home Value Index) | Monthly median home value by city, going back to 2000 | Monthly |
| Zillow ZORI (Observed Rent Index) | Monthly median rent by city, going back to 2015 | Monthly |
| US Census place population | 2020 Decennial Census + annual Vintage population estimates | Annual |
| US Census TIGER geography | Place / county / state boundaries and identifiers | Annual |
| State DOT, Emergency Management portals | Linked from state hub pages — not used for scoring | Continuous |
Each city profile cites the date of its most recent data point. When a source publishes a revision, the next build picks it up.
The momentum score (0–100)
The composite momentum score is a weighted average of six normalized signals. Higher = more positive direction. It is not a recommendation — it is a measurement of recent direction.
+ 0.22 × home_5yr_CAGR
+ 0.10 × home_10yr_CAGR
+ 0.18 × distance_from_5yr_peak
+ 0.16 × population_CAGR_2020_to_2024 (if available)
+ 0.12 × rent_yoy (if available)
weights re-normalize when population or rent signals are missing.
How each input is normalized
Each raw signal is mapped to a 0–100 scale using piecewise-linear breakpoints. The composite is then a weighted average.
| Signal | Maps to score 90+ | Maps to score 10– |
|---|---|---|
| 1-year home value change | +10% | −10% |
| 5-year home value CAGR | +10% | −5% |
| 10-year home value CAGR | +12% | 0% |
| Distance from 5-year peak | 0% off (at peak) | −30% off peak |
| Population CAGR (2020–24) | +3% / yr | −2% / yr |
| Rent year-over-year | +6% | −5% |
Classification thresholds
| Score range | Label | Plain-English read |
|---|---|---|
| 78–100 | Hot | Multiple signals pointing up; tight inventory, limited buyer leverage. |
| 62–77 | Rising | Healthy market; prices supported by underlying demand. |
| 48–61 | Stable | Sideways; local fit matters more than market timing. |
| 33–47 | Cooling | Prices off recent highs; buyers gaining negotiating room. |
| 0–32 | Declining | Well off recent highs; resale liquidity reduced. |
What’s included, what’s excluded
A city appears on this site only if:
- It exists in the US Census place spine (incorporated place or Census Designated Place with population ≥ 3,500 in the 2020 Census), AND
- Zillow ZHVI tracks it with at least 5 years of monthly data, AND
- Its 2024 population estimate is at least 5,000.
About 5,400 US cities meet all three criteria — roughly the cities for which a momentum score is statistically meaningful.
What’s not measured (yet)
- Schools (NCES Common Core of Data is on the roadmap)
- Crime (FBI UCR is on the roadmap)
- Local job market (BLS LAUS is on the roadmap)
- Income and education (US Census ACS, pending API key)
- Climate and natural hazard data (FEMA NFHL, NOAA — on the roadmap)
- School zoning, neighborhood-level data (much harder to ingest consistently)
None of these are factored into the current momentum score.
Limitations to keep in mind
- City-level data smooths over neighborhood differences. Two homes in the same city can have very different fundamentals.
- The momentum score is backward-looking. Recent direction does not predict future direction.
- “Hot” is not the same as “good investment.” Hot markets often have less buyer leverage.
- “Declining” is not the same as “bad investment.” Some declining markets are at the start of a longer slide; others are near a bottom.
- The composite score is a summary. Individual signals on each city page tell a more nuanced story.
Reproducibility
The full build pipeline is open Python. Anyone with the source data files can rebuild this site end-to-end on a laptop in about three minutes.