Search who won government contracts by company name, UEI, agency, NAICS code, award amount, and date. Every record is a SAM.gov award notice normalized into 16 structured fields, updated daily.
Finding out who won federal contracts should be simple. In practice, it's not.
SAM.gov publishes award notices, but they're mixed into the same feed as solicitations, presolicitations, and sources sought notices. The SAM.gov API has no direct filter for awardee name or UEI. To answer"what has Booz Allen won recently?" you pull everything and filter client-side.
FPDS.gov has award data too, but the API is SOAP-based (XML, not JSON), poorly documented, and requires significant effort to parse. USASpending.gov has a modern REST API, but its paginated search endpoint returns NULL for NAICS, PIID, solicitation ID, and obligation amount. You have to fetch each award's detail endpoint separately to get those. And USASpending never exposes contracting officer contact info, which is often the single most useful field for BD work.
If you're building an application that needs federal award data, you end up integrating multiple government data sources with different schemas, rate limits, and data quality problems. This endpoint is the alternative.
Two endpoints, one for search, one for direct lookup by award number.
Search awards (all filters combinable):
GET https://govconapi.com/api/v1/awards/search
Look up a specific award by contract number:
GET https://govconapi.com/api/v1/awards/{award_number}
| Parameter | Type | Description |
|---|---|---|
| awardee_name | string | Partial match, case-insensitive. "boeing" matches"THE BOEING COMPANY","BELL BOEING JOINT PROJECT OFFICE", etc. |
| uei | string | Exact match on Unique Entity Identifier. Case-insensitive (server upper-cases before querying). |
| agency | string | Partial match on full agency path. "defense" finds all DoD sub-agencies. "health" finds HHS and components. |
| naics | string | Single NAICS code (e.g. 541519). Uses array containment: returns awards where this code appears in the NAICS array. See quirk below. |
| amount_min | integer | Minimum award amount in dollars. Inclusive. |
| amount_max | integer | Maximum award amount in dollars. Inclusive. |
| awarded_after | date | Awards on or after this date. Format: YYYY-MM-DD. |
| awarded_before | date | Awards on or before this date. Format: YYYY-MM-DD. |
| state | string | Awardee state, 2-letter uppercase. VA, MD, TX. Filters on awardee_state field. |
| sort_by | string | Field to sort by. Default: award_date. Options: award_date, award_amount. |
| sort_order | string | desc (default) or asc. |
| limit | integer | Results per page. Free tier: max 50. Developer tier: max 1,000. |
| offset | integer | Pagination offset. Use with total in the response to page through results. |
Find all DCSA awards to small businesses in 2026:
curl -H"Authorization: Bearer YOUR_API_KEY" \"https://govconapi.com/api/v1/awards/search?agency=counterintelligence+and+security&awarded_after=2026-01-01"
IT services (NAICS 541512) awards over $1M in Virginia:
curl -H"Authorization: Bearer YOUR_API_KEY" \"https://govconapi.com/api/v1/awards/search?naics=541512&amount_min=1000000&state=VA"
All awards to a specific company by UEI:
curl -H"Authorization: Bearer YOUR_API_KEY" \"https://govconapi.com/api/v1/awards/search?uei=JLZMJKQZQ5N5"
SDVOSB construction awards sorted by amount descending:
curl -H"Authorization: Bearer YOUR_API_KEY" \"https://govconapi.com/api/v1/awards/search?naics=236220&sort_by=award_amount&sort_order=desc"
Look up a specific contract by award number:
curl -H"Authorization: Bearer YOUR_API_KEY" \"https://govconapi.com/api/v1/awards/HC108526C0012"
Paginate through results (page 2 of 1,000-record pages):
curl -H"Authorization: Bearer YOUR_API_KEY" \"https://govconapi.com/api/v1/awards/search?agency=defense&limit=1000&offset=1000"
Search returns a data array, a pagination block, and a filters_applied echo. The total row count lives at pagination.total. Use pagination.has_next to know when to stop paging.
Single-record lookup (/awards/{award_number}) returns a flat record with the same 16 fields, no pagination wrapper.
| Field | Type | Notes |
|---|---|---|
award_number | string | Contract/delivery order number. Primary lookup key. |
title | string | Award notice title as posted to SAM.gov. |
awardee_name | string | Winning company name. Uppercase. SAM.gov format. |
awardee_uei | string | null | Unique Entity Identifier. Present on most recent awards; may be null on older records. |
awardee_cage_code | string | null | 5-character CAGE code. May be null. |
awardee_city | string | null | Awardee city of performance or registration. |
awardee_state | string | null | 2-letter state code. Uppercase. Use this in the state filter. |
award_amount | float | null | Dollar value. Null when SAM.gov did not include an amount (common on IDV notices). |
award_date | string | null | ISO 8601 date string. The date the award was posted, not necessarily signed. |
agency | string | Full dot-separated agency hierarchy. See quirk below. |
naics | array | Array of NAICS code strings. Usually one element; occasionally multiple. Never null, empty array if not provided. |
set_aside_type | string | null | Set-aside designation:"Total Small Business","SDVOSB","8(a)","HUBZone", etc. Null if unrestricted. |
solicitation_number | string | null | Links back to the original solicitation. Use with the opportunities endpoint to get pre-award detail. |
contact_name | string | null | Contracting officer or specialist name. |
contact_email | string | null | Contracting officer email. Present on 93.2% of records in April 2026. |
notice_id | string | SAM.gov internal notice ID. Use with GET /api/v1/opportunities/{notice_id} to fetch the full 59-field record including description and attachments. |
The naics field is a JSON array, even when there's only one code: ["541519"] not "541519". The naics query parameter uses PostgreSQL array containment, it finds records where your code appears anywhere in the array. You can only filter by one NAICS per request; for multiple codes, make separate requests or paginate and filter client-side.
When sorting by award_amount descending (to find the largest awards), records with a null amount appear at the end. When sorting ascending, nulls appear first. This is standard SQL NULLS LAST/FIRST behavior but worth knowing if your results look truncated. Tiebreaker is notice_id.
The agency field looks like "DEPT OF DEFENSE.DEFENSE COUNTERINTELLIGENCE AND SECURITY AGENCY.DCSA HEADQUARTERS". The agency filter is a partial match on this full string, so agency=navy will also match"DEPT OF THE NAVY.NAVAL AIR SYSTEMS COMMAND". Use more specific terms to narrow it (agency=naval+air+systems).
The uei parameter requires the full 12-character identifier (no prefix matching), but lowercase or mixed-case works: jlzmjkqzq5n5, JLZMJKQZQ5N5, and jLzMJKQZq5n5 all return the same result because the server upper-cases the value before querying.
If you request limit=500 on a free trial, the API returns a 403 error rather than silently capping at 50. Free tier: max 50 results per request. Developer tier: max 1,000. Check your limit before hitting this in production.
This endpoint is pre-filtered to actual awards. Solicitations, presolicitations, and sources sought do not appear. But not every award notice in SAM.gov includes all 16 fields. award_amount is null on indefinite delivery vehicles (IDVs) and some task orders where the ceiling amount isn't specified at award time.
Each award record includes contact_name and contact_email when SAM.gov published them. Coverage measured on April 2026 dataset: 99.2% have a contact name, 93.2% have an email. These are the contracting officers who issued the contract.
This matters for BD: knowing who awarded a contract in your space tells you which CO to get in front of for the re-compete. A company that won a $5M IT services contract two years ago is probably dealing with the same CO when that contract comes back up for renewal.
Use limit and offset to page through large result sets. The pagination.total value tells you how many records match your query across all pages; stop when pagination.has_next is false.
Two layers, both enforced:
Hit either and you get a 429 with a backoff window. Bulk pulls are easy under these caps: 1,000 rows per request × 1,000 requests per hour = 1M rows/hour before the per-key limit bites.
Find out who's winning contracts in your NAICS code. Filter by NAICS and date range to see every company winning that type of work, how much they're getting, and which agencies are awarding it. Sort by award_amount descending to find the largest wins.
Before teaming or subcontracting, check a company's federal award history by UEI or name. See their total awards, which agencies they work with, typical contract sizes, and whether they win set-aside work, without touching FPDS or USASpending.
How much is the government spending on a specific type of work? Filter by NAICS and date range, use the total field to count awards, and sum award_amount to get dollar volume. Break it down by agency to find where spending is concentrated.
Search by solicitation_number or awardee name to find prior awards for a recompeting contract. Incumbents are listed with their award amounts, useful for pricing and understanding the CO's past decisions.
Poll for new awards in specific NAICS codes or agencies. Combine awarded_after with yesterday's date to fetch only new awards. Store the contacts. The CO who awarded a $10M contract is often the same person you want to call before the next one posts.
Every award record includes a notice_id and a solicitation_number. Use these to pull richer data from the opportunities endpoint:
Get the full 59-field opportunity record for an award:
# Step 1: search awards
curl -H"Authorization: Bearer YOUR_API_KEY" \"https://govconapi.com/api/v1/awards/search?awardee_name=swish+data"
# Response includes notice_id:"a3f9b1c2d8e4..."
# Step 2: fetch full detail (description, attachments, all 59 fields)
curl -H"Authorization: Bearer YOUR_API_KEY" \"https://govconapi.com/api/v1/opportunities/a3f9b1c2d8e4..."
The full opportunity record includes the description text, any attached documents, the full point of contact block, place of performance, and all 59 normalized fields, useful when you need more than the award summary.
| GovCon API Awards | SAM.gov Direct | FPDS.gov | USASpending.gov | |
|---|---|---|---|---|
| Search by awardee name | Yes (partial match) | No direct filter | Yes (SOAP/XML) | Yes (recipient_search_text) |
| Search by UEI | Yes (exact, case-insensitive) | No | Yes (UEI, CAGE, or legacy DUNS) | Yes (via recipient_search_text or the recipient profile endpoint) |
| JSON response | Yes | Yes | No (XML) | Yes |
| NAICS in search response | Yes (array) | Yes | Yes | No (NULL on spending_by_award; fetch the detail endpoint for NAICS) |
| CO contact info | 93% of records | Sometimes | Yes | No (not exposed) |
| Links to solicitation | Yes (solicitation_number) | Sometimes | Yes | Partial (NULL on spending_by_award, populated on detail endpoint) |
| Historical depth | Q4 2024 onward | Recent notices only | Back to FY 2008 | Back to FY 2008 |
| Setup time | Minutes | 2-3 weeks (entity reg) | Hours (SOAP setup) | Minutes (no key required) |
All award data comes from SAM.gov award notices, collected daily and normalized into a consistent structure.
Awards search is included on all GovCon API plans.
No feature gating on filters, every parameter is available on every plan. The only restriction between tiers is the result count per request. See full pricing.
Building something with award data? Press Ctrl+Enter to share what you're working on or what fields you need.