← Back to the map

How this map works

You enter a yearly salary; every area colours by the gap between what that salary could afford and what homes there cost — using the full monthly payment, not just the mortgage. Everything runs from free public federal and Zillow data, recomputed in your browser as you move the sliders.

The computation

Your monthly housing budget is salary / 12 × share-of-income (default 28%, the conventional front-end ratio). The largest affordable home price P is the one whose complete payment fits that budget:

P = (budget − insurance/12) / ( (1−d)·M + tax/12 + (1−d)·PMI/12 )

d    down payment fraction        (slider, default 10%)
M    mortgage constant from the 30-year rate (slider, default: latest
     Freddie Mac weekly average, from the archived FRED series)
tax  effective property tax rate  (per area, from ACS)
PMI  0.8%/yr when the down payment is under 20%, else zero

The verdict compares P against the area's home value and shows the signed dollar gap — "short by $80,000" and "short by $8,000" are different answers, and the colour scale reflects that. Rent mode is simpler: market rent against the default 30% of income.

Insurance is subtracted off the top because it is a dollar amount, not a rate — which is why, at low incomes in high-premium areas, insurance alone can exhaust the budget before any mortgage payment at all. The map says so explicitly when it happens.

What the verdict means — read this part

"Typical homes" prices you against the middle of each market (Zillow's 35th–65th percentile index). An entry-level buyer shops below the middle, so that view is systematically pessimistic for first purchases. The "Starter homes" toggle switches to the bottom-tier index (5th–35th percentile) — the entry-level segment of each market. Neither is a quote for any particular house.

Where each number comes from

NumberSourceNotes
Home valuesZillow ZHVI (mid & bottom tier) Monthly, by ZIP. History is restated every release.
Market rentZillow ZORI Asking rents on new leases; covers ~⅓ of ZIP areas.
Mortgage rateFreddie Mac PMMS, via FRED Weekly national average; adjustable.
Property tax rateACS: taxes paid ÷ home value Both sides self-reported, so internally consistent.
InsuranceACS B25141 What mortgaged owners actually paid — not quote-engine estimates, which disagree by 4× for the same state.
Context panelACS housing tables Vacancy, tenure, year built, commute, income, rent paid.
Boundaries & namesCensus TIGER, HRSA crosswalk ZIP ≠ ZCTA; a federal crosswalk joins them.

Every number in the detail panel carries a vintage badge — the year or month the data describes, which is not the date it was downloaded. Censored values are flagged: ACS caps insurance at "$4,000 or more", so figures shown as $4,000 are floors, not estimates, precisely in the most expensive markets.

Honest limitations

What this map deliberately excludes

No demographic data and no crime data, in any form. Characterising neighbourhoods by racial or ethnic composition is steering under the Fair Housing Act, and neighbourhood-level crime data is both legally fraught and statistically unsound — major listing sites removed it in 2021 for these reasons. Every table in this pipeline is a housing-unit or household-economics table.

Reproducibility

Every source file is archived with a SHA-256 manifest before anything reads it; transforms run only from the archive and refuse inputs that fail verification; the build is provably deterministic from the archive alone. The pipeline, the checks, and this page are all in the source repository.

Data: Zillow Research (free for non-commercial use, with attribution) · U.S. Census Bureau ACS & TIGER/Line · Freddie Mac via FRED · HRSA/UDS · Map rendering: MapLibre GL JS (BSD-3) · Type: Noto Sans (OFL).