USAspending API Scraper: Federal Procurement Database & Grants avatar

USAspending API Scraper: Federal Procurement Database & Grants

Pricing

from $1.00 / 1,000 run start fees

Go to Apify Store
USAspending API Scraper: Federal Procurement Database & Grants

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

SR

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Features

Limited permissions

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:

RecipientObligated totalPer 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

FieldWhat it is
recipientCompany or organisation receiving the award
amountObligated total over the award's life
amount_per_yearThat divided by duration
currencyCurrency of the amount (USD)
awarding_agency, awarding_sub_agencyWho awarded it
funding_agencyWhose budget pays
award_typeAward type as USAspending classifies it
descriptionWhat it is for
start_date, end_date, duration_daysThe period
performance_stateWhere the work happens
recipient_stateWhere the recipient is
award_id, internal_id, urlIdentifiers and the award page
positionRow 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

FieldTypeDefault
award_groupcontracts, grants, loans, direct_payments, idvscontracts
date_from, date_toYYYY-MM-DD2024
recipientcompany or organisation name—
agencytop-tier awarding agency—
keywordfree text across the award—
statetwo-letter place-of-performance state—
min_amountdollars—
sortAward Amount, Start Date, End Date, Recipient NameAward Amount
orderdesc, ascdesc
limit1-5000100
retries1-63

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_year is what makes a league table honest.
  • Competitor tracking. Filter by recipient and 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 keyword and agency to see what a category is worth in obligated dollars for a period.
  • Partner and subcontractor research. performance_state shows where work actually happens, which is where local partners are.
  • Budget analysis. Group by awarding_agency and compare periods.

USAspending API compared with the alternatives

USAspending.gov websiteOfficial USAspending APIThis Actor
Key or loginnonenonenone
Request formatsearch formPOST body, explicit field listsimple form or JSON input
PaginationmanualhasNext loop you writeautomatic, up to 5,000 awards
Per-year figurenonoamount_per_year on every row
OutputCSV downloadraw JSONdataset as JSON, CSV, Excel
Scheduling and integrationsnobuild it yourselfApify 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.