What is a county FIPS code, and why does it sometimes change?

Five digits that identify every US county. They are assigned alphabetically, which is exactly why a rename can force a new one.

A county FIPS code is a five digit string. The first two digits identify the state, the last three identify the county or county equivalent inside that state. Los Angeles County, California is 06037: 06 for California, 037 for the county. The code carries no meaning of its own. It is a key, and the value of a key is that it points at the same thing every time, which is where the trouble starts.

The federal standard that originally defined these codes has been withdrawn, and the identifiers are now maintained as ANSI/INCITS codes. Nobody changed their habits. Everyone still calls them FIPS codes, the Census Bureau still ships them in every county file, and state data portals still key on them.

The first rule is store it as text

Autauga County, Alabama is 01001. Put that in a column typed as an integer and it becomes 1001. No error is raised. The row still loads, the join still runs, it just matches nothing, and you find out three weeks later when Alabama is missing from a map.

Seven state codes begin with a zero: Alabama 01, Alaska 02, Arizona 04, Arkansas 05, California 06, Colorado 08 and Connecticut 09. Between them those seven cover a large block of the national file, Alabama alone having 67 county equivalents, Arkansas 75 and California 58, so an integer column quietly corrupts a substantial part of the country. Spreadsheet software does this on its own the moment you open a CSV. The county portion has the same weakness independently: codes 001 through 009 exist in every state.

Store it as text. Zero pad to five characters on read, and again on write, because some library in your stack will have quietly cast it in between.

GEOID, GEOIDFQ and COUNTYNS

Census files carry the same county identity in several shapes.

Identifier Width Los Angeles County Survives a rename? Where you meet it
GEOID 5 06037 No Shapefiles, most published Census tables
STATEFP + COUNTYFP 2 + 3 06 and 037 No TIGER and cartographic boundary files
GEOIDFQ 14 0500000US06037 No data.census.gov downloads, API geography columns
COUNTYNS 8 read from the file Yes GNIS/ANSI id, alongside GEOID in Census files
NAME / NAMELSAD text Los Angeles / Los Angeles County No Display only

GEOID is the plain five digit code, simply STATEFP and COUNTYFP concatenated. GEOIDFQ is the fully qualified form used by data.census.gov: the summary level prefix 0500000US followed by the same five digits. Older cartographic boundary releases have not always used that column name, so read the file header rather than assuming.

COUNTYNS is the one most people have never used, and the one that solves this problem. It is an eight digit GNIS/ANSI identifier attached to the entity itself rather than to its position in an alphabetical list, and it survives a rename.

Codes are alphabetical, which is why renames break them

Within each state, county codes were assigned in alphabetical order of county name, in odd increments, so Alabama runs Autauga 001, Baldwin 003, Barbour 005 and onward with the even numbers unused. The spare numbers are usually explained as room to slot a new county into its alphabetical place later, though that is an account of intent rather than a documented fact.

Change a county’s name and it sorts to a different place in the state list, so it is given a code that fits the new position. The name and the number are coupled.

Shannon County, South Dakota was 46113. It became Oglala Lakota County in May 2015 and took the code 46102, because O sorts far ahead of S. Wade Hampton Census Area, Alaska, 02270, became Kusilvak Census Area on 1 July 2015 and moved to 02158. Neither entity moved an inch or merged with anything. Only the name changed, and the key changed with it.

Splits are worse. Valdez-Cordova Census Area, Alaska, 02261, ceased to exist on 2 January 2019 and was replaced by two new entities, Chugach Census Area 02063 and Copper River Census Area 02066. No one to one crosswalk can survive that, because there is no longer one thing to map to. Codes can also stop existing altogether: Bedford city, Virginia reverted to town status inside Bedford County effective 1 July 2013 and is absent from current files.

The counter example matters. Petersburg, Alaska changed legal class, from Census Area to Borough, and kept GEOID 02195 throughout, because its name and therefore its place in the alphabetical list did not change. Legal class alone does not move a code. Names do. Alaska produces more of these events than anywhere else, for reasons covered in why Alaska has boroughs instead of counties.

The name is not a fallback key

When a code stops matching, the reflex is to join on names instead. Names are worse. Washington is a county name in 31 states, Franklin and Jefferson in 26 each, Jackson and Lincoln in 24. Even paired with a state a name can fail. Virginia has 133 county equivalents, 95 counties and 38 independent cities, and Fairfax County 51059 sits alongside Fairfax city 51600, with Franklin, Richmond and Roanoke doubled the same way. The Census Bureau writes the city suffix in lowercase, so two entirely separate entities differ by one lowercase letter in a free text field. The codes tell them apart. The names do not.

Connecticut is the join that fails silently

The largest live example is Connecticut, where nine planning regions replaced eight counties as the state’s county equivalent geography, following a Federal Register notice of 6 June 2022 and taking effect with the 2022 Census vintage.

The eight retired codes are Fairfield 09001, Hartford 09003, Litchfield 09005, Middlesex 09007, New Haven 09009, New London 09011, Tolland 09013 and Windham 09015. None of them appear in current Census county files. The nine replacements sit in a different numbering block entirely, 09110 Capitol through 09190 Western, and the largest of them, Capitol Planning Region, has a population of 994,115.

If your reference list still holds the old eight and you inner join it against a current Census extract, you get no error and no warning. You get a result nine rows short with no Connecticut in it. The regions are groups of towns and are not coterminous with the old counties, so no county to region crosswalk exists: only a town level one works. 2020 Decennial Census products are still published on the eight legacy counties, so Connecticut decennial figures cannot be joined to planning region figures at all. The full account of what Connecticut did and why is worth reading before you attempt any time series that crosses 2022.

What to actually store

Treat the pair (geoid, vintage) as the real identity of a county, not the geoid alone. A five digit code with no year attached is ambiguous: 46113 is Shannon County before 2015 and nothing after it, 09001 is Fairfield County before 2022 and nothing after it. Every Census file states its vintage, and this is precisely why vintages exist, as set out in how Census data vintages work.

Alongside the code, keep COUNTYNS so a renamed entity can be traced, the name as it appeared in that vintage, and the row count you expect. Row counts are the cheapest integrity test available. A national join should return 3,144 rows, the number of county equivalents in the 50 states and the District of Columbia, and one that comes back nine short has dropped Connecticut. A count of 3,143 is not automatically a bug: the Census Bureau’s own wording is “the nation’s 3,143 counties and the District of Columbia”, so a source at that figure may be counting counties and leaving DC aside. Check the count on every join and the silent failures stop being silent.

Do not assume that a code which matched last year still matches. Renames are rare in any given year and close to inevitable across a decade. Our methodology page records which vintage every figure on this site comes from, for the same reason: a county identifier is only trustworthy when you can say which year it belongs to.

Sources: US Census Bureau, Population Estimates Program, Vintage 2025 Population Estimates, released 26 March 2026; US Census Bureau, Gazetteer Files, 2025 Gazetteer Files, released 10 September 2025; US Census Bureau, Cartographic Boundary Files (1:500,000), 2025 Cartographic Boundary Files, released 23 April 2026. Retrieved 30 August 2026.

Figures quoted here are rebuilt from the Census Bureau files listed above each time the data pipeline runs, most recently 30 August 2026. Where a figure is computed rather than published, the text says so.