USAspending.gov logo

Open data · Live on Apify

USAspending Federal Awards and Recipient Monitor

Find US federal contracts, grants and loans from USAspending.gov. Filter by company, agency or industry code. Run it each week to see what is new or changed.

About $2.00 for 1,000 awards$0.002 per award + $0.002 per run. Apify bills you, not us.Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Run it on Apify Opens apify.com, the website where our tools run. Sign up free with Google or email, no card needed.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure

What you get, for example

changeTypeupdated
awardTypeGroupcontracts
awardId36C10B21N10150057

How to use it: 3 steps

  1. Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
  2. Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example: contracts in Award types. Each start is one run.
  3. Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.

What it does

USAspending Federal Awards & Recipient Monitor finds US federal contracts, grants, loans and other awards in the official USAspending.gov data. Filter by recipient name or UEI, awarding agency, NAICS, PSC, keyword and dates. You get one clean row per award, with the recipient, the agencies, the obligated amount and the outlays as separate numbers, dates, codes and links to USAspending.

  • Award search. Pick award types (contracts, IDVs, grants, loans, direct payments, other assistance) and filters. Each award type is searched on its own, and maxResults applies to each type.
  • Clear names. Agency names and abbreviations (VA, NIH, DOD) are checked against the official agency list. A name that does not exist stops the run with suggestions. It does not silently return nothing.
  • Monitoring. With a monitorKey, the Actor saves the awards it saw in your account. The next run marks each award new, updated or unchanged, and by default writes only the new and updated ones.

Good for

  • See who wins contracts at an agency for your NAICS or PSC codes.
  • List all federal awards of a company or university by name or UEI.
  • Watch an agency, a competitor or a market every week and get only the changes.
  • Find grants or loans of an agency in a period, with the amount obligated and the amount already paid out.

Not a good fit

  • Open tenders, solicitations or bid deadlines. This is award data, not SAM.gov.
  • Sub-awards, transaction history or contract officers.
  • A full copy of USAspending. Use the official bulk downloads for that.
  • Phone numbers, emails or company ownership data.

Who uses it

Government contractors

See who wins contracts in your NAICS or PSC codes.

Due diligence analysts

List the federal awards of one company or university.

Grant researchers

Find grants of an agency in a time period.

Price

Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.

What you pay forPriceWhen
Start fee$0.002Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more.
Award record$0.002One federal award row (contract, IDV, grant, loan or other assistance) saved to the Dataset. Unchanged awards skipped by onlyChanges are not charged.

Examples

  • One award: about $0.004.
  • 1,000 awards: about $2.00.
  • Every day 100 awards, for 30 days: about $6.06 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 2,400 awards.

Prices checked on 24 October 2026. See the current price on Apify.

Questions

Can I find open tenders to bid on?

No. These are awards already made. For open bids, use SAM.gov.

What is the difference between amount and outlays?

The amount is money the agency committed. Outlays are money already paid out.

Do I need an API key?

No. USAspending is open and free.

Does monitoring cost extra?

No. Unchanged awards are not saved and not charged.

What is the difference between awardAmount and totalOutlays?

awardAmount is the money the agency obligated (committed). totalOutlays is the money already paid out. They are different numbers, so the Actor never adds them up.

How fresh is the data?

Each run reads USAspending live. Agencies report awards to USAspending with some delay, so the newest awards can appear days or weeks after they are made. Each row has lastModifiedDate (source) and source.fetchedAt (our read time).

Details

Step by step on Apify
  1. Open the Input tab. The form already has an example: contracts of the Department of Veterans Affairs, NAICS 541512 (computer systems design), last 30 days, 20 awards.
  2. Click Start.
  3. Open the Awards view in the Output tab. Check recipientName, awardAmount, totalOutlays and awardUrl.
  4. Change the agency, codes or recipients to your own. To get only changes next time, add a monitorKey such as va-it-contracts.
Use cases
TaskInputYou getKey fields
Who wins in my marketawardingAgencies + naicsCodes or pscCodescontract rowsrecipientName, recipientUei, awardAmount, awardingSubAgency
Company due diligencerecipients (name or UEI), several awardTypesall award types of that recipientawardTypeGroup, awardAmount, totalOutlays, recipientUrl
Grant researchawardTypes: ["grants"] + agency + datesgrant rowsassistanceListings, awardAmount, totalOutlays, description
Weekly competitor watchfilters + monitorKey, on a scheduleonly new and updated awardschangeType, changedFields, previousValues
Tips for better results
  • Use agency short names like VA or NIH. A wrong name stops the run with ideas.
  • Use a monitor key to get only new and updated awards.
  • New awards can show up days or weeks late. Look a bit back in time.
