Skip to content

🏘️ housing

U.S. housing market and affordability data: FHFA house price indexes, Census new-residential building permits, HUD Fair Market Rents, and HUD income limits. Each row is a place-and-period observation joinable to geo (states/counties/CBSAs), econ (income, employment), census (demographics), and sec (homebuilder / REIT filings by state). Price appreciation (FHFA), new supply (permits), rental cost (FMR), and affordability thresholds (income limits) together describe local housing-market conditions.

18 datasets · 108 columns

house_price_index · table

FHFA House Price Index observations from the master file (all index types, flavors, frequencies, and geographies in one file). One row per (hpi_type, hpi_flavor, frequency, level, place, period). Snapshot table: the whole file is re-fetched and the partition overwritten each run; history lives in Iceberg snapshots. State-level place_id is the USPS abbreviation (join to geo.states.state_abbr); MSA-level place_id is the 5-digit CBSA code (join to geo.cbsa.cbsa_fips). Source: fhfa.gov/hpi/download/monthly/hpi_master.csv.

Column Type Null Description
hpi_type string yes Index construction (e.g. 'traditional', 'expanded-data', 'distress-free')
hpi_flavor string yes Transaction basis ('purchase-only', 'all-transactions')
frequency string yes Frequency ('monthly' or 'quarterly')
level string yes Geography level ('USA or Census Division', 'State', 'MSA', 'Puerto Rico')
place_name string yes Human-readable place name
place_id string no Place identifier; USPS abbr for State level, 5-digit CBSA code for MSA level, division code (e.g. 'DV_ENC') / 'USA' for national level
data_year integer no Observation year (FHFA 'yr' column)
period integer no Period within year — month (1-12) or quarter (1-4) per frequency
index_nsa double yes Not-seasonally-adjusted index value (base 100)
index_sa double yes Seasonally-adjusted index value (base 100; null where unpublished)

building_permits · table

Census Building Permits Survey — new privately-owned residential construction authorized by building permits, county annual totals. One row per county per year with buildings/units/valuation for 1-unit, 2-unit, 3-4-unit, and 5-plus-unit structures (imputed totals). Leading indicator of housing supply. Joins to geo.counties via county_fips. Source: www2.census.gov/econ/bps/County/co{year}a.txt.

Column Type Null Description
state_fips string yes 2-digit state FIPS code (FK to geo.states)
county_fips string yes 5-digit county FIPS code (FK to geo.counties)
county_name string yes County name (as published by Census)
region_code integer yes Census region code
division_code integer yes Census division code
units_1unit_bldgs integer yes Number of 1-unit buildings permitted
units_1unit_units integer yes Number of 1-unit housing units permitted
units_1unit_value long yes Construction valuation of 1-unit permits (USD)
units_2unit_bldgs integer yes Number of 2-unit buildings permitted
units_2unit_units integer yes Number of 2-unit housing units permitted
units_2unit_value long yes Construction valuation of 2-unit permits (USD)
units_34unit_bldgs integer yes Number of 3-4-unit buildings permitted
units_34unit_units integer yes Number of 3-4-unit housing units permitted
units_34unit_value long yes Construction valuation of 3-4-unit permits (USD)
units_5plus_bldgs integer yes Number of 5-plus-unit buildings permitted
units_5plus_units integer yes Number of 5-plus-unit housing units permitted
units_5plus_value long yes Construction valuation of 5-plus-unit permits (USD)

fair_market_rents · table

HUD Fair Market Rents — 40th-percentile gross rent by bedroom size, used to set Section 8 voucher payment standards. County-grain (New England rows may be sub-county town areas, distinguished by hud_area_code). One fetch per (year, state) returns all counties for that state. Joins to geo.counties via county_fips. Requires HUD_TOKEN. Source: huduser.gov/hudapi/public/fmr/statedata/{state}.

