Free Federal Contracts API
The largest federal contract actions per day from USAspending as JSON, with the recipient mapped to its listed parent so obligations can be summed by ticker. Updated daily; late agency reports fill in over the following weeks.
Endpoints
/api/markets/federal-contracts?days=7&listed=1Largest actions in the window, 100 rows; listed=1 keeps recipients mapped to a ticker.
/api/markets/federal-contracts?by=ticker&days=30Obligations summed by listed parent in the window.
/api/markets/federal-contracts?ticker=LMTActions for one parent, newest first, up to 200.
/api/markets/federal-contracts/csvLargest actions of the last 90 days as CSV, up to 10,000 rows.
Response shape
Every endpoint returns the same JSON envelope: { data, updatedAt, source, docs, license, attribution, meta }. In meta, source names who publishes the data and sourceAttribution is the credit line to show with it. The data field is an array of records with these fields:
| Field | Type | Description |
|---|---|---|
| actionDate | string | Date the action was signed |
| awardId | string | Contract or order number (PIID) |
| mod | string | null | Modification number; 0 or null is the original award |
| actionType | string | null | FPDS action type code |
| amountUsd | number | Dollars obligated by this action; negative for de-obligations |
| recipientName | string | Recipient legal name as registered |
| ticker | string | null | Ticker of the recipient's listed parent; null when private or not matched |
| awardingAgency / awardingSubAgency | string | null | Awarding department and bureau |
| awardType | string | null | Definitive contract, delivery order, BPA call, purchase order |
| naicsCode | string | null | Industry code of the work |
| description | string | null | Agency's description of the action, up to 1,000 characters |
| generatedId | string | null | USAspending award id; https://www.usaspending.gov/award/{generatedId} |
Coverage is the largest contract actions of each action date. Agencies report with up to a 90-day lag, so recent dates fill in over time.
Numeric fields typed string in the table carry exact decimals; parse them with your language's decimal type. No key needed to start: 10 requests a minute per IP without a key and 30 a minute with a free account key, with at least six months of history. A 429 response carries a Retry-After header in seconds. Credit XOOMAR with a link to the dataset page when you republish the data; the data terms are on the terms page.
A free account key raises the limit; send it in an X-API-Key header.
Frequently Asked Questions
Where does the data come from?
What are the rate limits?
Data on this page is provided for informational purposes only and is not financial advice. See our editorial policy.