Limits and good to know
  • Up to 500 awards per award type, so up to 3,000 rows per run with all six types. In our test, 3,000 rows took about 85 seconds
  • The Actor sends one request at a time, with a pause between requests, and retries when the source is busy. USAspending does not publish a rate limit
  • Internal time budget is 270 seconds. If time runs out, you get the rows found so far and PARTIAL
  • If USAspending is down or does not answer (up to 30 seconds per try and about 60 seconds per request in total, at most 3 tries and 2 timeouts), the run stops early and does not ask for the other award types. You get the rows found so far
  • Monitor snapshots keep up to 20,000 awards per monitorKey. previousDatasetId reads up to 20,000 rows
  • totalOutlays, endDate and other values come from the USAspending search index. The search index can be behind the award page on USAspending.gov, so outlays on the award page can be higher
  • endDate is always null for IDVs (use lastDateToOrder) and for loans: the search index does not have it
  • Loans have no awardAmount in the source. Use loanFaceValue and loanSubsidyCost. For loans, startDate is the loan's issued date

Troubleshooting

SymptomCheckAction
INVALID_INPUT, agency not foundRUN_SUMMARY.messageUse one of the suggested names, or the full official name.
NO_RESULTSRUN_SUMMARY.filtersWiden the date range, remove a filter, or try dateFilter: "activity".
Other recipients than expectedrecipientName, recipientUeiName search is text search. Use the UEI for an exact recipient.
Grants missing with NAICSRUN_SUMMARY.warningsNAICS and PSC exist only on contracts and IDVs. Remove them for grants.
truncated: truegroups[].hasMoreAtSourceRaise maxResults (up to 500) or narrow the filters.
Outlays differ from the USAspending award pagetotalOutlaysThe search index can be behind the award page. Open awardUrl for the latest value.
ERRORRUN_SUMMARY.messageUSAspending was down or busy. Run again later. Your monitor snapshot is not changed by a failed run.

For developers

Sample result

One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.

one result · JSON
{
  "changeType": "updated",
  "changedFields": ["totalOutlays", "lastModifiedDate"],
  "awardTypeGroup": "contracts",
  "awardId": "36C10B21N10150057",
  "awardType": "DELIVERY ORDER",
  "recipientName": "BOOZ ALLEN HAMILTON INC",
  "recipientUei": "KHK6E1JW9C15",
  "awardingAgency": "Department of Veterans Affairs",
  "awardAmount": 753054309.17,
  "totalOutlays": 561175619.99,
  "startDate": "2021-09-30",
  "endDate": "2027-09-23",
  "naicsCode": "541512",
  "pscCode": "DA01",
  "awardUrl": "https://www.usaspending.gov/award/CONT_AWD_36C10B21N10150057_3600_VA11816D1015_3600"
}

Use it from code

Actor ID: cliqtomedia/usaspending-federal-awards-monitor. You need your Apify API token from Apify Console → Settings → API & Integrations.

Python · apify-client
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/usaspending-federal-awards-monitor").call(run_input={
    "awardTypes": [
        "contracts"
    ],
    "awardingAgencies": [
        "Department of Veterans Affairs"
    ]
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
cURL
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~usaspending-federal-awards-monitor/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"awardTypes": ["contracts"], "awardingAgencies": ["Department of Veterans Affairs"]}'
LangChain · langchain-apify
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/usaspending-federal-awards-monitor")
result = tool.invoke({"run_input": {"awardTypes": ["contracts"], "awardingAgencies": ["Department of Veterans Affairs"]}})
print(result)

The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.

