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. Daily refresh of the last ten action dates and a weekly sweep of sixty for late reports.
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=LMTEvery stored action for one parent, newest first.
/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 }. 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 | Listed parent from the contractor map; null when private or unmatched |
| 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 top few hundred actions per action date (roughly everything above $1M). Agencies report with up to a 90-day lag, so recent dates fill in over time.
Numeric values arrive as strings where precision matters (prices, rates); parse with your language's decimal type for accounting-grade math. Rate limiting is fair-use per IP; a 429 response includes a Retry-After header. No authentication or API key needed. Attribution is appreciated: xoomar.com/markets.
Need more headroom? A free account raises your limit to 120 requests a minute with 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.