Three small Python tools for federal contractors, built on the government's own public APIs. No API key, no SAM.gov account, no login, no dependencies outside the standard library.
The one worth your time is recompete.py. It answers a question the free alerts do not:
of the contracts in my NAICS code that expire in the next eighteen months, which are actually
contestable, and which are wired to the incumbent?
python3 recompete.py 541611 --months 18 --detail 25
CONTESTABLE W81XWH21C0086 ends 2026-10-22 $45,005,284
incumbent: CHEROKEE NATION AEROSPACE AND DEFENSE, L.L.C.
agency: Department of Defense
offers last cycle: 3 | FULL AND OPEN COMPETITION AFTER EXCLUSION OF SOURCES | set-aside: 8A COMPETED
3 offers last cycle. A real competition at a size a small shop can price into.
scope: WOMEN, INFANTS, AND CHILDREN (WIC) OVERSEAS PROGRAM SUPPORT SERVICES ...
WIRED 75R60221F80068 ends 2026-09-30 $48,561,515
incumbent: ACUMEN LLC
agency: Department of Health and Human Services
offers last cycle: 1 | FULL AND OPEN COMPETITION | set-aside: none
One offer last cycle. Competed on paper, decided in practice. Do not spend proposal
hours here without an inside reason.
scope: OPS DATA METHODOLOGY AND COMPUTATIONS FOR PROVIDER RELIEF FUND ALLOCATIONS ...
example-recompete-541611.txt is the full, unedited output of that command on 10 August 2026:
500 awards scanned, 99 ending within eighteen months, ranked.
By the time a recompete appears on sam.gov as a solicitation, the capture work that decides it
happened twelve to eighteen months earlier. The public award record carries a field that tells
you, before any of that, how open the last competition really was:
number_of_offers_received. One offer on a contract advertised as full and open is an
incumbent nobody bid against. Five is a market. That field, joined to the period-of-performance
end date, is the whole idea here.
Ranking, in order: CONTESTABLE (three or more offers last cycle), THIN (two), WIRED (one), UNKNOWN (the agency reported no count — treat as unread, not as safe).
recompete.py <naics>— expiring contracts in a NAICS code, ranked by contestability, with incumbent, agency, end date, set-aside type and last-cycle offer count.--months,--min,--max,--detail N(one HTTP request per award detail, so this caps the lookups),--json out.json.expiring.py "COMPANY NAME"— the same question asked about one company: which of their awards end soon, and how many bidders showed up last time. Run it on your own name before you run it on anyone else's; most incumbents have never looked.weekly.py <naics> [naics ...]— screens every currently-active sam.gov notice down to the ones a bidder could act on. About 47,000 notices are active at any time; in five NAICS families that is roughly 4,300, and after this screen about 25. It drops award notices, intent-to-sole-source, industry days, amendments of things already kept, and anything closing in under six days.pipeline.py— the two public endpoints, if you want to build something else on them.
POST https://api.usaspending.gov/api/v2/search/spending_by_award/— award ID, recipient, amount, period-of-performance end date.GET https://api.usaspending.gov/api/v2/awards/<generated_internal_id>/— offer count, extent competed, set-aside type, awarding agency.- sam.gov's own search backend for live notices, the same one the website calls. The
documented fallback if it ever refuses is
api.sam.gov/opportunities/v2/search, which needs a free SAM.gov account key.
There is no period-of-performance-end filter in the search API, so the window is applied
client-side over paginated results. Expect a run with --detail 25 to take a couple of minutes.
It cannot tell you whether a wired contract is wired to someone who is about to lose the program office, or whether a three-offer competition was three shell bids from one teaming partner. It ranks; it does not decide. Read the scope line and check the award on usaspending.gov before you spend a week on anything here.
Bee Industries publishes free ranked tables built with this code, one per NAICS code, at beeindustriesgov.com — for example 541611 management consulting, 561320 temporary help services, 541330 engineering services and 236220 commercial building construction. They cost nothing and need no signup.
If you want your code done properly rather than by the defaults in this script — the full window, every award detail looked up, the set-aside history and the near-misses explained — that is $149 for one NAICS code, delivered by email. If the code you want is not published yet, say which one: beeindustriesmail@gmail.com.
MIT licensed. Issues and pull requests welcome, particularly on NAICS families we have not looked at.