Data · County income
County income and migration, from IRS tax returns
How many income tax returns each county files, how much income they report, how that income per return changed in a year, and how many returns arrived from or left for other states. We read the IRS Statistics of Income files row for row, keep the cells the IRS withholds as suppressed, and check that the AGI brackets add up, that counties add up to states and that migration in equals migration out.
What is in this dataset?
Individual income tax returns, individuals, adjusted gross income, salaries and wages in every U.S. county for the latest tax year, with the change in income per return from the year before, and the returns and income that moved into and out of each county and state between two filing years, from the IRS Statistics of Income county and migration files. The IRS rounds county returns to the nearest 10 and withholds a migration flow under 20 returns; withheld cells are left empty and marked suppressed, never estimated.
Use it to see how much income a county has and how fast it is moving, and where income is arriving from or leaving to: returns and adjusted gross income per county, the change over a year, and net migration from other states. These are the denominators for estate planning, tax, real estate and business law practices. Pair it with the legal-need and law-offices datasets by county FIPS code. Agents can look up a state and its counties, compare up to ten states, or search a county by name.
- Records
- 3,195
- Look up by
- 52
- state
- Primary source
- 3,195
The letters are explained in what P, S, D and U mean.
Where does the data come from?
Read from the IRS Statistics of Income all-returns county file and the county and state migration files, kept row for row; the IRS state rows are used as published and the US row is the sum of the states. A gate re-reads every record from the live files, checks that the eight AGI brackets add up to every all-returns row, that county AGI equals each state row, that national moves in equal moves out, and that 300 county pairs agree between the inflow and outflow files.
- Period covered
- January 1, 2023 to December 31, 2023
- Places
- The whole US, states and counties
- How often we refresh it
- Once a year
- The source's next release
- April 2027
- Records read
- October 29, 2026
Official sources
- Internal Revenue Service, Statistics of Income, by bulk download. A work of the U.S. government, public domain (17 U.S.C. 105). SOI county data are published for public use..
- Internal Revenue Service, Statistics of Income, by bulk download. A work of the U.S. government, public domain (17 U.S.C. 105)..
- Internal Revenue Service, Statistics of Income, by bulk download. A work of the U.S. government, public domain (17 U.S.C. 105)..
- Internal Revenue Service, Statistics of Income, by bulk download. A work of the U.S. government, public domain (17 U.S.C. 105)..
The sources the records cite most
- IRS SOI, county data 2023: 3,195 records
- IRS SOI, migration data 2022-2023: 3,195 records
What does a record look like?
-
United States (the 50 states and DC): 159,009,590 individual income tax returns for tax year 2023, adjusted gross income $15,132,239,388,000 ($95,166 per return), +3.0% per return from tax year 2022. Migration 2022-2023: 3,966,932 returns moved in from other states and 3,966,932 moved out (+0 net). The US row is the sum of the state rows; moves between states cancel, so in and out are equal.
Status P · checked October 29, 2026 · source: IRS SOI, county data 2023
-
Texas: 13,668,190 individual income tax returns for tax year 2023, adjusted gross income $1,269,586,566,000 ($92,886 per return), +1.2% per return from tax year 2022. Migration 2022-2023: 307,240 returns moved in from other states and 250,767 moved out (+56,473 net).
Status P · checked October 29, 2026 · source: IRS SOI, county data 2023
-
Florida: 11,217,190 individual income tax returns for tax year 2023, adjusted gross income $1,101,571,720,000 ($98,204 per return), -2.6% per return from tax year 2022. Migration 2022-2023: 354,112 returns moved in from other states and 298,763 moved out (+55,349 net).
Status P · checked October 29, 2026 · source: IRS SOI, county data 2023
-
New York: 9,788,950 individual income tax returns for tax year 2023, adjusted gross income $1,051,864,084,000 ($107,454 per return), +3.1% per return from tax year 2022. Migration 2022-2023: 192,240 returns moved in from other states and 264,227 moved out (-71,987 net).
Status P · checked October 29, 2026 · source: IRS SOI, county data 2023
The full records add the dates, the quoted source text and every field in the CSV and JSON files below.
What each of the 37 main columns means
jurisdiction- Two-letter state code (DC included), or US for the national record
level- county, state or us
county- 5-digit county FIPS code (vintage 2025); empty for state and US
countyName- County name as the Census Bureau writes it
taxYear- Tax year of the income figures
migrationYears- The two filing years the migration flows compare (people who filed in both)
status- P: read from the primary source
text- One plain sentence with the county's income and migration
value- Adjusted gross income in dollars (same as agi)
unit- What value counts
returns- Individual income tax returns filed (the IRS rounds county cells to the nearest 10)
people- Individuals on those returns (exemptions)
agi- Adjusted gross income of those returns, in dollars (the IRS publishes $ thousands)
agi_per_return- agi divided by returns, rounded to whole dollars
wage_returns- Returns with salary and wage income
wages- Salaries and wages on those returns, in dollars
wages_per_wage_return- wages divided by wage_returns, rounded to whole dollars
returns_prev- Returns in the previous tax year
agi_prev- Adjusted gross income in the previous tax year, in dollars
agi_per_return_prev- agi_prev divided by returns_prev
change_returns_pct- Percent change in returns from the previous tax year
change_agi_per_return_pct- Percent change in AGI per return from the previous tax year
mig_in_other_returns- Returns that moved in from other states (county: from a different state; state: from any other state), comparing the two filing years
mig_in_other_agi- AGI of those returns, in dollars
mig_out_other_returns- Returns that moved out to other states
mig_out_other_agi- AGI of those returns, in dollars
mig_in_same_returns- Returns that moved in from elsewhere in the same state (state record: moves within the state)
mig_in_same_agi- AGI of those returns, in dollars
mig_out_same_returns- Returns that moved out to elsewhere in the same state
mig_out_same_agi- AGI of those returns, in dollars
mig_net_other_returns- mig_in_other_returns less mig_out_other_returns
mig_net_other_agi- mig_in_other_agi less mig_out_other_agi, in dollars
suppressedFields- Migration fields the IRS withheld (under 20 returns), left empty and never estimated
effectiveFrom- First day of the tax year
effectiveTo- Last day of the tax year
lastChecked- Date the IRS files were last read
id- Stable record id: dataset, place and period
How do I use it in my own tools?
countyincome_lookup- For one two-letter state code (or US): the state and every county in it, with returns, adjusted gross income, income per return and its change over a year, and moves in and out from other states; withheld cells are null.
countyincome_compare- The IRS income and migration records of up to 10 states (two-letter codes) or US side by side: returns, adjusted gross income per return and net moves from other states.
countyincome_search- IRS income records whose text matches the words given, such as a county name ("Harris County"), a state name or a 5-digit county FIPS code.
How to cite this dataset
You can reuse, adapt and republish this data, including commercially, under the Creative Commons Attribution 4.0 license (CC BY 4.0). The only condition is that you credit Probative and link to the source.
- Version
- 1.0.0, released October 29, 2026
- Every version
- 10.5281/zenodo.23752983 (always points to the newest)
- License
- CC BY 4.0
Download the data
- CSV: county-income.csv 2596 KB · one row per record (columns in README.txt)
- JSON: county-income.json 6294 KB · every record with its sources
Free, no email or login. The files are hosted on this site and Zenodo, a public research archive.
Suggested citation
Probative. (2026). County income and migration from IRS tax returns (Version 1.0.0) [Data set]. Zenodo. https://doi.org/10.5281/zenodo.23752984
Credit line for a chart, table or article
Source: Probative, County income and migration from IRS tax returns, version 1.0.0, https://doi.org/10.5281/zenodo.23752984, licensed CC BY 4.0.
Add to a reference manager (Zotero, Mendeley, EndNote)
Not legal advice. These are totals from filed individual tax returns, not a county's wealth, a person's income or a prediction of who needs a lawyer, and migration shows where filers' addresses changed, not why. Questions about taxes, estates or property are for a licensed attorney or tax professional.
What changed recently?
- 2026-10-29 · IRS Statistics of Income county data for tax year 2023: returns, adjusted gross income and wages for every county and state, with the change from 2022 and the 2022-2023 migration flows: 159,009,590 returns in the IRS file. (source)
The full log is in changes.json.
What are the limits?
- The figures come from individual income tax returns filed for a tax year. They leave out people who do not file, and a return's county is the filer's address on the return.
- The IRS rounds county return counts to the nearest 10, so a county's returns can differ slightly from the state row when added up. Adjusted gross income is not rounded and adds up exactly.
- Migration compares a filer's address on returns in two consecutive filing years. It shows where filers moved, not why, and it leaves out people who did not file in both years. The IRS withholds a flow of fewer than 20 returns; those cells are suppressed, never estimated.
- County income per return is not household income or wealth: it mixes wages, business, investment and retirement income, and counties with many retirees or high earners look very different.
- The migration file covers the filing years it names and the income file the tax year it names; they are a year apart in some releases. Counties the IRS does not list have no record.
- Records older than 400 days since their last check are marked
stalein the files until we re-check them. Every confirmed error we fix is listed in the data corrections log.
Found a wrong value? Report an error with the record id and the source that shows the right value.
Running a firm? You don’t need the raw data: we handle your state’s ad rules for you. See where your firm stands first.
Free
Get your free review.
Send us your firm’s website. Probative Growth records a 90-second video of what clients see when they look you up, and emails it with a one-page summary within 2 business days. No logins, no call needed.
Not sure where to start? Answer 7 questions Ready to talk? Talk to us Or see what AI says about your firm
Your free review: It covers your Google listing, website, phone and ads, from public information.