Methodology
How we calculate every number on this site
Every value comes from a public, named source. This page covers where each dataset comes from, how the seven-dimension UrbRank Score is computed, and how often we refresh.
Data sources
| Source | What it provides | Refresh |
|---|---|---|
American Community Survey (ACS) 5-Year US Census Bureau | Median household income, median rent, median home value, age, education, poverty, commute time | Annually, with a 1–2 year lag |
Consumer Price Index (CPI-U) Bureau of Labor Statistics | Metro-level price levels for food, housing, transportation, medical care, used to derive sub-category cost indices | Monthly, with retroactive revisions |
Regional Price Parities (RPP) Bureau of Economic Analysis | Cross-metro price level comparisons; baseline for cost_index calibration | Annually |
Climate Normals NOAA NCEI + Open-Meteo | 30-year temperature, precipitation, and sunshine averages | NCEI publishes new normals every decade; Open-Meteo runs on a daily archive |
Air Quality System (AQS) EPA | Annual PM2.5 → AQI conversion using EPA breakpoints | Annually |
Crime Data Explorer FBI | Violent and property crime rates per 100,000 residents | Annually, when the federal API is operating (currently degraded) |
Walk Score / Transit Score / Bike Score Walk Score (private, public methodology) | Daily-errand walkability, transit access, and bikeability | Periodically; we refresh on a quarterly cadence |
The composite cost-of-living index
Each city's cost_indexis a weighted average of five sub-indices (housing 33%, transportation 17%, groceries 13%, healthcare 8%, utilities 7%, with the remainder absorbed by other household costs). The baseline is the BLS metro CPI-U for the relevant region; city-level variation comes from BEA RPP and ACS rent/home value, applied with category-specific dampening factors so a city with 2× the rent doesn't end up with a 2× grocery index.
100 represents the US city average. A city at 85 is roughly 15% cheaper overall; a city at 130 is 30% more expensive.
The seven scoring dimensions
Each city is scored 0–100 against every other US city in our dataset on each dimension below.
| Dimension | Underlying signal | Direction |
|---|---|---|
| Affordability | Inverse percentile of composite cost-of-living index | Lower cost_index ranks higher |
| Safety | Inverse percentile of crime rate per 100k | Lower crime rate ranks higher |
| Climate | Composite of summer temp, winter temp, and precipitation | Penalizes hot summers, cold winters, and extreme rainfall asymmetrically |
| Walkability | Walk Score (0–100) | Used directly without further normalization |
| Job Market | Composite of unemployment rate and median household income | Lower unemployment + higher income ranks higher |
| Environment | Inverse percentile of air quality index (PM2.5) | Lower AQI ranks higher |
| Education | Percentile of share of adults 25+ with a bachelor's degree or higher | Higher share ranks higher |
Profile-weighted UrbRank Scores
The headline UrbRank Score is a weighted average of the seven dimensions. We publish five weighting profiles — general, family, retiree, remote worker, young professional — each emphasizing different dimensions. Retirees get more weight on healthcare and climate; young professionals on jobs and walkability; families on schools and safety.
Letter grades (A+ through F) map to score percentiles, not absolute thresholds, so they're always relative to the rest of the ranked set.
Honest gaps and fallbacks
- About half of cities are missing FBI crime data right now (the federal API has been intermittent). Those pages show a banner instead of pretending we have a number.
- For cities without a local NCEI weather station, climate falls back to the state average — coarser than direct station data, but still a real geographic signal. The state-fallback path currently fires for less than 1% of cities.
- BEA price parities are published at the metropolitan area level. We map cities to MSAs by name and proximity, which is close to perfect for primary cities and approximate for outer suburbs.
- Cities with fewer than 5 of the 7 dimensions populated are de-prioritized in the sitemap and excluded from search-engine indexing — we'd rather under-promise than serve a thin page.
Refresh cadence
Census ACS, BLS CPI-U, BEA RPP, EPA AQS, and FBI Crime are re-ingested annually as new vintages land. Walk Score and AQI run on a quarterly cadence. Pages are regenerated daily via Next.js ISR, so a corrected upstream value reaches the site within 24 hours of being re-ingested.
The vintage year is shown on every comparison so you can tell at a glance how recent the data is.