Column Type Null Description
state_fips string yes 2-digit state FIPS code (FK to geo.states)
county_fips string yes 5-digit county FIPS code (FK to geo.counties)
hud_area_code string no HUD 10-digit area code (county FIPS + subdivision; PK component)
county_name string yes County name
town_name string yes Town/sub-county area name (New England); null elsewhere
metro_name string yes HUD metro FMR area name
smallarea_status string yes 1 = Small Area FMR (ZIP-based) in effect, 0 = metro-wide
fmr_percentile integer yes FMR percentile (40 standard, 50 for exception areas)
fmr_efficiency integer yes FMR for an efficiency (0-bedroom) unit (USD/month)
fmr_1br integer yes FMR for a 1-bedroom unit (USD/month)
fmr_2br integer yes FMR for a 2-bedroom unit (USD/month)
fmr_3br integer yes FMR for a 3-bedroom unit (USD/month)
fmr_4br integer yes FMR for a 4-bedroom unit (USD/month)

income_limits · table

HUD Income Limits — Area Median Income and the extremely-low (30%), very-low (50%), and low (80%) income thresholds that gate eligibility for HUD-assisted housing and LIHTC. State-grain (the HUD il/statedata endpoint returns one state summary; county/metro-level limits require per-county calls and are a documented follow-up). Values shown for a 4-person household (HUD's reference size). Requires HUD_TOKEN. Source: huduser.gov/hudapi/public/il/statedata/{state}.

Column Type Null Description
state_fips string yes 2-digit state FIPS code (FK to geo.states)
state_abbr string no USPS state abbreviation (convenience label; the geo FK is on state_fips)
median_income integer yes Area (state) median family income (USD/year)
il30_4person integer yes Extremely-low-income limit (30% AMI), 4-person household (USD/year)
il50_4person integer yes Very-low-income limit (50% AMI), 4-person household (USD/year)
il80_4person integer yes Low-income limit (80% AMI), 4-person household (USD/year)

income_limits_county · table

HUD Income Limits at county / HUD-metro-area grain — the same 30/50/80% AMI thresholds as income_limits but resolved per HUD area rather than state-wide. The streaming transformer fetches the state's HUD area list (fmr/listCounties/{state}) then il/data/{area} for each, so one fetch unit per (year, state) yields all its areas. hud_area_code matches fair_market_rents.hud_area_code (New England rows are sub-county towns); county_fips joins geo.counties. Values are the 4-person-household figures. Requires HUD_TOKEN. Source: huduser.gov/hudapi/public/il/data/{area}.

Column Type Null Description
state_fips string yes 2-digit state FIPS code (FK to geo.states)
county_fips string yes 5-digit county FIPS code (FK to geo.counties)
hud_area_code string no HUD 10-digit area code (county FIPS + subdivision; PK component)
county_name string yes County/area name (as published by HUD, e.g. 'Bristol County, RI')
metro_status string yes '1' = area is within a metro FMR area, '0' = non-metro
metro_name string yes CBSA/metro name (null for non-metro areas)
area_name string yes HUD income-limit area name
median_income integer yes Area median family income (USD/year)
il30_4person integer yes Extremely-low-income limit (30% AMI), 4-person household (USD/year)
il50_4person integer yes Very-low-income limit (50% AMI), 4-person household (USD/year)
il80_4person integer yes Low-income limit (80% AMI), 4-person household (USD/year)

hmda_loans · table

Home Mortgage Disclosure Act loan aggregates from the CFPB HMDA Data Browser aggregations API. One row per (year, state, action_taken, loan_purpose) with the loan count and total loan amount. Not loan-level microdata: the aggregations endpoint accepts at most two breakdown dimensions per request, so this table breaks HMDA out by loan action (originated / approved-not-accepted / denied / withdrawn / …) and loan purpose (home purchase / refinance / cash-out / …) — the mortgage-market funnel. Applicant race / ethnicity / sex breakdowns are available from the same endpoint as a documented follow-up. Joins to geo.state_ref via state_abbr and to sec homebuilder / mortgage-lender filings by state. Source: ffiec.cfpb.gov/v2/data-browser-api/view/aggregations.

Column Type Null Description
state_abbr string no USPS state abbreviation (FK to geo.state_ref.state_abbr)
action_taken string no HMDA action code (1 originated, 2 approved-not-accepted, 3 denied, 4 withdrawn, 5 closed-incomplete, 6 purchased, 7 preapproval-denied, 8 preapproval-approved-not-accepted)
action_label string yes Human-readable action_taken label
loan_purpose string no HMDA loan-purpose code (1 home purchase, 2 home improvement, 31 refinancing, 32 cash-out refinancing, 4 other, 5 not applicable)
loan_purpose_label string yes Human-readable loan_purpose label
loan_count long yes Number of loan records in this (action, purpose) cell
loan_amount_total double yes Sum of loan amounts (USD) across the cell

hmda_applicant_demographics · table

HMDA fair-lending breakdown from the CFPB HMDA Data Browser aggregations API — the applicant race / ethnicity / sex cut that hmda_loans cannot carry (the aggregations endpoint allows at most two breakdown dimensions per request, and hmda_loans spends them on action × purpose). Long format: one row per (year, state, action_taken, demographic_dimension, demographic_value) with loan count and total amount, where demographic_dimension is 'race', 'ethnicity', or 'sex'. The streaming transformer issues one request per dimension per (year, state) and unions them. Joins to geo.state_ref via state_abbr. Source: ffiec.cfpb.gov/v2/data-browser-api/view/aggregations.

Column Type Null Description
state_abbr string no USPS state abbreviation (FK to geo.state_ref.state_abbr)
action_taken string no HMDA action code (1 originated, 2 approved-not-accepted, 3 denied, 4 withdrawn, 5 closed-incomplete, 6 purchased, 7 preapproval-denied, 8 preapproval-approved-not-accepted)
action_label string yes Human-readable action_taken label
demographic_dimension string no Applicant dimension: 'race', 'ethnicity', or 'sex'
demographic_value string no HMDA category within the dimension (e.g. 'White', 'Black or African American', 'Hispanic or Latino', 'Female', 'Joint', '… Not Available')
loan_count long yes Number of loan records in this (action, demographic) cell
loan_amount_total double yes Sum of loan amounts (USD) across the cell

opportunity_zones · table

Qualified Opportunity Zones (OZ 1.0) — the ~8,764 census tracts designated under IRC §§1400Z-1/-2 by the 2018 nomination round, in effect through 2028. One row per designated tract. Static table: the whole layer is re-paginated and the partition overwritten each run; history lives in Iceberg snapshots. census_tract is the 11-digit tract GEOID; joins to geo.counties via county_fips and to geo.state_ref via state_fips / state_abbr. Source: HUD Open Data ArcGIS Opportunity_Zones FeatureServer (services.arcgis.com/VTyQ9soqVukalItT).

Column Type Null Description
census_tract string no 11-digit census tract FIPS/GEOID (2010 vintage; PK)
state_fips string yes 2-digit state FIPS code (FK to geo.states)
county_fips string yes 5-digit county FIPS code (FK to geo.counties)
state_abbr string yes USPS state abbreviation (FK to geo.state_ref.state_abbr)
tract_code string yes 6-digit tract code within the county
state_name string yes State name (as published by HUD)
is_rural boolean yes True when the tract carries HUD's rural designation

hud_subsidized_housing · table

HUD "A Picture of Subsidized Households" — the all-HUD-programs summary of assisted-housing units and residents, by census tract (December 2020 snapshot). One row per tract (Summary of All HUD Programs). Static table: the whole layer is re-paginated and the partition overwritten each run. census_tract is the 11-digit tract GEOID; joins to geo.counties via county_fips and to geo.state_ref via state_abbr. Source: HUD Open Data ArcGIS Snapshot_HUD_Picture_Subsidized_Households FeatureServer.

Column Type Null Description
census_tract string no 11-digit census tract FIPS/GEOID (2010 vintage; PK)
state_fips string yes 2-digit state FIPS code (FK to geo.states)
county_fips string yes 5-digit county FIPS code (FK to geo.counties)
state_abbr string yes USPS state abbreviation (FK to geo.state_ref.state_abbr)
tract_name string yes Census tract label (e.g. 'Census Tract 109.05')
program string yes HUD program grouping ('Summary of All HUD Programs')
total_units integer yes Total subsidized units in the tract
people_total integer yes Total assisted residents (null-suppressed for small cells)
people_per_unit double yes Average people per assisted unit
avg_hh_income integer yes Average annual household income of assisted residents (USD)
pct_disabled double yes Percent of assisted households reporting a disability

hud_subsidized_county · table

HUD "A Picture of Subsidized Households" at county × HUD-program grain, from the annual county workbook (COUNTY__2020census.xlsx). One row per (county, program) — 'Summary of All HUD Programs', 'Public Housing', 'Housing Choice Vouchers', 'Project-Based Section 8', etc. — with the full resident profile the ArcGIS tract snapshot (hud_subsidized_housing) omits: occupancy, average income, tenant rent, HUD spending, and percent minority / female-headed / elderly / disabled. HUD's -1 / 'NA' suppression sentinels are nulled. Joins to geo.counties via county_fips. Source: huduser.gov/portal/datasets/pictures/files.

Column Type Null Description
state_fips string yes 2-digit state FIPS code (FK to geo.states)
county_fips string yes 5-digit county FIPS code (FK to geo.counties)
state_abbr string yes USPS state abbreviation (FK to geo.state_ref.state_abbr)
county_name string yes County name (as published by HUD)
program_code string no HUD program code (1 = Summary of All HUD Programs, 2 = Public Housing, …)
program string yes HUD program label
sub_program string yes HUD sub-program within the program (e.g. voucher subtype; null when none)
total_units integer yes Total subsidized units under the program
pct_occupied double yes Percent of units occupied
people_total integer yes Total assisted residents
people_per_unit double yes Average people per assisted unit
avg_hh_income integer yes Average annual household income of assisted residents (USD)
avg_tenant_rent integer yes Average monthly tenant rent contribution (USD)
avg_hud_spending integer yes Average monthly HUD spending per unit — the federal subsidy (USD)
pct_minority double yes Percent of assisted households that are minority
pct_female_head double yes Percent of assisted households that are female-headed
pct_elderly double yes Percent of assisted households with head/spouse age 62+
pct_disabled double yes Percent of assisted households reporting a disability
months_waiting integer yes Average months on the waiting list before admission

housing_hpi_state_annual · view

State-level FHFA purchase-only price index, one row per state per year (December/Q4 reading). place_id is the USPS abbreviation — ready to join geo.states.state_abbr and to sec homebuilder/REIT filings by state.

View — columns are resolved by the query engine at runtime.

housing_permits_by_county · view

Total permitted housing units by county and year across all structure sizes. Primary housing-supply measure; joins to geo.counties and to census population for permits-per-capita.

View — columns are resolved by the query engine at runtime.

housing_affordability_by_state · view

State-level rental affordability: average 2-bedroom Fair Market Rent against the HUD income limits for the same state and year. Bridges the rental-cost (FMR) and eligibility-threshold (income_limits) tables via shared state_fips/year — the natural cross-housing join.

View — columns are resolved by the query engine at runtime.

housing_mortgage_originations · view

Originated mortgages (HMDA action_taken = 1) by state, year, and loan purpose — the housing-market volume cut. Joins to geo.state_ref via state_abbr and to sec mortgage-lender / homebuilder filings by state.

View — columns are resolved by the query engine at runtime.

housing_opportunity_zone_counts · view

Count of designated Opportunity Zone tracts per state, split by rural vs non-rural. Joins to geo.state_ref via state_abbr.

View — columns are resolved by the query engine at runtime.

housing_hmda_denial_rate_by_race · view

HMDA denial funnel by state, year, and applicant race — originated (action_taken = 1) vs denied (action_taken = 3) loan counts, the core fair-lending metric. Pivots the long-format hmda_applicant_demographics table for the 'race' dimension. Joins to geo.state_ref via state_abbr.

View — columns are resolved by the query engine at runtime.

housing_subsidized_by_county · view

County rollup of the tract-grain HUD Picture of Subsidized Households snapshot: total subsidized units and assisted residents per county (all-HUD-programs summary). Recovers the plan's county grain from the ArcGIS tract layer. Joins to geo.counties via county_fips.

View — columns are resolved by the query engine at runtime.

housing_subsidized_profile_by_county · view

County resident profile for all HUD programs combined (program_code = 1) from hud_subsidized_county — units, average income, HUD subsidy, and the minority / female-headed / elderly / disabled shares for the latest loaded years. Joins to geo.counties via county_fips.

View — columns are resolved by the query engine at runtime.