USAspending API Scraper: Federal Procurement Database & Grants
Pricing
from $1.00 / 1,000 run start fees
USAspending API Scraper: Federal Procurement Database & Grants
Search US federal procurement and spending data from USAspending.gov: contracts, grants, loans, direct payments and IDVs. Get recipient, obligated amount, a per-year figure, awarding agency, dates and place of performance. For GovCon sales, competitor tracking and market sizing.
Pricing
from $1.00 / 1,000 run start fees
Rating
0.0
(0)
Developer
SR
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Features
Share
USAspending Scraper & API: Federal Contracts and Grants
This USAspending API Actor searches US federal awards on USAspending.gov and returns them as clean rows: contracts, grants, loans, direct payments and IDVs. Use it to see who wins federal money, from which agency, for how much and over what period, without writing a single request yourself. Recipient, obligated amount, awarding agency, what the award is for, its dates, and where the work happens.
It reads the official USAspending.gov API. No key, no login, no account to register.
What does this USAspending API return?
One dataset row per federal award, with an obligated amount, a per-year figure, the awarding, sub-awarding and funding agency, the award description, start and end dates, the place of performance and a link to the award page on USAspending.gov. A summary record and an errors record land in the key-value store.
Output example
A real row from a contracts search for 2024 sorted by amount ({"limit": 5} with the defaults):
{"award_id": "HT940216C0001","internal_id": 307885715,"recipient": "HUMANA GOVERNMENT BUSINESS INC","amount": 51269205263.03,"currency": "USD","awarding_agency": "Department of Defense","awarding_sub_agency": "Defense Health Agency","funding_agency": "Department of Defense","award_type": null,"description": "IGF::OT::IGF","start_date": "2016-08-01","end_date": "2025-12-31","duration_days": 3439,"amount_per_year": 5445210009.4,"performance_state": "KY","recipient_state": null,"url": "https://www.usaspending.gov/award/CONT_AWD_HT940216C0001_9700_-NONE-_-NONE-","source": "usaspending-scraper","country": "US","agency": "Department of Defense","fetched_at": "2026-10-06T04:21:45.416Z","award_category": "contract","generated_internal_id": "CONT_AWD_HT940216C0001_9700_-NONE-_-NONE-","position": 1}
And from a grants search for "recipient": "Johns Hopkins" in 2023: award AIDOAAA1700017,
"BREAKTHROUGH ACTION", $494,213,752 from the Agency for International Development, running from
2017-07-21 to 2025-02-26, which is $65.0 million per year.
The summary of that contracts run: awardsReturned 5, pagesFetched 1, hasMore true,
totalAmount 227,069,225,499.58 and topAgencies Department of Energy 4, Department of Defense 1.
The number everyone reads wrong
amount is the obligated total across the award's whole life, not annual
spend. This matters more than it sounds.
The largest 2024 contract is a Department of Defense award to Humana for $51.3 billion, running from 2016 to 2025. Second is a Department of Energy award to Lockheed Martin at $48.1 billion. On the headline figures Humana wins comfortably.
Annualised, they are not close in the way you would guess:
| Recipient | Obligated total | Per year |
|---|---|---|
| Humana | $51.3bn | $5.4bn |
| Lockheed Martin | $48.1bn | $2.0bn |
The gap more than doubles, because the awards run for different lengths. Every
row therefore carries amount_per_year, the obligated total divided by the
award's actual duration, so awards of different lengths are comparable.
Awards shorter than a month get null there rather than an annualised figure,
because dividing a two-week award into a yearly rate invents a number nobody
should quote.
Pick one award type
Contracts, grants, loans and direct payments are separate worlds with different economics, and USAspending returns them from the same endpoint. Mixing them produces a "top recipients" table where a research university's grant sits beside a defence contractor's weapons programme as though they were the same thing.
award_group picks one. It defaults to contracts.
Output fields
| Field | What it is |
|---|---|
recipient | Company or organisation receiving the award |
amount | Obligated total over the award's life |
amount_per_year | That divided by duration |
currency | Currency of the amount (USD) |
awarding_agency, awarding_sub_agency | Who awarded it |
funding_agency | Whose budget pays |
award_type | Award type as USAspending classifies it |
description | What it is for |
start_date, end_date, duration_days | The period |
performance_state | Where the work happens |
recipient_state | Where the recipient is |
award_id, internal_id, url | Identifiers and the award page |
position | Row position in this run |
performance_state and recipient_state are frequently different, and the gap
is the point when you are asking where federal money physically lands rather
than which state a headquarters sits in.
Input reference
| Field | Type | Default |
|---|---|---|
award_group | contracts, grants, loans, direct_payments, idvs | contracts |
date_from, date_to | YYYY-MM-DD | 2024 |
recipient | company or organisation name | — |
agency | top-tier awarding agency | — |
keyword | free text across the award | — |
state | two-letter place-of-performance state | — |
min_amount | dollars | — |
sort | Award Amount, Start Date, End Date, Recipient Name | Award Amount |
order | desc, asc | desc |
limit | 1-5000 | 100 |
retries | 1-6 | 3 |
Filters combine. A time period is always sent, because the API requires one.
Two API details worth knowing
It is a POST API. Filters go in a JSON body, not the query string. That is unusual enough that a GET attempt returns something plausible and wrong.
The field list must be explicit. Ask for nothing and you get a small default set missing most of what is useful, with no indication that anything was omitted. This Actor always names the fields it wants.
Pagination is a hasNext flag, not a page count. There is no total to loop
to; the response says whether another page exists.
Use cases
- Government contract intelligence. Who wins work from which agency, in what
size, over what period.
amount_per_yearis what makes a league table honest. - Competitor tracking. Filter by
recipientand follow a company's federal business across agencies and years. - GovCon sales and lead generation. Find the contractors that already win work in your category and state, then reach them as partners or customers.
- Market sizing. Filter by
keywordand agency to see what a category is worth in obligated dollars for a period. - Partner and subcontractor research.
performance_stateshows where work actually happens, which is where local partners are. - Budget analysis. Group by
awarding_agencyand compare periods.
USAspending API compared with the alternatives
| USAspending.gov website | Official USAspending API | This Actor | |
|---|---|---|---|
| Key or login | none | none | none |
| Request format | search form | POST body, explicit field list | simple form or JSON input |
| Pagination | manual | hasNext loop you write | automatic, up to 5,000 awards |
| Per-year figure | no | no | amount_per_year on every row |
| Output | CSV download | raw JSON | dataset as JSON, CSV, Excel |
| Scheduling and integrations | no | build it yourself | Apify schedules, webhooks, API |
Notes
An amount is what has been obligated, which is money committed. It is not necessarily money already paid out, and for a long contract it usually is not.
duration_days is calculated from the award's own start and end dates. Awards
with missing dates return null for both duration and the annualised figure
rather than a guess.
Data covers US federal awards only. State and local procurement is published elsewhere and is not in this dataset.
Output and summary
Each award appears as a dataset row with the original field names and types. The summary record includes awardsReturned, awardGroup, pagesFetched, hasMore, totalAmount, topAgencies and withDuration. The errors record contains any query or collection errors. Additional source, country, agency, fetched_at and award_category fields help combine awards with other government datasets. Large requests are collected automatically; the maximum remains 5,000 awards. Loan searches should use Recipient Name as their sort field. Loan amounts and dates are null with the original field set; the standard Award Amount sort is not supported for loans and produces an empty run. Contract and IDV award_type values can be null. Empty or invalid searches finish successfully with no rows.
Pricing
The existing price is unchanged: $0.001 per run start and $0.0015 per award actually delivered. The run start fee also applies to empty or invalid searches. An empty dataset has no award charges. A run returning 100 awards costs $0.151. Users on the free plan receive at most ten awards per run; paying users retain their requested limit. Awards are delivered before their result events are charged.
FAQ
Does USAspending Scraper return annual spending?
No. amount is the obligated total over the award's lifetime. amount_per_year is a derived comparison figure and is null for short awards or missing dates.
Can I filter USAspending awards by state and agency together?
Yes. State, agency, recipient, keyword, dates and minimum amount combine in one search. The state filter applies to place of performance.
Why are some loan fields empty?
Loans use a different set of fields in the source. The original amount and date fields are retained with null values so existing integrations keep their shape. Use Recipient Name for loan sorting.
Do I need a USAspending API key?
No. The data is public and this Actor needs no key or login from you. You only need an Apify account to run it, from the console, on a schedule or through the Apify API.
How many awards can one run return?
Up to 5,000. Set limit and the Actor pages through the results for you; the summary says
whether more awards exist beyond what was returned (hasMore).
Can I use this for SAM.gov contract opportunities?
No. USAspending holds awards that have already been made. Open solicitations and bids live on SAM.gov, which is a separate dataset.