Where the data comes from and how it is classified.
All records come from USASpending's Award Data Archive — the official bulk-download center where USASpending publishes per-agency, per-fiscal-year contract ZIPs covering every prime award transaction.
Concretely, the pipeline downloads one file per toptier agency per fiscal year from:
https://files.usaspending.gov/award_data_archive/FY{YEAR}_{AGENCY}_Contracts_Full_{DATESTAMP}.zip
{AGENCY} is the three-digit CGAC toptier agency code (e.g. 097 for
DoD, 075 for HHS, 036 for VA — pulled from USASpending's
agency_codes.csv),
and {DATESTAMP} is the most recent monthly snapshot date USASpending has
published (auto-detected by scraping the archive listing). Each ZIP contains one or more
CSV files with every prime award transaction for that agency/FY.
Fiscal years pulled: --. Source code and the exact fetch script are on GitHub.
Every modification to a federal contract carries an action_type_code. Three of
those codes indicate the contract was terminated:
| Code | Reason | Meaning |
|---|---|---|
F |
Terminate for Convenience | The government ended the contract because it was in the government's interest. No contractor fault implied. |
E |
Terminate for Default | The contractor failed to perform. Used for commercial-items and simplified-acquisition contracts. |
X |
Terminate for Cause | The contractor failed to perform on a non-commercial contract. Similar to Default but in different FAR parts. |
The pipeline scans every contract modification in the source data and keeps only rows with one of these three codes. Non-termination modifications (option exercises, funding changes, administrative corrections, etc.) are dropped at ingestion.
A single contract can have more than one termination modification — partial terminations, rescissions, and re-filings all show up as separate mods. The dashboard preserves every one of them as its own row, so a contract with multiple terminations appears multiple times.
Mod $ Change is the raw federal_action_obligation on
the termination modification, using the source data's sign convention:
The dashboard's Net $ Change stat is the signed sum across all visible rows. A negative total means money was net pulled back (the expected direction); the stat updates as you filter the table.
The State column is
primary_place_of_performance_state_code from USASpending — the
2-letter US code for where the work was performed. No fallback fields are used.
Rows with no value are labeled Unknown in the table and filter
(selectable/excludable like any other state).
About 9.3% of termination rows have no state populated in the source data. These are typically foreign place-of-performance, undisclosed recipients (e.g., cases recorded as "DOMESTIC AWARDEES (UNDISCLOSED)"), services spanning multiple states, or simply missing data. Those rows are included in every table/chart count and the Net $ Change stat, but don't appear on the map.
total_obligated reflects the latest cumulative value on the contract at
the moment of the termination modification. It may have been subsequently adjusted.
action_type_code. A subaward
being canceled produces no direct signal in any public feed; at best you could infer
it by diffing consecutive snapshots for disappearances. When a prime is terminated
its downstream subs effectively end too, but that cascade is not reported as its own
event.