Skip to content

Data Freshness

Contract notices are collected daily at 2:00 AM UTC from SAM.gov using their official API. The collection includes:

  • 48-hour lookback window to ensure completeness
  • Never archived - all historical data is retained (730+ days)
  • Full descriptions extracted from SAM.gov notice pages
  • Award data linked when available

Check /api/v1/status for the current freshness of each data source.

Important: We Keep ALL Records

We intentionally never archive or delete records. This means:

  • To filter for currently-open opportunities, pass ?active_only=true on /opportunities/search. This is a convenience filter we compute as archive_date_detailed > CURRENT_DATE, not a SAM source field.
  • Use response_deadline for bid-deadline awareness (independent of archive status).
  • Use notice_type to understand lifecycle (Solicitation → Award Notice).
  • The stored active field is always "Yes" by design (we never archive). Don't treat it as a status flag, use ?active_only=true or archive_date_detailed directly instead.
  • Past-deadline and archived opportunities remain queryable for competitive intelligence by default, pass ?active_only=true to filter them out.

Check /api/v1/status for current counts.

Tracking amendments: Same solicitation_number appears multiple times (original + amendments). Use notice_id for unique records, or group by solicitation_number to track changes.

Tips for Getting the Most Out of the API

  • Use limit=1000 instead of paginating at 100. If you need 5,000 records, that's 5 requests instead of 50. Saves API calls and time.
  • Use posted_after for daily syncs. Instead of scanning all 680K+ records, fetch only what's new since your last sync. posted_after=2026-04-03 returns just today's notices.
  • Know your notice_type values:
    • Combined Synopsis/Solicitation (71K) - most common, open for bids
    • Award Notice (43K) - contracts already awarded, has winner data
    • Solicitation (40K) - open for bids
    • Sources Sought (15K) - market research, not yet a solicitation
    • Presolicitation (13K) - upcoming, not yet open
    • Special Notice (9K) - informational only
  • Find who won a contract: Search by solicitation_number and filter notice_type=Award Notice. The award record has awardee_name, award_amount, and award_date.
  • Find open opportunities only: Use due_after=2026-04-04 (today's date) to get only notices with a future deadline. Combine with notice_type=Solicitation or notice_type=Combined%20Synopsis/Solicitation.
  • Cache responses locally. Data updates once daily at 2 AM UTC. If you're calling the same query multiple times per day, cache the first response.

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.