County demographics / DOCUMENTED CSV
2020–2024 ACS County Demographic Profile
Add population, income, education and housing context to county-coded records, with published margins of error and clear source definitions.
2020–2024 ACS five-year estimates · 2024 county geography
01 / KNOW THE FIT
A useful join starts
with a clear meaning.
What you can do with it
Enrich service-area or market-research records with county demographics. Compare published estimates with their uncertainty, or prepare a county dashboard using one documented table.
What one row means
One county or equivalent in the main CSV, with 13 measures. Each measure has an estimate, 90% margin of error and separate status fields. The detailed CSV has one county/measure record with its universe, source variable IDs, raw values and annotations.
Unique keycounty_fips
How to join it
Join county_fips as five-character text. Your records must use compatible county boundaries. This release uses Connecticut’s nine planning regions; our 2020 ZCTA crosswalk uses the former counties and cannot directly provide those region identifiers.
Python guide: add county demographics to a service-area list →
Coverage, with the edges visible
3,222 counties and equivalents across the 50 states, DC and Puerto Rico; 41,886 detailed county/measure records. There are 13 unavailable estimates, kept as blanks with explicit statuses. Controlled estimates can lack a numeric margin of error; those cases remain distinct from an unavailable estimate.
Keep in mind
- These estimates describe the 2020–2024 period. They are not a 2024 point-in-time population count or a 2026 demographic snapshot.
- Dollar measures use 2024 inflation-adjusted dollars. A percentage’s margin of error is in percentage points. Missing and controlled margins of error are not numeric zeros.
- County medians cannot be summed or averaged to obtain a regional median. County context does not establish the characteristics of an individual customer.
- The ACS unemployment measure is survey-based; it is not the BLS monthly unemployment rate. Geography and overlapping survey periods need review before historical comparisons.
We combine reviewed Census profile tables, select the Puerto Rico social table where required, preserve identifiers and published uncertainty, and keep special source values out of numeric columns. Saved source responses, extraction and preparation recipes let us reprocess this edition independently of a future Census update. How we prepare and version our data →
02 / TRY THE SHAPE
Real rows. Before you buy.
These are the first three rows from the delivered CSV, showing 5 of 60 fields. The free download contains the first five rows and all 60 fields; it is a format sample, not a coverage test.
| county_fips | county_name | population | median_household_income | median_household_income_moe_90 |
|---|---|---|---|---|
| 01001 | Autauga County, Alabama | 59947 | 72481 | 5640 |
| 01003 | Baldwin County, Alabama | 246989 | 78775 | 2602 |
| 01005 | Barbour County, Alabama | 24643 | 46042 | 5089 |
03 / NO GUESSING
Main table fields, explained.
The main table’s field dictionary from the current download. CSV has no built-in types; these are the intended import types.
| Field | Type | Meaning |
|---|---|---|
county_fips | text | Five-character county/equivalent FIPS; import as text |
county_name | text | Source county/equivalent name including state or Puerto Rico |
state_fips | text | Two-character state/territory FIPS; import as text |
state_name | text | State or Puerto Rico label from the source NAME field |
geo_id | text | Source Census summary-level-050 geographic identifier |
period_start | text | First year of the five-year estimation period |
period_end | text | Last year of the five-year estimation period |
geography_vintage | text | Geography used by this ACS release, including Connecticut planning regions |
population | decimal or blank | Population; people; universe: Total population. Published DP05_0001E; blank unless status is reported. |
population_moe_90 | decimal or blank | 90% margin of error for population; people. Published DP05_0001M. Blank does not mean zero; read the MOE status. |
population_status | text | Source value status: reported, missing, unavailable_estimate, insufficient_sample_moe, open_interval_moe, controlled_moe, insufficient_sample, not_applicable, annotated_value. See README and raw cells in county_measures.csv. |
population_moe_status | text | Source value status: reported, missing, unavailable_estimate, insufficient_sample_moe, open_interval_moe, controlled_moe, insufficient_sample, not_applicable, annotated_value. See README and raw cells in county_measures.csv. |
median_age | decimal or blank | Median age; years; universe: Total population. Published DP05_0018E; blank unless status is reported. |
median_age_moe_90 | decimal or blank | 90% margin of error for median_age; years. Published DP05_0018M. Blank does not mean zero; read the MOE status. |
median_age_status | text | Source value status: reported, missing, unavailable_estimate, insufficient_sample_moe, open_interval_moe, controlled_moe, insufficient_sample, not_applicable, annotated_value. See README and raw cells in county_measures.csv. |
median_age_moe_status | text | Source value status: reported, missing, unavailable_estimate, insufficient_sample_moe, open_interval_moe, controlled_moe, insufficient_sample, not_applicable, annotated_value. See README and raw cells in county_measures.csv. |
under_18_pct | decimal or blank | Population under 18; percent; universe: Total population. Published DP05_0019PE; blank unless status is reported. |
under_18_pct_moe_90 | decimal or blank | 90% margin of error for under_18_pct; percentage points. Published DP05_0019PM. Blank does not mean zero; read the MOE status. |
under_18_pct_status | text | Source value status: reported, missing, unavailable_estimate, insufficient_sample_moe, open_interval_moe, controlled_moe, insufficient_sample, not_applicable, annotated_value. See README and raw cells in county_measures.csv. |
under_18_pct_moe_status | text | Source value status: reported, missing, unavailable_estimate, insufficient_sample_moe, open_interval_moe, controlled_moe, insufficient_sample, not_applicable, annotated_value. See README and raw cells in county_measures.csv. |
age_65_plus_pct | decimal or blank | Population age 65 and over; percent; universe: Total population. Published DP05_0024PE; blank unless status is reported. |
age_65_plus_pct_moe_90 | decimal or blank | 90% margin of error for age_65_plus_pct; percentage points. Published DP05_0024PM. Blank does not mean zero; read the MOE status. |
age_65_plus_pct_status | text | Source value status: reported, missing, unavailable_estimate, insufficient_sample_moe, open_interval_moe, controlled_moe, insufficient_sample, not_applicable, annotated_value. See README and raw cells in county_measures.csv. |
age_65_plus_pct_moe_status | text | Source value status: reported, missing, unavailable_estimate, insufficient_sample_moe, open_interval_moe, controlled_moe, insufficient_sample, not_applicable, annotated_value. See README and raw cells in county_measures.csv. |
households | decimal or blank | Households; households; universe: Households. Published DP02_0001E (DP02PR equivalent for Puerto Rico); blank unless status is reported. |
households_moe_90 | decimal or blank | 90% margin of error for households; households. Published DP02_0001M (DP02PR equivalent for Puerto Rico). Blank does not mean zero; read the MOE status. |
households_status | text | Source value status: reported, missing, unavailable_estimate, insufficient_sample_moe, open_interval_moe, controlled_moe, insufficient_sample, not_applicable, annotated_value. See README and raw cells in county_measures.csv. |
households_moe_status | text | Source value status: reported, missing, unavailable_estimate, insufficient_sample_moe, open_interval_moe, controlled_moe, insufficient_sample, not_applicable, annotated_value. See README and raw cells in county_measures.csv. |
median_household_income | decimal or blank | Median household income; 2024 inflation-adjusted dollars; universe: Households. Published DP03_0062E; blank unless status is reported. |
median_household_income_moe_90 | decimal or blank | 90% margin of error for median_household_income; 2024 inflation-adjusted dollars. Published DP03_0062M. Blank does not mean zero; read the MOE status. |
median_household_income_status | text | Source value status: reported, missing, unavailable_estimate, insufficient_sample_moe, open_interval_moe, controlled_moe, insufficient_sample, not_applicable, annotated_value. See README and raw cells in county_measures.csv. |
median_household_income_moe_status | text | Source value status: reported, missing, unavailable_estimate, insufficient_sample_moe, open_interval_moe, controlled_moe, insufficient_sample, not_applicable, annotated_value. See README and raw cells in county_measures.csv. |
poverty_pct | decimal or blank | People below the poverty level; percent; universe: Population for whom poverty status is determined. Published DP03_0128PE; blank unless status is reported. |
poverty_pct_moe_90 | decimal or blank | 90% margin of error for poverty_pct; percentage points. Published DP03_0128PM. Blank does not mean zero; read the MOE status. |
poverty_pct_status | text | Source value status: reported, missing, unavailable_estimate, insufficient_sample_moe, open_interval_moe, controlled_moe, insufficient_sample, not_applicable, annotated_value. See README and raw cells in county_measures.csv. |
poverty_pct_moe_status | text | Source value status: reported, missing, unavailable_estimate, insufficient_sample_moe, open_interval_moe, controlled_moe, insufficient_sample, not_applicable, annotated_value. See README and raw cells in county_measures.csv. |
unemployment_pct | decimal or blank | Unemployment rate; percent; universe: Civilian labor force age 16 and over. Published DP03_0009PE; blank unless status is reported. |
unemployment_pct_moe_90 | decimal or blank | 90% margin of error for unemployment_pct; percentage points. Published DP03_0009PM. Blank does not mean zero; read the MOE status. |
unemployment_pct_status | text | Source value status: reported, missing, unavailable_estimate, insufficient_sample_moe, open_interval_moe, controlled_moe, insufficient_sample, not_applicable, annotated_value. See README and raw cells in county_measures.csv. |
unemployment_pct_moe_status | text | Source value status: reported, missing, unavailable_estimate, insufficient_sample_moe, open_interval_moe, controlled_moe, insufficient_sample, not_applicable, annotated_value. See README and raw cells in county_measures.csv. |
bachelors_or_higher_pct | decimal or blank | Bachelor’s degree or higher; percent; universe: Population age 25 and over. Published DP02_0068PE (DP02PR equivalent for Puerto Rico); blank unless status is reported. |
bachelors_or_higher_pct_moe_90 | decimal or blank | 90% margin of error for bachelors_or_higher_pct; percentage points. Published DP02_0068PM (DP02PR equivalent for Puerto Rico). Blank does not mean zero; read the MOE status. |
bachelors_or_higher_pct_status | text | Source value status: reported, missing, unavailable_estimate, insufficient_sample_moe, open_interval_moe, controlled_moe, insufficient_sample, not_applicable, annotated_value. See README and raw cells in county_measures.csv. |
bachelors_or_higher_pct_moe_status | text | Source value status: reported, missing, unavailable_estimate, insufficient_sample_moe, open_interval_moe, controlled_moe, insufficient_sample, not_applicable, annotated_value. See README and raw cells in county_measures.csv. |
housing_units | decimal or blank | Housing units; housing units; universe: Housing units. Published DP04_0001E; blank unless status is reported. |
housing_units_moe_90 | decimal or blank | 90% margin of error for housing_units; housing units. Published DP04_0001M. Blank does not mean zero; read the MOE status. |
housing_units_status | text | Source value status: reported, missing, unavailable_estimate, insufficient_sample_moe, open_interval_moe, controlled_moe, insufficient_sample, not_applicable, annotated_value. See README and raw cells in county_measures.csv. |
housing_units_moe_status | text | Source value status: reported, missing, unavailable_estimate, insufficient_sample_moe, open_interval_moe, controlled_moe, insufficient_sample, not_applicable, annotated_value. See README and raw cells in county_measures.csv. |
owner_occupied_pct | decimal or blank | Owner-occupied housing; percent; universe: Occupied housing units. Published DP04_0046PE; blank unless status is reported. |
owner_occupied_pct_moe_90 | decimal or blank | 90% margin of error for owner_occupied_pct; percentage points. Published DP04_0046PM. Blank does not mean zero; read the MOE status. |
owner_occupied_pct_status | text | Source value status: reported, missing, unavailable_estimate, insufficient_sample_moe, open_interval_moe, controlled_moe, insufficient_sample, not_applicable, annotated_value. See README and raw cells in county_measures.csv. |
owner_occupied_pct_moe_status | text | Source value status: reported, missing, unavailable_estimate, insufficient_sample_moe, open_interval_moe, controlled_moe, insufficient_sample, not_applicable, annotated_value. See README and raw cells in county_measures.csv. |
median_gross_rent | decimal or blank | Median monthly gross rent; 2024 inflation-adjusted dollars per month; universe: Renter-occupied housing units paying cash rent. Published DP04_0134E; blank unless status is reported. |
median_gross_rent_moe_90 | decimal or blank | 90% margin of error for median_gross_rent; 2024 inflation-adjusted dollars per month. Published DP04_0134M. Blank does not mean zero; read the MOE status. |
median_gross_rent_status | text | Source value status: reported, missing, unavailable_estimate, insufficient_sample_moe, open_interval_moe, controlled_moe, insufficient_sample, not_applicable, annotated_value. See README and raw cells in county_measures.csv. |
median_gross_rent_moe_status | text | Source value status: reported, missing, unavailable_estimate, insufficient_sample_moe, open_interval_moe, controlled_moe, insufficient_sample, not_applicable, annotated_value. See README and raw cells in county_measures.csv. |
median_home_value | decimal or blank | Median home value; 2024 inflation-adjusted dollars; universe: Owner-occupied housing units. Published DP04_0089E; blank unless status is reported. |
median_home_value_moe_90 | decimal or blank | 90% margin of error for median_home_value; 2024 inflation-adjusted dollars. Published DP04_0089M. Blank does not mean zero; read the MOE status. |
median_home_value_status | text | Source value status: reported, missing, unavailable_estimate, insufficient_sample_moe, open_interval_moe, controlled_moe, insufficient_sample, not_applicable, annotated_value. See README and raw cells in county_measures.csv. |
median_home_value_moe_status | text | Source value status: reported, missing, unavailable_estimate, insufficient_sample_moe, open_interval_moe, controlled_moe, insufficient_sample, not_applicable, annotated_value. See README and raw cells in county_measures.csv. |
04 / INSIDE THE DOWNLOAD
Data, with its context.
One ZIP · 803 KB · 15 files. No account or subscription required.
README.mdImport guidance, method, attribution, and limitationsall_tables_dictionary.jsonFields for all reference tables and enriched outputchecksums.jsonSHA-256 checksums for the release filescounty_measures.csvOne county/measure record with source values, annotations, units and universecounty_profile.csvMain prepared table · UTF-8 CSVdata_dictionary.jsonTypes and definitions for every fieldexample.pyOffline county join helper and fictional service-area exampleexample_counties.csvFictional service-area records with real county identifiersexample_result.csvExpected county enrichment for those example recordsmeasures.jsonDefinitions and source-variable mapping for the 13 measuresmetadata.jsonSource provenance, production time, counts, and CSV checksumprovenance.jsonRetained source identifiers, URLs and file checksumsquality_report.jsonCoverage, missingness and product-specific quality checksrevision.jsonChanges and free-upgrade eligibility for this ACD revisionsource_variables.jsonSelected Census variable definitions retained from the source
05 / DATES THAT MEAN SOMETHING
Sources, versions & changes.
Source versions identify the inputs. Our processing revision describes how we prepare them. Either kind of change creates a new ACD release; the package date records when it was built.
Current source versions
- Survey period
- 2020–2024 ACS five-year estimates
- County boundaries
- 2024 geography, including Connecticut planning regions
- Census release date
- 2026-01-29
- ACD preparation revision
- 1 · initial paid release
- Package prepared (UTC)
- U.S. Census Bureau · 2024 ACS five-year Data Profiles
- Census · release dates and survey period
- Census · estimate and annotation meanings
Source: U.S. Census Bureau, American Community Survey and Puerto Rico Community Survey. Independent preparation by Actually Clean Data; no Census endorsement.
RELEASE HISTORY
Oct 16, 2026 · current package (UTC)
Initial paid release: 13 measures in wide and detailed tables, source annotations, field dictionaries, quality checks and a working Python example. This is an ACD product release using the Census edition released January 29, 2026.
The earlier free research prototype contained four measures from the same survey period. All 25,776 raw estimate/MOE cells shared with that prototype agree. The expanded product adds measures and preparation features; it does not claim a new Census release.
Read the initial release recordProcessing corrections and improvements for your purchased source edition are free. Genuinely new source editions may be sold separately. See the update policy and access instructions.
Check the downloaded CSV’s integrity
The metadata file inside the ZIP records this SHA-256 checksum for county_profile.csv. A matching checksum confirms identical CSV bytes.
56200b7401e10c6c07d1674b324086c3c11a1717c8c695662ced6f0e8c118fbbREADY TO PUT IT TO WORK?
2020–2024 ACS County Demographic Profile
$19 USD · one time · 3,222 counties and equivalents