Available now
US income and tax data by ZIP code and county, with county-to-county migration
IRS Statistics of Income ZIP Code, County and Migration data in nine tables: returns, income, deductions, credits and tax by income band, and household moves between counties and states. 5,025,727 rows.
Coverage: ZIP code income for tax years 2011 to 2022, with 27,588 ZIP codes in tax year 2022. County income for 3,143 counties, tax years 2011 to 2023. County-to-county and state-to-state migration for filing years 2011-2012 through 2022-2023. Tax year 2023 ZIP data was not published at build time.
Why pay for public data
The IRS publishes these as 73 CSV files and 37 guides, and changed file layouts, income bands and items over the years. This package puts every year in one schema under the original IRS item codes, adds a data dictionary row for each of the 511 columns, and labels the state-total, other-ZIP and summary migration rows so nothing is counted twice.
How it is built
- 1
Pull the SOI Individual Income Tax ZIP Code Data, County Data and Migration Data from irs.gov.
- 2
Reconcile every tax year into one layout. A column is NULL for a year the IRS did not publish it, and suppressed migration flows are flagged with IS_SUPPRESSED, never imputed.
- 3
Add income band, state and county lookups with Census region, metro area and 2020 population. Rebuilt once a year when the IRS posts the next tax year.
What is in each record
| Field | Notes |
|---|---|
| TAX_YEAR, STATE_ABBR, ZIP_CODE, ROW_TYPE | ROW_TYPE marks ZIP rows, state totals and the other-ZIPs row, ZIP_CODE 99999 |
| AGI_STUB, AGI_BAND_LABEL | Adjusted gross income band, with dollar bounds in AGI_BAND |
| N1, MARS1, MARS2, MARS4, N2 | Returns by filing status, and individuals, as published |
| A00100, N00200, A00200 | AGI and wages. ZIP_INCOME carries 196 IRS items, with money in thousands of dollars |
| RETURNS, AGI_THOUSANDS, AVG_AGI_PER_RETURN_USD, PCT_RETURNS_AGI_200K_PLUS | ZIP_SUMMARY: one row per ZIP code and year, all income bands combined |
| COUNTY_FIPS, COUNTY_NAME | COUNTY_INCOME: the same items for 3,143 counties in 210 columns |
| FLOW_DIRECTION, ORIGIN_COUNTY_FIPS, DEST_COUNTY_FIPS, N1, N2, AGI | MIGRATION_COUNTY: households, people and income moving between counties |
| ROW_LABEL, IS_SUMMARY, IS_SUPPRESSED | Label the non-migrant, foreign, other-flow and total migration rows |
| CBSA_CODE, CBSA_TITLE, POPULATION_2020 | COUNTY lookup, plus STATE with Census region and division |
| DATA_DICTIONARY | One row for each of the 511 columns, with the IRS source field |
Who uses it
- Marketing, site selection and trade-area analysts
- Credit, insurance and real estate modelers
- Economic development and relocation researchers
Pricing
$199 a year.
No personal contact data is collected or sold in any QuestionPunk dataset.
Questions
- Is this data not free from the government?
- Yes. The source files are public and we link to them. You pay for the cleaning, the joins, the documented schema and the refresh, not for the data itself.
- How is it delivered?
- As Parquet or CSV files, by download link or to your own cloud bucket. The same tables load into Snowflake with the scripts we include.
- Can I see the data before paying?
- Yes. Ask for a sample and we send the Vermont rows from every table, plus the full data dictionary.
- Is IRS data also free on Snowflake?
- Yes. The IRS posts these files free on irs.gov, and the free public data listings on Snowflake Marketplace also carry IRS income and migration tables. Compare them before you buy. This package keeps every published item under its IRS code, back to tax year 2011, with a data dictionary row for every column.
- Why is a ZIP code missing or a count rounded?
- The IRS protects privacy before publishing. ZIP codes with fewer than 100 returns are folded into a per-state other-ZIPs row, items with fewer than 20 returns are dropped or combined, and counts are rounded to the nearest 10 from tax year 2012 on. Nothing is imputed.
- How do I avoid double counting?
- Filter ROW_TYPE to ZIP or COUNTY before summing, because the state-total and other-ZIPs rows are kept. Each migration flow appears once as an inflow and once as an outflow, so filter FLOW_DIRECTION too.
- What is the license?
- The sources are US government works from the IRS Statistics of Income Division. This product uses IRS data but is not endorsed or certified by the IRS.
Tell us what you need
Geography, size and fields. A two-line email is enough, and a person replies.
Request a sampleMore from the catalog
- University syllabi
- ZIP code demographics
- Census tract demographics
- ZIP code crosswalk
- US care facilities
- CDC PLACES health estimates
- Medicare spending
- US college data
- US salaries by occupation
- US housing cost and rent benchmarks
- FDA drug reference data
- US K-12 schools and districts
- US medical code sets
- Bank and credit union branches
- US health shortage areas
- CMS cost reports
- ACA marketplace plans
- FDA Total Diet Study
- US jobs and commuting flows
- US air quality
- FDA medical device data
- CMS Provider of Services and CLIA labs