Home / Developers / Recompete Radar API
API reference

Recompete Radar API

Find federal contracts and IDVs that end in the next 24 months, with who holds them now, what they are worth, how they were competed and which SAM.gov notices name them. Built for business development pipelines that start a year or more before the solicitation. Available on Developer plans and up. Product overview →

Endpoints

/v1/sam/recompetes

GEThttps://secfeedapi.com/v1/sam/recompetes

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.

ParameterTypeDescriptionExample
endFromstringEnds on or after, YYYY-MM-DD. The radar holds contracts ending from today to 24 months out. Default 6 months from today.2027-01-01
endTostringEnds on or before, YYYY-MM-DD. Default 18 months from today.2027-12-31
naicsstringSix digits for one code, fewer digits for every code under that prefix.5415
setAsidestringComma separated set-aside codes as USAspending writes them, such as SBA, 8A, 8AN, SDVOSBC, WOSB, HZC.SBA
noSetAsidestringtrue for contracts that were not set aside last time.true
statestringComma separated place of performance state codes.VA,MD
pscstringComma separated product or service codes.DA01
kindstringcontract or idv.idv
agencystringAwarding agency name contains this text.Veterans
subAgencystringAwarding sub-agency name contains this text.Army
incumbentstringIncumbent name contains this text.booz allen
incumbentUeistringIncumbent UEI, or its parent's UEI to cover every subsidiary.
qstringAward description contains this text.cybersecurity
minValuenumberPotential value (current value when there is none) at least this many dollars.10000000
maxValuenumberPotential value at most this many dollars.
maxOffersintegerAt most this many offers received last time; 1 finds sole source and single bid awards.1
hasNoticestringtrue for contracts named by a forward looking SAM.gov notice (signal links).true
firstSeenFromstringOnly contracts that entered the radar on or after this date or firstSeen value.
sortstringendDate (soonest first), value (largest first) or firstSeen (newest on the radar first). Default endDate.
fromintegerOffset for paging. Default 0.
sizeintegerRows per page, 1 to 100. Default 20.
  • The default window is contracts ending 6 to 18 months from today; pass endFrom and endTo to change it.
  • endDate is the potential end date for contracts (all options exercised) and the last date to order for IDVs.
  • Each row lists up to 10 related notices, forward looking ones first; relatedNoticesTotal has the full count.
  • Trial and free keys get a 402 with the number of matching contracts.

/v1/sam/recompete

GEThttps://secfeedapi.com/v1/sam/recompete

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

ParameterTypeDescriptionExample
awardKeyrequiredstringawardKey from a search, or a PIID with or without dashes.36C25021P1699
  • A PIID that several contracts share returns the one ending first; use awardKey to be exact.

/v1/sam/recompete-alerts

POSThttps://secfeedapi.com/v1/sam/recompete-alerts

Your saved recompete alerts.

ParameterTypeDescriptionExample
urlrequiredstringYour https webhook.https://example.com/hooks/recompetes
filtersobjectAny of naics, setAside, noSetAside, state, psc, kind, agency, subAgency, incumbent, incumbentUei, q, minValue, maxValue, maxOffers, endFrom, endTo.{"naics": "5415", "setAside": "SBA"}
  • Two events: entered_window when a contract matching the filters joins the radar in the weekly load, and notice_linked when a new SAM.gov notice names one (daily).
  • Each POST carries up to 100 contracts; up to 1,000 a run and 25 alerts per key.
  • GET /v1/sam/recompete-alerts lists yours; POST /v1/sam/recompete-alerts/delete with {"id": n} removes one.

Request examples

Every response below is real output from the API, trimmed to the first records.

Small business IT contracts ending in 6 to 18 months

Every code under NAICS 5415 that was a total small business set-aside, soonest end first. Check incumbent.samRegistration for the holder's status.

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']}"},
    timeout=60,
)
r.raise_for_status()
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",
  ...

Contracts a new SAM.gov notice already names

