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.

21 datasets · 176 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)

building_permits_place · table

Census Building Permits Survey — new privately-owned residential construction authorized by building permits, at PLACE (incorporated city/town/village) grain, annual. One row per place per year with buildings/units/valuation for 1-unit, 2-unit, 3-4-unit and 5-plus-unit structures (Census's imputed totals, the canonical series). This is the grain municipal housing policy is actually made at: zoning, permitting and approval decisions are a city function, and the county-grain building_permits table sums across every jurisdiction in a county plus its unincorporated area, so it cannot separate a permissive city from a restrictive neighbour. Roughly 20,000 rows per year across the four regional files, available back to 1980. GRAIN — one row per permit-issuing jurisdiction per county part per year. The unique key is (state_fips, place_fips, mcd_fips, county_fips, year); place_geoid alone is NOT a key. Two things break the naive one-row-per-place assumption. First, a jurisdiction straddling a county line is reported once per county it falls in. Second, and much larger: most rows nationally are NOT identified by place at all — in strong-MCD states (PA, MA, NJ, NY, ...) the permit-issuing jurisdiction is a township or town carried in the MCD field, and those rows have place_fips 00000. Chester County PA alone reports 57 townships that way. Use jurisdiction_type to tell which identity a row carries — 'place' (place_geoid set), 'mcd' (mcd_geoid set), 'unincorporated' (a county's leftover unincorporated area, the 99990 sentinel, also flagged by is_unincorporated_area), or 'county' (a county-wide permit office). place_geoid and mcd_geoid are populated ONLY where a real code backs them, never synthesised from a sentinel, so a join on either cannot silently merge distinct jurisdictions. Filter to jurisdiction_type='place' to compare municipalities; keep every type to reconcile against the county-grain building_permits table — but expect an exact match only for recent years. Census's place and county products do not fully agree on older vintages: 2023 and 2024 reconcile to the unit, while 2009-2022 and 2025 differ by up to 0.8% (2013: 625,225 place units against 620,785 county). Both tables here match their own source file to the row (verified against fresh downloads), so that gap is upstream, in how Census aggregates and imputes at each grain — not an ingestion difference. Treat the county table as authoritative for county totals and this one for within-county composition, rather than expecting either to be derivable from the other. months_reported says how many of the year's 12 months the jurisdiction actually reported — the rest is imputed, which matters more here than at county grain because one small jurisdiction's silence is not averaged away. Source: www2.census.gov/econ/bps/Place/{region}/{prefix}{year}a.txt.

Column Type Null Description
state_fips string yes 2-digit state FIPS code (FK to geo.states)
place_fips string yes 5-digit Census place FIPS code
place_geoid string yes 7-character state+place GEOID (2-digit state FIPS + 5-digit place FIPS). NULL unless a real place code backs it — never synthesised from the 00000 (MCD-reported) or 99990 (unincorporated) sentinels, so joining on it cannot merge distinct jurisdictions.
mcd_geoid string yes 10-character state+county+MCD GEOID for an MCD-reported (township/town) jurisdiction; NULL when the row is not MCD-identified. The majority of rows nationally carry this rather than place_geoid.
jurisdiction_type string yes Which identity the row carries: 'place', 'mcd', 'unincorporated' (a county's 99990 remainder) or 'county' (county-wide permit office). Filter to 'place' to compare municipalities.
place_name string yes Place name (as published by Census)
county_fips string yes 5-digit county FIPS code (FK to geo.counties)
is_unincorporated_area boolean yes True when place_fips is the 99990 sentinel — a county's unincorporated remainder, not a municipality. Filter these out to compare real places; keep them to reconcile against the county-grain building_permits table.
census_place_code string yes Census's own 4-digit place code (distinct from the FIPS place code)
mcd_fips string yes FIPS minor civil division code ('00000' where not applicable)
population integer yes Place population as carried on the permit file
csa_code string yes Combined Statistical Area code
cbsa_code string yes Core Based Statistical Area code
footnote_code string yes Census footnote code for the row, when present
central_city string yes Central-city indicator for the place within its CBSA, when present
zip_code string yes ZIP code of the permit-issuing office
region_code integer yes Census region code (1 Northeast, 2 Midwest, 3 South, 4 West)
division_code integer yes Census division code
months_reported integer yes Months of the year the place actually reported (0-12); the remainder is imputed
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). Covers the 50 states only — DC and the territories (AS, GU, MP, PR, VI) have no state-level aggregate in il/statedata; their income limits are still available at HUD-area grain via income_limits_county. 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_lending_by_tract · table

