Government Contract Scraper - USAspending
Pricing
from $0.70 / 1,000 awards
Government Contract Scraper - USAspending
USAspending has no period-of-performance filter, and sorting by end date returns 1995 one way and 3017 the other. So you cannot ask which contracts expire soon. This computes it, flags the corrupt dates, and ranks expiring awards by value with incumbent, outlay rate and vendor concentration.
Pricing
from $0.70 / 1,000 awards
Rating
0.0
(0)
Developer
Datalayer
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
USAspending Scraper — Federal Contracts & Recompetes
Scrape US federal contract awards from USAspending, with the thing the API will not give you: which contracts are about to end.
That moment is the whole basis of a government-sales pipeline. It is when an incumbent can be displaced, when a recompete goes out, and when a bid team needs to already be in the room. USAspending publishes every award — and cannot filter on it.
Why this is not a thin API wrapper
Two facts, both verified live on 2026-08-14:
1. There is no period-of-performance filter. time_period.date_type accepts
only action_date, date_signed, last_modified_date and new_awards_only.
Ask for anything else and the API returns 422 and lists them. So "expiring in
the next 180 days" cannot be requested. It has to be pulled and computed.
2. Sorting by End Date does not rescue you. Ascending, the first page comes back with an award that starts in 1999 and ends in 1995. Descending, the top rows are 3017-04-30, 2100-12-31 and 2099-12-31. Both ends of that sort are data-entry garbage, so a naive "sort by end date" recompete list is worthless.
This actor therefore computes daysUntilEnd itself, flags implausible dates
rather than trusting them, and keeps them out of the radar. In a live sample of
100 top-value contracts, 1 carried a corrupt date.
What you get
The recompete radar. Every award ending inside your window, biggest money first, with the incumbent, the sub-agency and the value. A live run on 2026-08-14 surfaced:
| Incumbent | Value | Ends | Days | Sub-agency |
|---|---|---|---|---|
| The Boeing Company | $22.4B | 2026-09-30 | 47 | NASA |
| TriWest Healthcare Alliance | $8.4B | 2026-12-31 | 139 | Defense Health Agency |
| The Boeing Company | $7.6B | 2026-08-31 | 17 | Department of the Navy |
| Chemonics International | $6.7B | 2026-11-28 | 106 | USAID |
Outlay rate. How much of the award has actually been paid out. A contract at 5% outlay two months from its end date is not really being delivered — that gap is a bid signal, and it is one join the API makes you do yourself.
Vendor concentration per agency. What share of an agency's spend in your slice went to its single largest contractor. In the same live run, NASA sat at 67.9% to one vendor and DoD at 26.4%. High concentration is both a competitive warning and a target.
Grants too. Contracts, IDVs, grants, loans and direct payments are all supported. Assistance awards carry CFDA numbers instead of NAICS, and the actor requests the right field set per family rather than asking for columns that come back null.
Who uses this
- Government-sales and capture teams — building a recompete pipeline instead of waiting for a solicitation to appear.
- Competitive intel — watching a named competitor's book of business and when it expires.
- Small business and set-aside contractors — filtering to SBA, 8(a) or SDVOSB work in their NAICS.
- Analysts and journalists — agency spend concentration and vendor share.
Input
| Field | Type | Default | Notes |
|---|---|---|---|
awardTypes | array | ["contracts"] | contracts, idvs, grants, loans, direct_payments |
recompeteWindowDays | integer | 180 | Computed locally — the API cannot filter on it |
expiringOnly | boolean | false | Drop award rows outside the window |
agency | string | "" | Exact top-tier name, e.g. Department of Defense |
keywords | array | [] | Free-text search across the award |
naicsCodes / pscCodes | array | [] | Contracts and IDVs only |
setAsideTypes | array | [] | e.g. SBA, 8AN, SDVOSBC |
recipientSearch | string | "" | Watch one contractor |
placeOfPerformanceStates | array | [] | Two-letter state codes |
minAwardAmount / maxAwardAmount | integer | 0 | 0 means no bound |
fromDate / toDate | string | "" | Action date; defaults to the last two years |
maxAwardsPerType | integer | 200 | 100 per page, largest first |
Agency summaries are always computed on everything collected, even with
expiringOnly on — otherwise the concentration figures would describe your
filter rather than the agency.
Output
award — awardId, recipientName, awardAmount, totalOutlays,
outlayRatePercent, awardingAgency, awardingSubAgency, fundingAgency,
startDate, endDate, durationDays, daysUntilEnd, isExpiringSoon,
isExpired, hasImplausibleDates, NAICS/PSC, place of performance, awardUrl.
recompete — the expiring subset, repeated as its own row type so the
pipeline reads on its own, sorted biggest money first.
agency_summary — awards, totalAwardValue, medianAwardValue,
distinctRecipients, topRecipient, topRecipientSharePercent,
expiringSoonAwards, expiringSoonValue, awardsWithImplausibleDates.
Limits
daysUntilEndreflects the current period of performance. An option year exercised after the run will move it.- Award amounts can be negative on a de-obligation. That is real data, not a parsing error, and the outlay rate is suppressed rather than reported as nonsense.
- USAspending data lags contract actions by days to weeks.
Pricing
Pay per event. $0.001 per award, $0.01 per recompete, $0.05 per agency summary.