Skip to content

Recompete Watchlist

The Recompete Watchlist: federal contracts in a market entering their recompete window, each row carrying the bid/no-bid facts (incumbent, value, end dates and option runway, contestability, incumbent-stress signals, named subcontractors) plus a market-level feed of live sources-sought and pre-solicitation notices with the contracting officer's contact. Composed from prime_awards (FPDS) + exclusions + subawards + opportunities. Factual only; no win score. Full guide: /recompete-watchlist.

Parameters

A market filter (naics or agency) is required. Unknown parameters return 400.

  • naics: exactly 6 digits.
  • agency: awarding agency name substring, case-insensitive.
  • set_aside: set-aside type substring (e.g. veteran, 8(a), women).
  • state: 2-letter place-of-performance state code.
  • amount_min / amount_max: bounds on current contract value (USD). 0 is honored. Accepts value_min / value_max as aliases.
  • ends_after_months / ends_within_months: the recompete window floor and ceiling, in months from today (default 0 and 18). Set ends_after_months=6 to skip contracts too close to influence.
  • date_anchor: current_end (next decision point, default) or potential_end (guaranteed final end, all options used).
  • options_exhausted_only: true narrows to the high-confidence must-recompete subset; options_window_days (default 90) sets the threshold.
  • early_signal_days / early_signal_types: lookback in days (default 180) and notice types for the early-signal feed. Type aliases include sources_sought, rfi, presolicitation, special_notice, industry_day, solicitation, justification.
  • incumbent_excluded: true narrows to recompetes whose incumbent is currently on the SAM exclusions list (can't legally win the recompete); false to recompetes whose incumbent is clean. Omit for both.
  • sort_by: ends_soonest (default), value, mod_churn, de_obligated.
  • limit: Results per page. Default 100, maximum 1,000. Over the maximum returns 402. offset: pagination offset.

Response

Standard list envelope plus a top-level early_signals block. Each row in data carries incumbent / incumbent_uei, agency / sub_agency / agency_code / sub_agency_code / awarding_office (published names plus their stable CGAC-family codes), naics / psc / set_aside, the timing fields (current_end_date, potential_end_date, option_runway_days, months_until_end), current_value, the contestability pair extent_competed + offers_last_cycle (which is null when no competition was recorded, never coerced), the incumbent-stress signals de_obligated / mod_churn / incumbent_excluded, the vehicle fields is_task_order / parent_award_id_piid, and subcontractors (the incumbent's named subs from FFATA, often empty). early_signals lists live sources-sought and pre-solicitation notices in the market, each with the CO name, email, and response deadline. _sources is ["usaspending_fpds", "sam_exclusions", "usaspending_ffata", "sam_opportunities"].

{
  "agency": "Department of Veterans Affairs",
  "sub_agency": "Department of Veterans Affairs",
  "agency_code": "036",
  "sub_agency_code": "3600",
  "awarding_office": "TECHNOLOGY ACQUISITION CENTER NJ (36C10B)",
  "incumbent_excluded": false
}

Single recompete detail: GET /api/v1/recompetes/{piid}

Fetch one recompeting contract by its PIID for a flat object with two blocks:

  • recompete: the full row shape of a data row above (incumbent, timing including option_runway_days and months_until_end, contestability, value, de_obligated / mod_churn / incumbent_excluded, vehicle fields, and the incumbent's named subcontractors).
  • vulnerability: an incumbent-vulnerability block, { "count": N, "reasons": [...] }, composed from the incumbent's SBA-registered certifications and FPDS obligation history. Each reason is a fact carrying its own evidence text, never a score; an empty reasons means no signal fired, not "safe". Reason codes:
  • cert_lapse: the incumbent's SBA-registered certification for this contract's set-aside program expires before the contract's current end date, so they may be ineligible to recompete under the same set-aside. Fires only when a matching, dated certification exists (absence is not treated as a signal).
  • lone_holder: the incumbent holds only a small number of distinct federal prime contracts on record (thin past performance).
  • single_agency: the incumbent's federal obligations concentrate in a single top-level department; the reason text states whether that department is the one running this recompete (entrenchment) or a different one (thin roots with the actual buyer), and the reason carries same_department_as_recompete (bool).

_sources is ["usaspending_fpds", "sba_dsbs", "sam_exclusions"]. An unknown PIID returns 404; the endpoint is Pro (402 otherwise). It is an ID lookup, so it is never windowed.

Example

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://govconapi.com/api/v1/recompetes?naics=541512&agency=veterans&set_aside=veteran&ends_after_months=6&ends_within_months=18&amount_max=25000000&sort_by=ends_soonest"

# one recompeting contract + the incumbent-vulnerability block
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://govconapi.com/api/v1/recompetes/{piid}"

Errors

  • 400: no market filter (naics or agency required), or a market too broad to evaluate in time (add naics).
  • 402: the Recompete Watchlist requires Pro.
  • 429: rate limit exceeded.

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.