Standardized federal agency names for SAM.gov data
Updated
SAM.gov writes the whole contracting-office path into the agency field, so one agency shows up as many separate strings, and the largest agencies as hundreds. This free crosswalk maps every raw string to one canonical name, so your searches and analysis don't split a single agency into many.
- Raw agency strings ~3,600
- Canonical agencies 175
- Departments 84
- Updated Daily
What's in the crosswalk
One row per raw agency string seen in SAM.gov data, with the canonical name it maps to and how often it appears.
The problem: one agency, many strings
The Department of the Army alone accounts for 788 raw strings. Two of them are the same contracting office, separated by one ampersand. The crosswalk maps every one of them back to a single canonical name.
DEPT OF DEFENSE.DEPT OF THE ARMY.AMC.ACC.MISSION INSTALLATION CONTRACTING COMMAND.419TH CSB.W6QM MICC-FT DRUM
DEPT OF DEFENSE.DEPT OF THE ARMY.AMC.ACC.MISSION & INSTALLATION CONTRACTING COMMAND.419TH CSB.W6QM MICC-FT DRUM
DEPT OF DEFENSE.DEPT OF THE ARMY.AMC.ACC.ACC-CTRS.ACC RI.W6QK ACC-RI
DEPT OF DEFENSE.DEPT OF THE ARMY.AMC.ACC.ACC-CTRS.ACC-NJ.W6QK ACC-PICA
All map to canonical: DEPT OF THE ARMY
What each row holds
| Field | What it holds |
|---|---|
raw_agency_text |
Agency string from SAM.gov, exactly as it appears |
canonical_agency |
Standardized agency name |
department |
Parent department the agency sits under |
confidence |
Confidence in the mapping, 0 to 1 |
frequency |
Number of records filed under this exact string |
The whole mapping is free: GET /api/agency-crosswalk returns every row as JSON with no key, and the comparison with the Federal Hierarchy endpoint shows a complete row and says which of the two to reach for.
What this fixes
Inconsistent agency strings quietly break search and aggregation. The crosswalk gives you one name to group and filter on.
Scattered Navy contracts
Navy records sit under 142 different strings, one per command and contracting office. The crosswalk maps them to one standard name so you can pull them together.
Miscounted agencies in analysis
A spreadsheet grouping by raw agency name splits one department across many rows. Joining on the canonical name collapses those variants back into a single agency.
Search that misses results
Matching one spelling literally misses the rest: Air Force notices are filed under 490 distinct office paths. The crosswalk lists the raw strings behind each canonical name, so you can match all of them. On the query side the API does this for you, and it reads short agency names the crosswalk itself does not store: ?agency=FEMA and the full agency name return the same set of opportunities.
Need the underlying contract data?
This crosswalk is built from the same contract data the GovCon API serves: opportunities, awards, subawards and the SAM entity registry. To normalize agency strings in your own code rather than by hand, the agency crosswalk endpoint returns the canonical name, the department hierarchy and the USASpending codes.