Skip to content

Search awards

Search federal contract awards as a lean, award-focused list. Filter by awardee name, UEI, agency, NAICS, amount range, date range, or state. Each result is a 16-field record; pair the notice_id with /opportunities/{notice_id} for the full 59-field record when you need more.

For FPDS prime contract data, use /api/v1/contracts/*. This endpoint reads SAM Award Notices, which cover roughly 10 to 30 percent of federal contract obligations depending on the agency. The /contracts/* surface covers every FPDS prime contract action in the same coverage window, with denser subaward enrichment on the detail endpoint and a dedicated modification-trail endpoint. This endpoint remains in service for integrations that depend on its 16-field shape and CO contact field.

How It Works

  • All filters on every plan. Unlike opportunities, awards filters are not plan-gated. Plans differ on page size (Free 100, paid 1,000) and rate limit, not filter access.
  • Partial matching: awardee_name and agency are case-insensitive substring matches. awardee_name=boeing matches "BOEING DISTRIBUTION SERVICES, INC", "BELL BOEING JOINT PROJECT OFFICE", etc.
  • Cross-reference to the full record: every result carries notice_id; pass it to /opportunities/{notice_id} for the complete 59-field record.
  • Exact total, no estimate cap. Unlike opportunities search, pagination.total here is an exact count (no total_is_estimate flag). Page-forward math is reliable.

Concepts to know before you integrate.

  • award_amount is not always a clean dollar value. It can be 0 (common on indefinite-delivery-vehicle base records), null (no amount on the notice), or rarely a placeholder sentinel like 999999999999. Filter and aggregate defensively when you sum or sort.
  • award_date is the contract/award date, a calendar date with no time or timezone, distinct from posted_date on the parent notice. A small number of records carry implausible years (you may see a date like 9202-09-28 or 1921-09-27) straight from the source data. Because the default sort is award_date DESC, those corrupted future dates land at the very top of an unfiltered search. Add awarded_before=<today's date> or sort by award_amount if you need a clean newest-first list.
  • awardee_state is the awardee company's state, not the place of performance. If you want where the work happens, that lives on the parent notice (use the detail endpoint).
  • awardee_name is a raw source string and often has address fragments appended, e.g. "Boeing Company, The MO 63134-1939 USA". Match with substrings; prefer uei for identity when you have one.
  • award_uei_sam is missing on a share of records. A uei filter exact-matches only records where the UEI is populated; awards without a UEI are silently excluded even when the company is right. For broader coverage, fall back to awardee_name.

Filter Parameters

  • awardee_name: Company name (case-insensitive substring on awardee_name). Alias: name.
  • uei: Exact UEI match. Uppercased server-side; lowercase works.
  • naics: Exactly 6 digits. 2-5 digit prefix returns 400; a well-formed but nonexistent 6-digit code returns 200 with total=0 (an empty result can mean "bad code," not "no awards").
  • agency: Awarding agency, case-insensitive substring on the dotted hierarchy path.
  • amount_min: Minimum award_amount (≥ 0). amount_min=0 is applied, it excludes null-amount rows.
  • amount_max: Maximum award_amount.
  • awarded_after: Awards on or after this calendar date (YYYY-MM-DD). On the free trial, subject to the 90-day search window (see note below). Alias: date_from.
  • awarded_before: Awards on or before this date (YYYY-MM-DD). Alias: date_to.
  • state: Awardee state code (2-letter, uppercased). This is the awardee's HQ state, NOT performance.
  • sort_by: award_amount, award_date, awardee_name. Default is award_date. Invalid value returns 400 with the valid list (no silent fallback).
  • sort_order: asc or desc (default desc). NULLs sort first on asc, last on desc. Tie-broken by notice_id for stable pagination.
  • limit: Page size. Default 100; maximum 100 on the free trial and 1,000 on paid plans. Over the maximum returns 402; limit=0 returns 422.
  • offset: ≥ 0. Negative returns 422.
  • fields: Comma-separated projection; notice_id always included. Unknown name returns 400. See Response Shaping.

On the free trial this endpoint is subject to the search window: awarded_after is injected (when omitted) or clamped (when older than 90 days), the same way date_from behaves on opportunities search, and the response window block says which. Paid plans have no window. Always read filters_applied.awarded_after to see the effective date. Because of the corrupted future-dated rows discussed in the concepts note above, awarded_before does not cleanly cap the top of the result set either, pin both bounds when you need a tight range.

Filters not available here (use /opportunities/search instead): keywords, psc, set_aside, notice_type, active_only, has_attachments, value_min / value_max. Awards has the award-specific amount_min / amount_max and awarded_* dates instead. There is no keywords equivalent on this endpoint; use opportunities search and filter by notice_type=Award Notice if you need full-text matching.

Response (16 fields per award)

{
  "data": [
    {
      "award_number": "FA8620-25-C-0012",
      "awardee_name": "NORTHROP GRUMMAN SYSTEMS CORP",
      "awardee_uei": "MF2LE5RK6L84",
      "award_amount": 12500000,
      "award_date": "2026-03-15",
      "agency": "DEPT OF THE AIR FORCE",
      "naics": ["336411"],
      "solicitation_number": "FA8620-25-R-0009",
      "title": "Advanced Sensor Integration Support",
      "set_aside_type": null,
      "awardee_cage_code": "80205",
      "awardee_city": "MELBOURNE",
      "awardee_state": "FL",
      "contact_name": "John Smith",
      "contact_email": "[email protected]",
      "notice_id": "abc123def456"
    }
  ],
  "pagination": {
    "limit": 20,
    "offset": 0,
    "total": 847,
    "has_next": true
  },
  "filters_applied": {},
  "window": { "plan_window_days": null, "earliest_searchable": null, "clamped": false }
}

Examples

Find awards by company name:

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://govconapi.com/api/v1/awards/search?awardee_name=boeing&limit=10"

DoD awards over $1M in 2025:

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://govconapi.com/api/v1/awards/search?agency=defense&amount_min=1000000&awarded_after=2025-01-01"

IT services awards in Virginia:

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://govconapi.com/api/v1/awards/search?naics=541519&state=VA"

Find all awards for a specific company by UEI:

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://govconapi.com/api/v1/awards/search?uei=XX2WFHJEFB45&sort_by=award_date"

For FFATA subaward enrichment on a specific contract, use the single-record /awards/{award_number} endpoint; the full prime→sub flow with named sub-vendors is on the dedicated /subawards/* surface.

A REST API and MCP server for U.S. federal procurement data.

Get a free key, emailed instantly, or follow the quickstart.

Found something wrong, missing or confusing on this page?

Press Ctrl + Enter to send a note. Highlight text first and it travels with your note.