Real census-tract-grain HMDA lending activity — the tract/county grain housing.hmda_loans cannot provide. That table's aggregations-endpoint counties= filter is accepted and echoed back by the API but never actually applied server-side (confirmed live 2026-09-11: Story County IA and Loving County TX, population ~64, both returned their entire state's total). Real tract/county grain requires the loan-level data instead: this table downloads CFPB's "Nationwide Data Subset" loan-level export (ffiec.cfpb.gov/v2/data-browser-api/view/nationwide/csv) for each year and aggregates to (state, county, tract) via HmdaLoanLevelAggregateProvider — an embedded DuckDB query streamed directly off the downloaded file, never loaded into JVM heap as a row list. The API requires an explicit actions_taken filter alongside years or it silently returns a small undocumented partial subset instead of an error (confirmed live: omitting it returned ~261K rows for 2023; passing all 8 action codes returned the real ~1.11M). origination_count/ denial_count/origination_total_amount are counted from real loan-level records, not derived or estimated. tract_population/tract_minority_population_percent/ tract_to_msa_income_percentage are the source's own per-tract context fields (constant across a tract's loan records within a year), carried through for convenience. Complements housing.hmda_loans' state x action x purpose funnel view rather than replacing it — this table has no purpose/demographic breakdown by design, to keep the first tract-grain build scoped; that breakdown is a natural follow-on, not included here. Joins to geo.counties via county_fips and to geo.census_tracts via census_tract, where those exist.

Column Type Null Description
state_code string yes 2-letter USPS state abbreviation (FK to geo.state_ref.state_abbr)
county_fips string yes 5-digit county FIPS code (FK to geo.counties)
census_tract string no 11-digit census tract FIPS code; PK component with year
application_count long yes Total loan application/action records in this tract/year (all action_taken values)
origination_count long yes Count of records with action_taken=1 (loan originated)
denial_count long yes Count of records with action_taken=3 (application denied)
origination_total_amount double yes Sum of loan_amount (USD) across originated loans (action_taken=1) in this tract/year
origination_median_amount double yes Median loan_amount (USD) across originated loans in this tract/year
avg_interest_rate double yes Average interest rate across originated loans with a real reported rate; null when the source's interest_rate is 'NA' or 'Exempt' for a record, not fabricated
tract_population double yes Tract population, as carried by the source's own per-tract context field
tract_minority_population_percent double yes
tract_to_msa_income_percentage double yes Tract median family income as a percentage of the MSA/MD median family income
year integer no HMDA filing/activity year; PK component with census_tract

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

hmda_lar · table

HMDA Loan/Application Register — actual loan-level records from the CFPB Data Browser CSV export (a different endpoint from hmda_loans / hmda_applicant_demographics, which query the aggregations API and are capped at two breakdown dimensions per request and so can never carry census_tract). One row per LAR record, curated to a subset of the source's 99 columns. In DQ mode dqRowLimit caps each (year, state); a single state-year (e.g. CA 2023) is ~1M rows in production. Joins to geo.counties via county_fips (state_code+county_code) and to geo tracts via census_tract. Source: ffiec.cfpb.gov/v2/data-browser-api/view/csv.

Column Type Null Description
activity_year integer yes HMDA reporting (activity) year
lei string yes Legal Entity Identifier of the reporting institution
county_code string yes 5-digit county FIPS (state+county) — FK to geo.counties.county_fips
census_tract string yes 11-digit census tract FIPS GEOID — the geography hmda_loans / hmda_applicant_demographics cannot carry (the aggregations API caps breakdowns at 2 dimensions per request); this table exists to carry it
derived_msa_md string yes Derived MSA/MD code (5-digit CBSA/Metropolitan Division) of the property location
derived_loan_product_type string yes Derived loan product type (e.g. Conventional:First Lien, FHA:Subordinate Lien)
derived_dwelling_category string yes Derived dwelling category (e.g. Single Family (1-4 Units):Site-Built)
derived_ethnicity string yes Derived single-value applicant ethnicity (summarizes applicant_ethnicity-1..5)
derived_race string yes Derived single-value applicant race (summarizes applicant_race-1..5)
derived_sex string yes Derived single-value applicant sex
action_taken string yes 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)
loan_type string yes HMDA loan type code (1 conventional, 2 FHA-insured, 3 VA-guaranteed, 4 USDA/RHS)
loan_purpose string yes HMDA loan-purpose code (1 home purchase, 2 home improvement, 31 refinancing, 32 cash-out refinancing, 4 other, 5 not applicable)
lien_status string yes Lien status code (1 first lien, 2 subordinate lien)
loan_amount double yes Loan amount (USD)
loan_to_value_ratio double yes Loan-to-value ratio (percent); TRY_CAST nulls the 'Exempt' sentinel some institutions report
interest_rate double yes Note interest rate (percent); TRY_CAST nulls the 'NA'/'Exempt' sentinels some institutions report
rate_spread double yes Rate spread over the average prime offer rate (percent); TRY_CAST nulls the 'Exempt' sentinel
property_value double yes Property value (USD); TRY_CAST nulls the 'Exempt' sentinel
income double yes Applicant/co-applicant combined gross annual income (USD thousands)
debt_to_income_ratio string yes Debt-to-income ratio: an exact percent for most loans, but a bucketed range (e.g. '36%-<37%', '<20%', '>60%') above the CFPB's exact-value disclosure threshold, or 'Exempt' — kept as string, not numeric, so no value is silently nulled by a cast
occupancy_type string yes Occupancy type code (1 principal residence, 2 second residence, 3 investment property)
applicant_sex string yes Applicant sex code (1 male, 2 female, 3 not provided, 4 not applicable, 6 both)
co_applicant_sex string yes Co-applicant sex code (same coding as applicant_sex; 5 no co-applicant)

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): total_units, people_total, people_per_unit, avg_hh_income, and pct_disabled. One row per tract (program = 'Summary of All HUD Programs' only). Static table: the whole layer is re-paginated and the partition overwritten each run. For the richer county-level, per-program, per-year profile (occupancy, tenant rent, HUD spending, more demographic shares) see hud_subsidized_county. 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 (year, state). index_sa_year_end is the maximum seasonally-adjusted index value seen for that state within the year (not necessarily the December/Q4 reading) and index_sa_year_avg is the mean across all periods; the query does not filter by frequency, so monthly and quarterly readings for the same state/year are aggregated together. 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

County-year rollup of building_permits: total_units (all structure sizes), single_family_units (1-unit only), multifamily_units (2-unit through 5-plus-unit combined), and total_valuation (summed construction value across all structure sizes). Primary housing-supply measure; joins to geo.counties via county_fips (permits-per-capita requires an external population join, e.g. census).

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_subsidized_housing ArcGIS snapshot (all-HUD-programs summary): tract_count, summed total_units and people_total, and avg_pct_disabled per county. Recovers county grain from the tract-level source. For a richer per-program, per-year county profile (occupancy, income, tenant rent, HUD spending, more demographic shares), see hud_subsidized_county / housing_subsidized_profile_by_county. Joins to geo.counties via county_fips.

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

housing_subsidized_profile_by_county · view

County-year resident profile for all HUD programs combined (program_code = '1') from hud_subsidized_county, across all loaded years: total_units, pct_occupied, avg_hh_income, avg_tenant_rent, avg_hud_spending, and the pct_minority / pct_female_head / pct_elderly / pct_disabled shares. Joins to geo.counties via county_fips. For a lighter, tract-derived county rollup across all HUD programs combined, see housing_subsidized_by_county.

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