Government Contract Awards Data: USAspending Bulk Download, TED, and Beyond
Published 2026-08-04 · DataForge team
Governments are the world’s largest buyers, and almost everything they buy is disclosed. The problem was never access — it’s that the data is scattered across a dozen national portals, each with its own schema, currency, language and idea of what a “supplier name” is. This guide maps the free official sources for government contract awards data, shows working bulk-download code, and explains exactly where the pain starts if you need more than one country.
The official sources, country by country
United States — USAspending.gov. The canonical source for federal spending: every prime contract award action since FY2008, with obligation amounts, NAICS/PSC codes, agency, recipient and place of performance. Bulk access is excellent: monthly full database download archives (CSV), a REST API, and even a complete PostgreSQL snapshot. If you only need US federal awards, USAspending is genuinely great and you should use it.
United States — SAM.gov. Upstream of spending: contract opportunities (solicitations, pre-awards, award notices). This is where business development teams look, because by the time an award reaches USAspending the deal is long closed. Public CSV extracts and an API exist but daily-file management is on you.
European Union — TED (Tenders Electronic Daily). All EU above-threshold notices: ~520 official journal issues a year, XML/CSV bulk packages, plus an API. Multilingual, and the eForms schema migration (2023–2024) split the corpus into two incompatible formats — pre- and post-migration notices need separate parsers.
United Kingdom — Contracts Finder + Find a Tender. Two portals (below/above threshold), both with OCDS-format APIs.
Canada — CanadaBuys; Australia — AusTender. Both publish awards as CSV downloads; AusTender data goes back to 2007.
Every one of these is free. So what’s the catch?
Where the pain starts
Schemas don’t line up. USAspending has ~280 columns; TED eForms is nested XML with business terms like BT-3202; CanadaBuys ships bilingual column headers. “Award amount”, “award date” and “buyer” mean subtly different things in each. Harmonizing to one awards table is weeks of mapping work — we know because we did it: the result is a single schema across 11.45M notices from all portals above.
Supplier names are chaos. The same vendor appears as “Lockheed Martin Corporation”, “LOCKHEED MARTIN CORP”, “Lockheed Martin Corp.” and a dozen subsidiary spellings — within one portal. Across portals it’s worse (legal forms differ by country: GmbH, S.p.A., Pty Ltd). Any “top suppliers” ranking or market-share analysis is garbage without entity resolution. Our pipeline resolves 358,330 canonical suppliers from millions of raw name strings, with alias lists preserved so you can audit every merge.
Currencies and inflation. TED awards are in EUR (or national currencies pre-conversion), AusTender in AUD. Comparing anything cross-border requires FX normalization with a documented convention.
Award ≠ payment. USAspending obligations get de-obligated; TED framework agreements state ceiling values that may never be spent. Serious analysis distinguishes notice types — our corpus keeps opportunities, awards and amendments as typed rows.
Bulk download: working code
US federal awards for one fiscal year via the USAspending bulk API:
import requests, time
r = requests.post(
"https://api.usaspending.gov/api/v2/bulk_download/awards/",
json={
"filters": {
"prime_award_types": ["A", "B", "C", "D"], # contracts
"date_type": "action_date",
"date_range": {"start_date": "2024-10-01", "end_date": "2025-09-30"},
},
"file_format": "csv",
},
)
status_url = (
f"https://api.usaspending.gov/api/v2/bulk_download/status/?file_name={r.json()['file_name']}"
)
while True:
s = requests.get(status_url).json()
if s["status"] in ("finished", "failed"):
break
time.sleep(30)
print(s["file_url"]) # multi-GB zip of CSVs
Once you have a harmonized awards table, the questions get easy. Top suppliers to a specific buyer segment:
SELECT supplier_canonical_name,
COUNT(*) AS awards,
SUM(award_value_usd) AS total_usd
FROM awards
WHERE buyer_country = 'US'
AND cpv_or_naics LIKE '5415%' -- IT services
AND award_date >= '2024-01-01'
GROUP BY supplier_canonical_name
ORDER BY total_usd DESC
LIMIT 25;
That supplier_canonical_name column is the entire value proposition of a cleaned dataset — without entity resolution this query returns the same company five times.
A worked example: tracking an incumbent’s contract expiries
The single highest-value B2G sales motion is targeting contracts as they approach recompete. Here is the full workflow on free US data, so you can judge the effort honestly. First, pull all active contracts in your NAICS from the USAspending archive (the monthly full download contains period_of_performance_current_end_date). Second, filter to end dates 6–18 months out — the window when agencies start market research for the recompete. Third, look up each opportunity’s history on SAM.gov to find the original solicitation and whether it was set aside for small business. Fourth — and this is where DIY breaks down — connect the recipient name to everything else you know about that vendor: their other awards, their agencies, their teaming history. Steps one to three are a day of scripting. Step four is entity resolution, and it’s why cleaned data exists.
-- Contracts in IT services ending in the next 12 months, by agency
SELECT awarding_agency_name,
recipient_canonical_name,
award_value_usd,
period_end_date
FROM awards
WHERE naics_code LIKE '5415%'
AND period_end_date BETWEEN CURRENT_DATE
AND CURRENT_DATE + INTERVAL '12 months'
ORDER BY award_value_usd DESC;
The EU equivalent uses TED’s contract award notices with BT-536 (duration) fields — same logic, entirely different plumbing, which is again the argument for a harmonized table if you sell on both sides of the Atlantic.
What people build with awards data
- Sales intelligence. Who buys what you sell, from whom, at what price, on what renewal cycle. Incumbent contracts nearing expiry are the highest-intent B2G leads that exist.
- Competitor tracking. Every award your competitor wins is public, with value and buyer.
- Market sizing. Public-sector TAM by category and country, from actual transactions instead of analyst estimates.
- Journalism and accountability. Sole-source awards, supplier concentration, price outliers.
- Supplier risk. Which vendors depend heavily on one buyer or one country.
Want a quick look without downloading anything? Our free Top Government Contractors leaderboard ranks the 500 largest suppliers by award value across all portals we cover.
Free portals vs. a cleaned dataset
| Official portals | DataForge dataset | |
|---|---|---|
| Cost | Free | From $499 |
| Coverage | Per-country, per-portal | US federal + EU TED + UK + Canada + Australia in one schema (11.45M notices) |
| Schema | 6+ incompatible formats (incl. TED eForms split) | One normalized notice/award schema |
| Suppliers | Raw name strings | 358,330 entity-resolved suppliers with alias audit trail |
| Currency | Native currencies | USD-normalized values (documented FX convention) |
| Freshness | Real-time (portals) | Snapshot editions; monthly refresh available |
| Effort | Weeks of pipeline work, ongoing maintenance | Load and query |
Honest guidance: if you need only US federal awards, USAspending’s own bulk files are excellent — start there. The cleaned dataset pays for itself when you need cross-portal coverage, resolved supplier entities, or you’d rather not maintain five national pipelines. Check the free 500-row sample first.
FAQ
Is procurement data legal to use commercially? Yes — publication is required by law (FFATA in the US, EU procurement directives). Attribution norms vary; our datasheet documents each source’s terms.
Why don’t award totals match “company revenue from government”? Awards are commitments, sometimes ceilings; actual outlays differ. Subcontracts are mostly invisible. Treat totals as an activity signal, not audited revenue.
Does the data include unsuccessful bidders? Generally no — portals publish winners. TED sometimes includes offer counts, which supports competition-intensity analysis.
What’s the difference between SAM.gov and USAspending — don’t they overlap? They cover different stages of the same lifecycle. SAM.gov publishes opportunities — solicitations, presolicitations, award notices — the forward-looking view a bidder needs. USAspending publishes spending — the financial record of awards after they happen, sourced from agency financial systems (FPDS for contracts). An award appears in both, described differently: SAM.gov as a notice with narrative text and attachments, USAspending as a structured financial transaction with obligation amounts and modifications over time. Serious pipelines ingest both and link them; our corpus keeps them as typed notices so nothing is lost in the merge.
Can I get subcontract data? Partially. US prime contractors above thresholds must report first-tier subawards, published on USAspending (the FSRS feed) — coverage is real but incomplete, and enforcement historically loose. Below first tier, essentially invisible everywhere. Any “supplier ecosystem” analysis should state this limitation up front.
What about state and local procurement? A different, much more fragmented world: 50 states plus tens of thousands of municipalities, each with its own portal (or none). Some aggregate through OpenGov/Bonfire-type platforms; there is no comprehensive free source. Our current corpus covers national-level portals; state/local is on the roadmap where portals publish bulk data with usable terms.
How do I detect contract renewals vs new awards? In USAspending, modifications carry the same award ID with incrementing modification numbers — a renewal/extension is a modification with extended period-of-performance, while a recompete is a new award ID, usually with the same buyer, NAICS and often the same description text. Detecting recompete lineage across award IDs requires fuzzy matching on description + buyer + incumbents, which is analysis our supplier-resolved corpus makes feasible but which no portal gives you directly.
How far back does coverage go? USAspending to FY2008, AusTender to 2007, TED bulk to 2011, UK portals to ~2015. Our packaged corpus focuses on recent complete years; the datasheet lists per-source windows.