Federal Contracts API for Developers

Federal Contract Awards API

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.

47K+
Award Notices
11K+
Unique Awardees (UEI)
1,000+
Awarding Sub-Agencies
Daily
Data Updates

The Problem

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.

Endpoints

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}

Query Parameters

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.

Example Requests

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"

Response Format

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.

{"data": [ {"award_number": "HC108526C0012","title": "CYBER OPERATIONS SUPPORT SERVICES","awardee_name": "SWISH DATA CORPORATION","awardee_uei": "JLZMJKQZQ5N5","awardee_cage_code":"7AQP2","awardee_city": "RESTON","awardee_state": "VA","award_amount": 34500000.00,"award_date": "2026-02-14","agency": "DEPT OF DEFENSE.DEFENSE COUNTERINTELLIGENCE AND SECURITY AGENCY","naics": ["541512"],"set_aside_type": "Total Small Business","solicitation_number":"HC108526R0001","contact_name": "MARGARET JOHNSON","contact_email": "[email protected]","notice_id": "a3f9b1c2d8e4f7a0b2c5d8e1f3a6b9c2" } ],"pagination": {"limit": 20,"offset": 0,"total": 847,"has_next": true },"filters_applied": { /* applied filters echoed back */ } }

Single-record lookup (/awards/{award_number}) returns a flat record with the same 16 fields, no pagination wrapper.

Field Type Notes
award_numberstringContract/delivery order number. Primary lookup key.
titlestringAward notice title as posted to SAM.gov.
awardee_namestringWinning company name. Uppercase. SAM.gov format.
awardee_ueistring | nullUnique Entity Identifier. Present on most recent awards; may be null on older records.
awardee_cage_codestring | null5-character CAGE code. May be null.
awardee_citystring | nullAwardee city of performance or registration.
awardee_statestring | null2-letter state code. Uppercase. Use this in the state filter.
award_amountfloat | nullDollar value. Null when SAM.gov did not include an amount (common on IDV notices).
award_datestring | nullISO 8601 date string. The date the award was posted, not necessarily signed.
agencystringFull dot-separated agency hierarchy. See quirk below.
naicsarrayArray of NAICS code strings. Usually one element; occasionally multiple. Never null, empty array if not provided.
set_aside_typestring | nullSet-aside designation:"Total Small Business","SDVOSB","8(a)","HUBZone", etc. Null if unrestricted.
solicitation_numberstring | nullLinks back to the original solicitation. Use with the opportunities endpoint to get pre-award detail.
contact_namestring | nullContracting officer or specialist name.
contact_emailstring | nullContracting officer email. Present on 93.2% of records in April 2026.
notice_idstringSAM.gov internal notice ID. Use with GET /api/v1/opportunities/{notice_id} to fetch the full 59-field record including description and attachments.

Quirks and Edge Cases

NAICS is an array, not a string.

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.

Null values sort to the bottom on DESC, top on ASC.

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.

Agency is a full dot-separated hierarchy, not just the top-level name.

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).

UEI filter is exact match but case-insensitive.

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.

Plan limits return a 403, not a truncated result.

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.

Only records with an award number or notice_type = 'Award Notice' are returned.

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.

Contracting Officer Contacts

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.

Pagination

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.

# First page: offset=0 GET /api/v1/awards/search?naics=541512&limit=1000&offset=0 → {"data": [...],"pagination": {"limit":1000,"offset":0,"total":3847,"has_next":true}, ... } # Second page: offset=1000 GET /api/v1/awards/search?naics=541512&limit=1000&offset=1000 → {"data": [...],"pagination": {"limit":1000,"offset":1000,"total":3847,"has_next":true}, ... } # Total pages: ceil(3847 / 1000) = 4 requests

Rate limits

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.

Common Use Cases

Competitive intelligence

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.

Company due diligence

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.

Market sizing by NAICS

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.

RE-compete research

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.

BD pipeline and alerts

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.

Linking Awards to Full Opportunity Records

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.

How It Compares

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)

Data Source and Coverage

All award data comes from SAM.gov award notices, collected daily and normalized into a consistent structure.

Pricing

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.

Related Guides

Community Feedback

Building something with award data? Press Ctrl+Enter to share what you're working on or what fields you need.