Home / APIs / Federal contracts
Federal contracts

Recompete Radar API: federal contracts ending soon, with the incumbent and every SAM.gov notice that names them

Federal contracts and IDVs ending in the next 24 months as JSON: incumbent, value, agency, NAICS, set-aside, offers received and linked SAM.gov notices. Paid plans.

curl -H "Authorization: Bearer $SECFEED_KEY" \
  "https://secfeedapi.com/v1/sam/recompetes?naics=5415&setAside=SBA&size=2"
import os, requests

r = requests.get(
    "https://secfeedapi.com/v1/sam/recompetes",
    params={'naics': '5415', 'setAside': 'SBA', 'size': '2'},
    headers={"Authorization": f"Bearer {os.environ['SECFEED_KEY']}"},
)
print(r.json())
{
  "total": 1046,
  "window": {
    "endFrom": "2027-04-28",
    "endTo": "2028-04-28"
  },
  "recompetes": [
    {
      "awardKey": "CONT_AWD_75N98125F00001_7529_HHSN316201500050W_7529",
      "piid": "75N98125F00001",
      "parentPiid": "HHSN316201500050W",
      "kind": "contract",
      "awardType": "DELIVERY ORDER",
      "description": "THIS IS A FIRM FIXED PRICE DELIVERY ORDER FOR QUANTITY (16) EACH ORACLE DATABASE ENTERPRISE EDITION, ORACLE PARTITIONING, AND ORACLE WEBLOGIC SERVER STANDARD EDITION PROCESSOR LICENSES PLUS MAINTENANCE, UPDATES AND TECHNICAL SUPPORT FOR EXISTING DECA",
      "agency": "Department of Health and Human Services",
      "subAgency": "National Institutes of Health",
      "office": "NIH NITAA DITA-DVI OF INFO TECH ACQ",
      "naics": {
        "code": "541519",
        "description": "OTHER COMPUTER RELATED SERVICES"
      },
      "psc": {
        "code": "DA10",
        "description": "IT AND TELECOM - BUSINESS APPLICATION/APPLICATION DEVELOPMENT SOFTWARE AS A SERVICE"
      },
      "setAside": {
        "code": "SBA",
        "description": "SMALL BUSINESS SET ASIDE - TOTAL"
      },
      "extentCompeted": "FULL AND OPEN COMPETITION",
      "offersReceived": 2,
      "solicitationId": "CS-120007-SB",
      "value": {
        "obligated": 584236.8,
        "current": 584236.8,
        "potential": 876355.2
      },
      "period": {
        "start": "2025-04-07",
        "currentEnd": "2027-04-28",
        "potentialEnd": "2027-04-28",
        "orderingEnd": null
      },
      "endDate": "2027-04-28",
      "monthsLeft": 5.9,
      "optionsRemaining": false,
      "incumbent": {
        "name": "AFFIGENT, LLC",
        "uei": "M46UYYHVH4B1",
        "parentName": "NANA REGIONAL CORPORATION, INC.",
        "parentUei": "QGSQK26MBMR6",
        "secCompany": null,
        "samRegistration": {
          "status": "active",
          "expirationDate": "2027-08-24",
          "sbaCertifications": [],
          "expiresBeforeContractEnd": false
        }
      },
      "placeOfPerformanceState": "VA",
      "firstSeen": "2026-10-29T08:01:38Z",
      "relatedNotices": [],
      "relatedNoticesTotal": 0,
      "usaspendingUrl": "https://www.usaspending.gov/award/CONT_AWD_75N98125F00001_7529_HHSN316201500050W_7529/"
    },
    {
      "awardKey": "CONT_AWD_HB000126F0030_9700_NNG15SD23B_8000",
      "piid": "HB000126F0030",
      "parentPiid": "NNG15SD23B",
      "kind": "contract",
  ...

Overview

Most federal work is bought again when the current contract runs out. Business development teams that see a recompete 12 to 18 months ahead can meet the program office, line up partners and shape the requirement before a solicitation is posted. The dates are public, but they sit in USAspending award records that its search API cannot filter by end date.

The Recompete Radar API loads every contract and IDV of $250,000 or more with activity in the last three years and keeps the ones that end within 24 months, using the potential end date (every option exercised) or the last date to order. Each row carries the incumbent with its SAM.gov registration and SBA certifications, the set-aside and the number of offers received last time, and the SAM.gov notices that name the contract: follow-on sources sought, justifications for an extension or a sole source, and the original solicitation. Save filters to get new contracts and new notices at a webhook.

What you get

Built for developers who would rather not parse EDGAR.

Potential end dates

Contracts end at their potential end date with every option exercised; optionsRemaining shows when the current end comes first.

The incumbent in context

Name, UEI, parent, listed company if any, SAM.gov registration status and expiration, and 8(a) or HUBZone certifications.

Notices that name the contract

SAM.gov notices that cite the PIID or carry it as their number; signal marks the ones about what happens next.

Filters and alerts

NAICS prefix, set-aside, state, agency, incumbent, value, offers received; new matches POSTed to your webhook.

Endpoints

Authenticate with Authorization: Bearer YOUR_KEY. Responses are JSON.

GET/v1/sam/recompetesReference →

Recompete radar (paid plans): contracts and IDVs whose period of performance ends soon, with the incumbent, value, agency, NAICS, set-aside, offers received and linked SAM.gov notices. Default window: ending 6 to 18 months from today.

Parameters: endFrom, endTo (YYYY-MM-DD, within the next 24 months), naics (code or prefix), setAside, noSetAside=true, state, psc, kind (contract, idv), agency, subAgency, incumbent, incumbentUei, q (description), minValue, maxValue, maxOffers, hasNotice=true (a SAM.gov notice names the contract: follow-on, sources sought, justification), firstSeenFrom, sort (endDate, value, firstSeen), from, size (max 100)

GET/v1/sam/recompeteReference →

One contract on the recompete radar by awardKey or PIID, with its incumbent's SAM.gov registration and linked notices (paid plans).

Parameters: awardKey (or a PIID, dashes optional)

GET/v1/sam/recompete-alertsReference →

Your saved recompete alerts.

Response fields

The main fields in every result. The raw filing data is always one level down.

FieldMeaning
recompetes[].piid, parentPiid, kind, awardTypeThe contract or IDV, its parent vehicle and the award type.
recompetes[].endDate, monthsLeft, period, optionsRemainingWhen it ends, how long is left and whether options remain.
recompetes[].incumbentWho holds it now, with SAM.gov registration and SBA certifications.
recompetes[].valueObligated so far, current value and potential value with all options.
recompetes[].setAside, extentCompeted, offersReceivedHow it was competed last time and how many bids came in.
recompetes[].relatedNotices[]Linked SAM.gov notices with matchedOn and signal.

Use cases

Guides

FAQ

Which plans include it?

Developer and up. Trial and free keys get a 402 that says how many contracts match the request.

Why the potential end date?

A contract with options left usually runs to its potential end, which is when the agency has to buy again. The current end date is in period.currentEnd.

How are SAM.gov notices linked?

A notice links when its text names the contract's PIID, when its own number is the PIID, or when it is the solicitation the award came from. Ids shared by several contracts, such as GSA schedule solicitations, never link.

How often is it updated?

Contracts reload every Sunday from USAspending. New SAM.gov notices are linked every morning after the daily SAM.gov refresh.

Try the Recompete Radar API free

Free key, no card, no sales call.

Get free API key →