USAspending Federal Award Search
Pricing
Pay per event
USAspending Federal Award Search
Searches US federal contract, grant and loan awards on USAspending.gov. Its paging flag turns false at 10,000 records while tens of thousands more are still there, so this Actor stops on a short page instead and uses the cursor to read past 50,000. No key and no login.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Gregory Bolshakov
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
4 days ago
Last modified
Categories
Share
Searches US federal contracts, grants, loans and direct payments on USAspending.gov. You get the recipient, the agency, the obligated amount, the period of performance, the industry codes and the recipient's registered address, as JSON, CSV or Excel.
No API key and no login. The data is public and this Actor reads it directly.
The problem this one solves
USAspending tells you when to stop paging, and it is wrong.
Its hasNext flag is true up to record 10,000 and false after that. But the awards keep
coming. I paged the same search to record 50,000 and checked: pages 100, 101, 150, 300, 499
and 500 each returned 100 real awards, and no award appeared on two of them. So a scraper that
pages while hasNext is true stops at 10,000 and leaves 40,000 awards behind.
There is nothing to catch this with either. The API publishes no total at all. total and
last_page come back empty on every response, so there is no number to compare your row count
against.
This Actor ignores the flag. It stops when a page comes back short, which is the only honest signal, and it reports how many times the flag was wrong during your run.
Past 50,000 awards, page paging is refused outright. There is a cursor for going further and this Actor uses it, so a wide search is not capped at 50,000 either.
One thing worth knowing about sorting
The cursor only accepts a text sort value. If you sort by award amount, the cursor stops working and you are capped at 50,000. So this Actor sorts by award ID. It is a real trade and you should know it is being made rather than find out later.
Fields that are not where you would look
Three things I measured rather than assumed, on 200 awards across four families:
The award type lives in a different field depending on what kind of award it is. Contracts
fill Contract Award Type and leave Award Type empty. Grants and loans do the opposite. Use
awardTypeLabel, which was filled on all 200 where each single field was filled on 100.
Industry codes come back as objects, not text. Read as text they are empty on every contract while being present on every contract.
The recipient's address is in an object. Asking for the flat field name is accepted by the API and returns nothing at all, on every award family.
Obligations are not outlays
awardAmount is what the agency committed. totalOutlays is what has actually been paid, and
it is often a real zero. A zero and an empty are different facts here and both are kept.
Completeness
Every row carries searchComplete and searchLimitedBy. Asking for 1,000 awards and getting
1,000 is reported as maxResults, never as complete, because the run never saw the end.
Cost
Pay per event, priced on the Actor page. A search matching nothing is free, because nothing is charged until rows are written to your dataset.