The largest contracts that a sources sought, justification or follow-on notice has cited; relatedNotices shows each one with signal true.

curl -H "Authorization: Bearer $SECFEED_KEY" \
  "https://secfeedapi.com/v1/sam/recompetes?hasNotice=true&sort=value&size=2"
import os, requests

r = requests.get(
    "https://secfeedapi.com/v1/sam/recompetes",
    params={'hasNotice': 'true', 'sort': 'value', 'size': '2'},
    headers={"Authorization": f"Bearer {os.environ['SECFEED_KEY']}"},
    timeout=60,
)
r.raise_for_status()
print(r.json())
{
  "total": 107,
  "window": {
    "endFrom": "2027-04-28",
    "endTo": "2028-04-28"
  },
  "recompetes": [
    {
      "awardKey": "CONT_AWD_70CDCR26C00000021_7012_-NONE-_-NONE-",
      "piid": "70CDCR26C00000021",
      "parentPiid": null,
      "kind": "contract",
      "awardType": "DEFINITIVE CONTRACT",
      "description": "GOVERNMENT FURNISHED AIRCRAFT (GFA) OPERATIONAL SUPPORT FOR AIRCRAFT AND MAINTENANCE SERVICES (OSAMS)",
      "agency": "Department of Homeland Security",
      "subAgency": "U.S. Immigration and Customs Enforcement",
      "office": "DETENTION COMPLIANCE AND REMOVALS",
      "naics": {
        "code": "481211",
        "description": "NONSCHEDULED CHARTERED PASSENGER AIR TRANSPORTATION"
      },
      "psc": {
        "code": "V211",
        "description": "TRANSPORTATION/TRAVEL/RELOCATION- TRAVEL/LODGING/RECRUITMENT: AIR PASSENGER"
      },
      "setAside": {
        "code": "NONE",
        "description": "NO SET ASIDE USED."
      },
      "extentCompeted": "NOT COMPETED",
      "offersReceived": 1,
      "solicitationId": "70CDCR26R00000022",
      "value": {
        "obligated": 249385561.5,
        "current": 249385561.5,
        "potential": 379979044.5
      },
      "period": {
        "start": "2026-08-12",
        "currentEnd": "2027-08-11",
        "potentialEnd": "2028-02-11",
        "orderingEnd": null
      },
      "endDate": "2028-02-11",
      "monthsLeft": 15.4,
      "optionsRemaining": true,
      "incumbent": {
        "name": "EASTERN AIR EXPRESS LLC",
        "uei": "QKELA8U9HRQ1",
        "parentName": "EASTERN AIR EXPRESS LLC",
        "parentUei": "QKELA8U9HRQ1",
        "secCompany": null,
        "samRegistration": {
          "status": "active",
          "expirationDate": "2026-11-19",
          "sbaCertifications": [],
          "expiresBeforeContractEnd": true
        }
      },
      "placeOfPerformanceState": "MO",
  ...

Single bid awards over $10 million

Contracts that drew one offer last time: the incumbent faced no competitor, so a credible second bid matters.

curl -H "Authorization: Bearer $SECFEED_KEY" \
  "https://secfeedapi.com/v1/sam/recompetes?maxOffers=1&minValue=10000000&size=2"
import os, requests

r = requests.get(
    "https://secfeedapi.com/v1/sam/recompetes",
    params={'maxOffers': '1', 'minValue': '10000000', 'size': '2'},
    headers={"Authorization": f"Bearer {os.environ['SECFEED_KEY']}"},
    timeout=60,
)
r.raise_for_status()
print(r.json())
{
  "total": 2156,
  "window": {
    "endFrom": "2027-04-28",
    "endTo": "2028-04-28"
  },
  "recompetes": [
    {
      "awardKey": "CONT_AWD_1605TB22F00040_1605_GS35F0503M_4730",
      "piid": "1605TB22F00040",
      "parentPiid": "GS35F0503M",
      "kind": "contract",
      "awardType": "DELIVERY ORDER",
      "description": "T-MOBILE USA WIRELESS TASK ORDER",
      "agency": "Department of Labor",
      "subAgency": "Office of the Assistant Secretary for Administration and Management",
      "office": "DOL-ITAS DIVISION B PROCUREMENT",
      "naics": {
        "code": "334220",
        "description": "RADIO AND TELEVISION BROADCASTING AND WIRELESS COMMUNICATIONS EQUIPMENT MANUFACTURING"
      },
      "psc": {
        "code": "DE02",
        "description": "IT AND TELECOM - MOBILE DEVICE SUPPORT SERVICES (LABOR)"
      },
      "setAside": null,
      "extentCompeted": "FULL AND OPEN COMPETITION",
      "offersReceived": 1,
      "solicitationId": "1605TB-22-Q-00023",
      "value": {
        "obligated": 2606387.02,
        "current": 27372083.23,
        "potential": 27372083.23
      },
      "period": {
        "start": "2022-04-25",
        "currentEnd": "2027-04-28",
        "potentialEnd": "2027-04-28",
        "orderingEnd": null
      },
      "endDate": "2027-04-28",
      "monthsLeft": 5.9,
      "optionsRemaining": false,
      "incumbent": {
        "name": "T-MOBILE USA, INC.",
        "uei": "ZVW2T2CCG7V9",
        "parentName": "T-MOBILE USA, INC.",
        "parentUei": "ZVW2T2CCG7V9",
        "secCompany": null,
        "samRegistration": {
          "status": "active",
          "expirationDate": "2027-05-19",
          "sbaCertifications": [],
          "expiresBeforeContractEnd": false
        }
      },
      "placeOfPerformanceState": "DC",
      "firstSeen": "2026-10-29T08:01:38Z",
      "relatedNotices": [],
      "relatedNoticesTotal": 0,
  ...

Response fields

FieldTypeMeaning
totalintegerContracts matching the filters.
window.endFrom, window.endTostringThe end date window used.
recompetes[].awardKeystringUSAspending's unique award key; use it with /v1/sam/recompete.
recompetes[].piid, parentPiidstringThe contract number and, for orders, the parent vehicle.
recompetes[].kind, awardTypestringcontract or idv, and the award type such as DEFINITIVE CONTRACT or DELIVERY ORDER.
recompetes[].descriptionstringThe award description from the base transaction.
recompetes[].agency, subAgency, officestringAwarding agency, sub-agency and contracting office.
recompetes[].naics, pscobjectcode and description of the industry and the product or service.
recompetes[].setAsideobjectcode and description of the set-aside used last time, or null.
recompetes[].extentCompeted, offersReceivedstring, integerHow the award was competed and how many offers came in.
recompetes[].solicitationIdstringThe solicitation the award came from.
recompetes[].value.obligated, current, potentialnumberDollars obligated so far, current value and potential value with every option.
recompetes[].period.start, currentEnd, potentialEnd, orderingEndstringPeriod of performance dates and, for IDVs, the last date to order.
recompetes[].endDate, monthsLeftstring, numberThe end used by the radar and the months left until it.
recompetes[].optionsRemainingbooleantrue when the potential end is later than the current end.
recompetes[].incumbent.name, uei, parentName, parentUeistringThe current holder and its parent.
recompetes[].incumbent.secCompanyobjectcik, ticker and name when the holder or its parent is a listed company, else null.
recompetes[].incumbent.samRegistrationobjectstatus, expirationDate, sbaCertifications[] and expiresBeforeContractEnd from SAM.gov, or null when not registered.
recompetes[].placeOfPerformanceStatestringWhere the work is done.
recompetes[].firstSeenstringWhen the contract entered the radar.
recompetes[].relatedNotices[]arraynoticeId, title, type, posted, responseDeadline, solicitationNumber, setAsideCode, matchedOn, signal, linked, samUrl.
recompetes[].relatedNoticesTotalintegerAll linked notices, including those past the 10 shown.
recompetes[].usaspendingUrlstringThe award on USAspending.gov.
source.loadedAtstringWhen the weekly load ran.

matchedOn values

ValueMeaning
piid_in_textThe notice's title or description names the contract number (follow-ons, sources sought, bridges).
contract_numberThe notice's award or solicitation number is the contract number; on a justification this usually means an extension or sole source.
original_solicitationThe notice is the solicitation the award came from. History, not a signal.

Common set-aside codes

CodeMeaning
SBATotal small business set-aside
8A8(a) competitive
8AN8(a) sole source
SDVOSBCService-disabled veteran-owned small business set-aside
WOSBWomen-owned small business set-aside
HZCHUBZone set-aside
NONENo set-aside

How to

How do I change the window?

Pass endFrom and endTo. The radar holds contracts ending from today to 24 months out.

curl -H "Authorization: Bearer $SECFEED_KEY" \
  "https://secfeedapi.com/v1/sam/recompetes?endFrom=2027-01-01&endTo=2027-03-31&size=2"
How do I find contracts a particular company holds?

Search incumbent by name, or pass the parent's UEI in incumbentUei to cover every subsidiary.

curl -H "Authorization: Bearer $SECFEED_KEY" \
  "https://secfeedapi.com/v1/sam/recompetes?incumbent=leidos&size=2"
How do I find contracts that were not set aside?

Pass noSetAside=true. These are full and open competitions where a small business set-aside could still be argued for.

curl -H "Authorization: Bearer $SECFEED_KEY" \
  "https://secfeedapi.com/v1/sam/recompetes?noSetAside=true&naics=541512&size=2"
How do I find 8(a) sole source contracts ending soon?

Filter setAside=8AN and check whether the incumbent's 8(a) certification exit date falls before the end.

curl -H "Authorization: Bearer $SECFEED_KEY" \
  "https://secfeedapi.com/v1/sam/recompetes?setAside=8AN&size=2"
How do I cover one agency?

agency matches part of the awarding agency name; subAgency narrows to a component.

curl -H "Authorization: Bearer $SECFEED_KEY" \
  "https://secfeedapi.com/v1/sam/recompetes?agency=Veterans&size=2"
How do I get the biggest contracts first?

sort=value orders by potential value, largest first.

curl -H "Authorization: Bearer $SECFEED_KEY" \
  "https://secfeedapi.com/v1/sam/recompetes?sort=value&size=2"
How do I look up one contract by its number?

Pass the PIID as awardKey, with or without dashes.

curl -H "Authorization: Bearer $SECFEED_KEY" \
  "https://secfeedapi.com/v1/sam/recompete?awardKey=36C25021P1699"
How do I see only IDVs?

kind=idv returns indefinite delivery vehicles, which end at their last date to order.

curl -H "Authorization: Bearer $SECFEED_KEY" \
  "https://secfeedapi.com/v1/sam/recompetes?kind=idv&sort=value&size=2"
How do I see what joined the radar this week?

Pass firstSeenFrom with a date, or sort=firstSeen.

curl -H "Authorization: Bearer $SECFEED_KEY" \
  "https://secfeedapi.com/v1/sam/recompetes?sort=firstSeen&size=2"
How do I get alerts?

POST /v1/sam/recompete-alerts with your https url and filters. New contracts arrive each Sunday and newly linked notices each morning.

curl -H "Authorization: Bearer $SECFEED_KEY" \
  "https://secfeedapi.com/v1/sam/recompete-alerts"

Errors

  • 402 for trial and free keys, with the number of contracts that match.
  • 400 when endFrom or endTo is not YYYY-MM-DD or sort is unknown.
  • 404 from /v1/sam/recompete when no contract on the radar has that awardKey or PIID.

See also the error codes every endpoint shares.

Try it with your own key

Free key, no card needed.

Get free API key →