Data fields (39)
FieldTypeMeaning
changeTypestringChange since the baseline: initial (first monitored run), new, updated or unchanged. null when no monitorKey/previousDatasetId is used.
changedFieldsarrayFor updated awards: which tracked fields changed (awardAmount, totalOutlays, loanFaceValue, loanSubsidyCost, startDate, endDate, lastDateToOrder, lastModifiedDate).
previousValuesobjectFor updated awards: previous value of each changed field.
awardTypeGroupstringAward type group the row was searched under. Never mix groups in totals without care: loans and IDVs measure different things.
generatedInternalIdstringStable USAspending award key, e.g. CONT_AWD_..._9700_... Use it to deduplicate and join.
awardIdstringDisplay award ID (PIID for contracts, FAIN/URI for assistance).
awardTypestringAward type as published, e.g. DELIVERY ORDER, DEFINITIVE CONTRACT, PROJECT GRANT (B), DIRECT LOAN (E).
recipientNamestringRecipient (awardee) name as published.
recipientUeistring12-character Unique Entity ID of the recipient; null for some legacy or redacted awards.
recipientIdstringUSAspending recipient hash with level suffix (-C child, -P parent, -R recipient).
recipientLocationobjectRecipient address: city, county, stateCode, stateName, zip5, countryCode, countryName, congressionalDistrict.
awardingAgencystringAwarding top-tier agency, e.g. Department of Veterans Affairs.
awardingAgencyCodestringAwarding agency code (e.g. 036).
awardingSubAgencystringAwarding sub-agency.
awardingSubAgencyCodestringAwarding sub-agency code.
fundingAgencystringFunding top-tier agency (may differ from the awarding agency).
fundingSubAgencystringFunding sub-agency.
awardAmountnumberTotal obligated amount over the award life, USD (contracts: total obligation; grants/assistance: federal obligation). Can be negative after de-obligations. null for loans and when not reported — never 0 by default.
totalOutlaysnumberCash actually paid out so far, USD. Separate from awardAmount and never added to it; null when not reported (common for contracts). Value from the search index, which can lag the award page.
loanFaceValuenumberLoans only: face value of the loan, USD.
loanSubsidyCostnumberLoans only: estimated subsidy cost to the government, USD.
covid19ObligationsnumberObligations funded by COVID-19 supplemental appropriations, USD; null when not reported.
infrastructureObligationsnumberObligations funded by the Infrastructure Investment and Jobs Act, USD; null when not reported.
currencystringAlways USD.
startDatestringPeriod of performance start (loans: issued date), YYYY-MM-DD; null when not published.
endDatestringCurrent period of performance end, YYYY-MM-DD, as published in the USAspending search index. Always null for IDVs (use lastDateToOrder) and loans (not in the search index).
lastDateToOrderstringIDVs only: last date to place orders, YYYY-MM-DD.
baseObligationDatestringDate of the base (first) obligation, YYYY-MM-DD.
lastModifiedDatestringWhen USAspending last changed the award record (sourceUpdatedAt), YYYY-MM-DDTHH:MM:SS as published, without time zone.
naicsCodestringNAICS industry code (contracts and IDVs).
naicsDescriptionstringNAICS description.
pscCodestringProduct and Service Code (contracts and IDVs).
pscDescriptionstringPSC description.
assistanceListingsarrayAssistance listings (CFDA) for grants and other assistance: [{number, title}]. Empty for contracts.
descriptionstringAward description as published (often uppercase, may be truncated by the source).
placeOfPerformanceobjectPrimary place of performance: city, county, stateCode, stateName, zip5, countryCode, countryName, congressionalDistrict.
awardUrlstringAward page on USAspending.gov.
recipientUrlstringRecipient profile on USAspending.gov; null for placeholder recipients such as MULTIPLE RECIPIENTS.
sourceobjectProvenance: provider, endpoint and fetchedAt (when this Actor read the record).
Input settings (15)

The main fields of the input form. With the API you send them as JSON.

SettingName in the APITypeExample value
Award typesawardTypesarray["contracts"]
Awarding agenciesawardingAgenciesarray["Department of Veterans Affairs"]
Recipients (name or UEI)recipientsarray
NAICS codesnaicsCodesarray["541512"]
PSC codespscCodesarray
Keywordskeywordsarray
Date filterdateFilterstring"activity"
Look back (days)lookbackDaysinteger30
From datedateFromstring
To datedateTostring
Sort bysortBystring"amount"
Max awards per award typemaxResultsinteger20
Monitor key (for scheduled runs)monitorKeystring
Compare with previous datasetpreviousDatasetIdstring
Only output new and updated awardsonlyChangesbooleantrue

Use cases with this tool

Each guide shows all the steps and the other tools.

Start on Apify

Make a free Apify account: you get $5 of free usage every month. Missing a tool? Suggest it. We read every idea, but we do not promise to build it.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure