CA Residential Structure Panel

Annual residential housing stock estimates for California Census tracts (2010–2024), built from Overture Maps buildings, Census BPS permits, and CAL FIRE demolition data with bootstrap uncertainty quantification.

Source Code Data (v1.0 Release) Methodology (PDF)

A general-purpose annual panel of residential housing stock for California Census tracts, 2010–2024. Useful as a denominator for any tract-level housing analysis — turnover rates, wildfire exposure, supply growth — where HUD-USPS data access is unavailable and ACS rolling 5-year averages are too coarse.


The problem: No public dataset provides annual, tract-level residential structure counts for California. HUD-USPS vacancy data requires institutional registration. ACS B25001 is a 5-year rolling average. Owner-occupied stock (B25003) is endogenous to many research questions.

The approach: We combine three open data sources:

  1. Overture Maps (2024) — 15.6M California building footprints, spatially joined to 2010 Census tracts to establish a 2024 anchor count per tract
  2. Census BPS (2010–2024) — Annual county permits converted from units to structure footprints using PI-confirmed ratios (1-unit: 1.0, 5+ unit: 15.0), used to hind-cast the anchor backward in time
  3. CAL FIRE DINS (2013–2022) — 50,483 destroyed residential structures across 194 county-year events, correcting the hind-cast for wildfire demolitions

The hind-cast runs a backward cumulative sum from the 2024 anchor; each county’s annual total is downscaled to tracts using stable within-county Overture shares.

The bootstrap: Overture classifies only 31% of California buildings by subtype; the remaining 69% are unclassified. A 500-iteration bootstrap over the null-subtype absorption fraction — calibrated against ACS B25001 external validation — produces tract-level P5/P50/P95 uncertainty intervals. The bootstrap P50 tracks ACS housing units at ~82% (consistent with the unit/structure distinction) and dramatically outperforms the labeled-only point estimate in wildfire-affected counties (Butte: bootstrap 87,850 vs. ACS 98,743 pre-Camp Fire vs. point estimate 2,016).

Validation: An ACS B25001 challenger panel (2010–2024, with 2020→2010 tract crosswalk for 2021+ vintages) shows negative BPS–ACS Spearman rank correlation at the tract level (Overture classifies more buildings in sparse rural areas than in dense urban areas — the opposite of actual housing density). The recommended denominator strategy is ACS direct for 2010–2020, bootstrap P50 for 2021–2024.


Outputs (v1.0 release):

File Rows Description
tract_structure_panel.parquet 120,855 Point-estimate hind-cast (geoid × year)
tract_structure_panel_bootstrap.parquet 120,855 Bootstrap P5/P50/P95/IQR
tract_structure_panel_acs.parquet 154,590 ACS B25001 challenger panel
county_permits_ca_2010_2024.parquet 870 County-level BPS permits
tract_residential_counts_2024.parquet 8,057 Overture 2024 anchor per tract

Tech: Python, geopandas, pandas, numpy, scipy, pyarrow, Overture Maps CLI, Census API