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=trueon/opportunities/search. This is a convenience filter we compute asarchive_date_detailed > CURRENT_DATE, not a SAM source field. - Use
response_deadlinefor bid-deadline awareness (independent of archive status). - Use
notice_typeto understand lifecycle (Solicitation → Award Notice). - The stored
activefield is always "Yes" by design (we never archive). Don't treat it as a status flag, use?active_only=trueorarchive_date_detaileddirectly instead. - Past-deadline and archived opportunities remain queryable for competitive intelligence by default, pass
?active_only=trueto 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=1000instead of paginating at 100. If you need 5,000 records, that's 5 requests instead of 50. Saves API calls and time. - Use
posted_afterfor daily syncs. Instead of scanning all 680K+ records, fetch only what's new since your last sync.posted_after=2026-04-03returns just today's notices. - Know your
notice_typevalues:Combined Synopsis/Solicitation(71K) - most common, open for bidsAward Notice(43K) - contracts already awarded, has winner dataSolicitation(40K) - open for bidsSources Sought(15K) - market research, not yet a solicitationPresolicitation(13K) - upcoming, not yet openSpecial Notice(9K) - informational only
- Find who won a contract: Search by
solicitation_numberand filternotice_type=Award Notice. The award record hasawardee_name,award_amount, andaward_date. - Find open opportunities only: Use
due_after=2026-04-04(today's date) to get only notices with a future deadline. Combine withnotice_type=Solicitationornotice_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.