USAspending Awards - Contracts, Grants, Loans avatar

USAspending Awards - Contracts, Grants, Loans

Pricing

$3.00 / 1,000 award returneds

Go to Apify Store
USAspending Awards - Contracts, Grants, Loans

USAspending Awards - Contracts, Grants, Loans

Federal contracts, IDVs, grants and loans from the official USAspending.gov API v2: recipient, UEI, amount, outlays, NAICS, PSC, agency, place of performance.

Pricing

$3.00 / 1,000 award returneds

Rating

0.0

(0)

Developer

Jason

Jason

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Pulls US federal awards straight from USAspending.gov, the official Treasury site for federal spending data, through its public API v2 (/api/v2/search/spending_by_award/). No API key, no browser automation, no login. You get one flat JSON record per award - contract, IDV, grant, cooperative agreement, loan or direct payment - with the recipient's name, UEI and address, the total award amount and outlays to date, the awarding and funding agency, the NAICS and PSC codes (contracts) or CFDA programme (assistance), the place of performance, and a link to the award's page on usaspending.gov. Filter by date window, award family, keyword, NAICS, PSC, recipient, awarding agency, state and minimum amount. Federal spending is high volume - roughly 9,000 to 15,000 awards have an action on a normal weekday - so read Limits and freshness before you size maxItems.

What you get

Every record contains:

FieldDescription
idgenerated_internal_id, USAspending's own award key, for example CONT_AWD_140D0421F0658_1406_HHSN316201200125W_7529 or ASST_NON_UH3NS143065_075. Stable across runs - use it to de-duplicate and upsert.
sourceAlways usaspending.
urlThe public award page, https://www.usaspending.gov/award/<id>.
awardGroupcontracts, idvs, grants, loans, direct-payments or other.
awardIdPIID for contracts and IDVs, FAIN for assistance awards.
awardTypeDEFINITIVE CONTRACT, DELIVERY ORDER, INDEFINITE DELIVERY / INDEFINITE QUANTITY, PROJECT GRANT (B), COOPERATIVE AGREEMENT (B), DIRECT LOAN (E), GUARANTEED/INSURED LOAN (F), ... Populated for every family, so you can tell a delivery order from a definitive contract and a direct loan from a guaranteed one.
recipientName, recipientId, recipientUeiRecipient name, USAspending recipient hash and the 12-character Unique Entity Identifier.
recipientAddress, recipientCity, recipientState, recipientStateName, recipientZip, recipientCountry, recipientCongressionalDistrictThe recipient's registered business address.
amountTotal award amount in USD over the award's whole life (Award Amount, or Loan Value for loans) - not the amount obligated inside your date window.
totalOutlaysMoney actually paid out so far, USD. null when the source publishes none.
subsidyCostLoans only: the government's subsidy cost, USD (often negative).
descriptionThe award description as filed, upper-case, up to several thousand characters.
startDate, endDatePeriod of performance. For loans startDate is the issue date; IDVs have no end date.
lastDateToOrderIDVs only: the last date orders may be placed against the vehicle.
baseObligationDateDate of the award's base transaction.
lastModifiedWhen USAspending last modified the record, ISO 8601 without an offset (the API publishes no timezone).
awardingAgency, awardingAgencyCode, awardingSubAgencyWho awarded it.
fundingAgency, fundingSubAgencyWho paid for it, when different.
naicsCode, naicsDescription, pscCode, pscDescriptionIndustry and product/service classification. Contracts and IDVs only; null on assistance awards.
cfdaNumber, cfdaProgramTitle, assistanceListings, saiNumberAssistance Listing (CFDA) programme for grants, loans and direct payments; assistanceListings is the full array when an award draws on several. null/[] on contracts.
placeOfPerformanceState, placeOfPerformanceStateName, placeOfPerformanceCity, placeOfPerformanceCounty, placeOfPerformanceZip, placeOfPerformanceCountry, placeOfPerformanceCongressionalDistrictWhere the work is done.
defCodesDisaster Emergency Fund Codes attached to the award (Q, AAA, L, ...); [] when none.
covidObligations, covidOutlays, infrastructureObligations, infrastructureOutlaysCOVID-19 supplemental and IIJA (infrastructure) money on the award, USD.
fetchedAtISO timestamp of the run that produced the record.

The dataset has three views: Overview (award, recipient, amount, agency, NAICS/PSC, dates, link), Recipients (name, UEI, full address, district - the lead-generation view) and Grants and loans (CFDA programme, subsidy cost, period).

Input

InputTypeDefaultDescription
awardGroupstringcontractscontracts (A/B/C/D), idvs (IDV_A..IDV_E), grants (02/03/04/05), loans (07/08), direct-payments (06/10), other (09/11), or all. USAspending allows only one family per query, so all runs one query per family and merges them into a single sorted stream.
daysBackinteger30Look-back window in days ending today. Ignored when dateFrom/dateTo are set.
dateFromstring-Start of the window, YYYY-MM-DD. Not earlier than 2007-10-01; the run stops with a clear message if it is.
dateTostringtodayEnd of the window, YYYY-MM-DD.
dateTypestringaction_dateWhich award date the window matches: action_date (latest transaction on the award), new_awards_only (base transaction inside the window - genuinely new awards), date_signed (same anchor as new_awards_only), last_modified_date (record touched by USAspending - the widest).
keywordsstring[]noneSent to the USAspending keyword filter, which searches the award description, recipient name, award ID and the NAICS/PSC descriptions. Terms are ORed.
naicsCodesstring[]allNAICS codes or prefixes, 2 to 6 digits, ORed. 5415 = computer systems design, 54 = professional/scientific/technical, 23 = construction, 3364 = aerospace, 62 = health care. Contracts and IDVs only.
pscCodesstring[]allProduct and Service Codes or prefixes, 1 to 4 characters, ORed. D = IT and telecom services, R = professional support, Y = construction, 70 = general-purpose IT equipment. Contracts and IDVs only.
recipientSearchstring[]allRecipient names or UEI/DUNS identifiers, ORed. Substrings work: "Lockheed" matches every Lockheed entity.
agenciesstring[]allTop-tier awarding agency names as USAspending spells them ("Department of Defense", "General Services Administration"). An unambiguous partial name is accepted; an unknown name stops the run rather than returning zero rows.
statesstring[]allTwo-letter place-of-performance state or territory codes (VA, TX, PR).
minAmountinteger0Keep only awards worth at least this much (the total award amount).
sortBystringamountamount (biggest first - right when maxItems is smaller than the match count) or lastModified (most recently updated first - right for a monitoring feed).
orderstringdescdesc or asc.
maxItemsinteger500Stop after this many awards. You are charged per award, so this is also the cost cap. See Limits and freshness - the default is a sample of a very large feed, not a complete window.

Example - IT services contracts awarded in Virginia in the last fortnight, worth at least US$1m:

{
"awardGroup": "contracts",
"daysBack": 14,
"naicsCodes": ["5415"],
"states": ["VA"],
"minAmount": 1000000,
"maxItems": 1000
}

Example - a daily monitoring feed of genuinely new NIH grants, newest first:

{
"awardGroup": "grants",
"daysBack": 10,
"dateType": "new_awards_only",
"agencies": ["Department of Health and Human Services"],
"sortBy": "lastModified",
"maxItems": 2000
}

Bad input fails fast: a malformed date, a dateFrom before 2007-10-01, a NAICS code that is not 2-6 digits, a PSC longer than 4 characters, a state that is not two letters, a negative minAmount, an unknown awardGroup/dateType/sortBy, or an awarding agency name that does not exist all stop the run with the validation message as its status - the agency check before any award request is made.

Output example

A real contract record from a live run on 2026-09-08 ({"awardGroup":"contracts","daysBack":7,"keywords":["cybersecurity"],"maxItems":3}), unedited:

{
"id": "CONT_AWD_140D0421F0658_1406_HHSN316201200125W_7529",
"source": "usaspending",
"url": "https://www.usaspending.gov/award/CONT_AWD_140D0421F0658_1406_HHSN316201200125W_7529",
"awardGroup": "contracts",
"awardId": "140D0421F0658",
"awardType": "DELIVERY ORDER",
"recipientName": "CUSTOMER VALUE PARTNERS, LLC",
"recipientId": "8a2c800a-0d04-3aaf-816b-5aeb9d1b3726-C",
"recipientUei": "L6R3M86AFBB5",
"recipientCity": "FAIRFAX",
"recipientState": "VA",
"recipientStateName": "Virginia",
"recipientZip": "22030",
"recipientCountry": "USA",
"recipientAddress": "3701 PENDER DR",
"recipientCongressionalDistrict": "98",
"amount": 31451071.79,
"totalOutlays": 28779613.27,
"subsidyCost": null,
"description": "ENTERPRISE CYBERSECURITY SUPPORT SERVICES (ECSS)",
"startDate": "2021-09-21",
"endDate": "2026-11-20",
"lastDateToOrder": null,
"baseObligationDate": "2021-09-20",
"lastModified": "2026-09-04T13:48:29",
"awardingAgency": "Department of the Interior",
"awardingAgencyCode": "014",
"awardingSubAgency": "Departmental Offices",
"fundingAgency": "Department of Health and Human Services",
"fundingSubAgency": "National Institutes of Health",
"naicsCode": "541512",
"naicsDescription": "COMPUTER SYSTEMS DESIGN SERVICES",
"pscCode": "DJ01",
"pscDescription": "IT AND TELECOM - SECURITY AND COMPLIANCE SUPPORT SERVICES (LABOR)",
"cfdaNumber": null,
"cfdaProgramTitle": null,
"assistanceListings": [],
"saiNumber": null,
"placeOfPerformanceState": "MD",
"placeOfPerformanceStateName": "Maryland",
"placeOfPerformanceCity": "BETHESDA",
"placeOfPerformanceCounty": "MONTGOMERY",
"placeOfPerformanceZip": "20892",
"placeOfPerformanceCountry": "USA",
"placeOfPerformanceCongressionalDistrict": "08",
"defCodes": ["Q"],
"covidObligations": 0,
"covidOutlays": 0,
"infrastructureObligations": 0,
"infrastructureOutlays": 0,
"fetchedAt": "2026-09-08T02:19:59.606Z"
}

A grant from the same day ({"awardGroup":"grants","daysBack":7,"states":["CA"],"sortBy":"lastModified"}), with the fields shared with the contract above omitted and the description trimmed:

{
"id": "ASST_NON_UH3NS143065_075",
"url": "https://www.usaspending.gov/award/ASST_NON_UH3NS143065_075",
"awardGroup": "grants",
"awardId": "UH3NS143065",
"awardType": "COOPERATIVE AGREEMENT (B)",
"recipientName": "UNIVERSITY OF SOUTHERN CALIFORNIA",
"recipientUei": "G88KLJR3KYT5",
"recipientAddress": "3720 S FLOWER ST FL 3",
"recipientCity": "LOS ANGELES",
"recipientState": "CA",
"amount": 772119,
"description": "DEVELOPMENT OF ANGIOTENSIN AT2 INHIBITORS FOR NEUROPATHIC PAIN RELIEF - PROJECT SUMMARY ...",
"startDate": "2025-06-01",
"endDate": "2029-05-31",
"baseObligationDate": "2026-09-01",
"lastModified": "2026-09-04T22:02:54",
"awardingAgency": "Department of Health and Human Services",
"awardingSubAgency": "National Institutes of Health",
"naicsCode": null,
"pscCode": null,
"cfdaNumber": "93.853",
"cfdaProgramTitle": "EXTRAMURAL RESEARCH PROGRAMS IN THE NEUROSCIENCES AND NEUROLOGICAL DISORDERS",
"saiNumber": "SAI UNAVAILABLE",
"placeOfPerformanceCity": "LOS ANGELES",
"placeOfPerformanceState": "CA",
"defCodes": []
}

And a loan ({"awardGroup":"loans","daysBack":60,"minAmount":1000000,"maxItems":2}), same trimming - amount carries the face value from Loan Value, awardType separates direct loans from guaranteed ones, and totalOutlays/endDate are null because the source publishes neither for this family:

{
"id": "ASST_NON_P268K134897_091",
"url": "https://www.usaspending.gov/award/ASST_NON_P268K134897_091",
"awardGroup": "loans",
"awardId": "P268K134897",
"awardType": "DIRECT LOAN (E)",
"recipientName": "CAPELLA EDUCATION COMPANY",
"recipientUei": "PBSBCK9D8BF7",
"recipientAddress": "CAPELLA TOWER, 9TH FLOOR",
"recipientCity": "MINNEAPOLIS",
"recipientState": "MN",
"amount": 4829148534,
"totalOutlays": null,
"subsidyCost": 0,
"description": "DL BASE RECORD 2012-2013",
"startDate": "2026-08-20",
"endDate": null,
"baseObligationDate": "2012-03-26",
"lastModified": "2026-09-02T20:10:08",
"awardingAgency": "Department of Education",
"awardingSubAgency": "Department of Education",
"cfdaNumber": "84.268",
"cfdaProgramTitle": "FEDERAL DIRECT STUDENT LOANS",
"placeOfPerformanceCity": "MINNEAPOLIS",
"placeOfPerformanceState": "MN",
"defCodes": []
}

The run also writes a SUMMARY record to the key-value store: awards pushed, pages read per award group, how many awards actually matched your filters on USAspending, the date window and date type, and USAspending's own data load date. A real one, from {"awardGroup":"contracts","dateFrom":"2026-08-25","dateTo":"2026-09-08","naicsCodes":["5415"],"maxItems":500} on 2026-09-08:

{
"pushed": 500,
"limitReached": true,
"scanned": 500,
"filteredOut": { "minAmount": 0, "duplicate": 0, "missingId": 0 },
"perGroup": { "contracts": { "pages": 5, "scanned": 500, "pushed": 500 } },
"availableOnSource": { "contracts": 2754 },
"availableOnSourceIgnoresMinAmountFor": [],
"dataLastUpdated": "09/07/2026",
"dateFrom": "2026-08-25",
"dateTo": "2026-09-08",
"dateType": "action_date",
"awardGroups": ["contracts"],
"sortBy": "amount",
"order": "desc"
}

availableOnSource counts only the award families this run queried, with the same award type codes, so it is directly comparable with pushed: the same input with maxItems: 5000 delivered exactly 2,754 records with 2,754 distinct ids. availableOnSourceIgnoresMinAmountFor names any family whose figure is an upper bound rather than an exact match - only loans can appear there, and only when you set minAmount (see Limits and freshness).

Pricing

Pay per result: US$0.003 per award delivered (US$3 per 1,000 awards). You are charged only for records pushed to the dataset; a run that returns nothing costs nothing. Runs on the Apify free plan are limited by the platform's free-tier usage allowance.

Data source and licence

  • Endpoint: POST https://api.usaspending.gov/api/v2/search/spending_by_award/, published by the US Department of the Treasury, Bureau of the Fiscal Service as the official DATA Act site. API index: https://api.usaspending.gov/docs/endpoints. Request contract: https://github.com/fedspendingtransparency/usaspending-api/blob/master/usaspending_api/api_contracts/contracts/v2/search/spending_by_award.md.
  • The Actor also calls POST /api/v2/search/spending_by_award_count/ once per run to report how many awards matched (twice when you combine minAmount with awardGroup: "loans" or "all", because the loan count has to be taken without the amount filter), GET /api/v2/awards/last_updated/ (data load date) and GET /api/v2/references/toptier_agencies/ (only when you set agencies, to validate the names).
  • Licence: the data is a work of the United States Government and is in the public domain under 17 U.S.C. § 105; USAspending publishes it under the DATA Act with no registration, key or usage terms. The USAspending API itself is released under CC0 1.0 Universal (https://github.com/fedspendingtransparency/usaspending-api/blob/master/LICENSE, read 8 September 2026), which permits commercial reuse without attribution. Crediting "USAspending.gov" and linking the award page is still good practice, and the source values are reproduced here unchanged so buyers can check them.
  • Personal data. Federal award records name the recipient organisation and give its registered business address (recipientName, recipientAddress, recipientCity, recipientZip). Most recipients are companies, universities and governments, but sole proprietors and individual grantees also receive federal awards, and for those the "business" address can be a home address. USAspending itself redacts individuals where the law requires it - such records arrive with recipientName set to REDACTED DUE TO PII and an empty address, and the Actor passes that through unchanged rather than trying to fill it in. No email addresses or telephone numbers are published by this endpoint. Publication is lawful under the DATA Act; how you use the names and addresses afterwards - marketing in particular - is your responsibility under the applicable rules (CAN-SPAM, TCPA, state privacy laws, and GDPR if you process them in the EU or UK).

Limits and freshness

All figures below were measured against the live API on 8 September 2026.

  • Volumes. Counted with spending_by_award_count on action_date, one day at a time: 26 Aug (Wed) 9,242 awards, 27 Aug (Thu) 10,637, 28 Aug (Fri) 9,390, 29 Aug (Sat) 1,759, 30 Aug (Sun) 742, 31 Aug (Mon) 12,912, 1 Sep (Tue) 9,194, 2 Sep (Wed) 15,437, 3 Sep (Thu) 9,530 - so about 9,000 to 15,000 awards per weekday and well under 2,000 at weekends. Over a whole week (1-8 Sep) 36,561 awards had an action: 30,330 contracts, 4,357 grants, 1,811 IDVs, 61 direct payments, 2 loans. Over 30 days (9 Aug - 8 Sep) 232,372: 155,643 contracts, 42,653 grants, 22,032 direct payments, 7,891 IDVs, 2,335 other, 1,818 loans. All figures are counted with the same award type codes the Actor queries (see the next bullet).
  • Reachable totals, not category totals. USAspending's count endpoint, asked without award_type_codes, buckets awards by category, and that is a wider set than any award-type query can return - the search endpoint itself refuses to run without award_type_codes. The 30-day window above answers 237,506 category-wide against the 232,372 the codes can reach (the gap is 2,805 grants, 2,290 loans and 39 direct payments); a 60-day place-of-performance WY window answers grants 511 / loans 98 category-wide against 412 / 60 by code. The Actor counts by code, so SUMMARY.availableOnSource never promises rows it cannot deliver: that WY window reported 1,752 available and delivered 1,752 with 1,752 distinct ids.
  • Size maxItems to the window - the default is a sample, not an archive. maxItems counts records delivered, and the stream is ordered by sortBy, so an unfiltered run returns the top N by award amount (or the N most recently modified) and stops. Truncation is never silent, and does not depend on the count endpoint being reachable or exact: any run that stops at the limit logs maxItems (N) was reached: more awards match these filters than this run returned and sets SUMMARY.limitReached, and when the counts are available the run also logs N awards match these filters but maxItems is M and records both figures in SUMMARY. Narrow with naicsCodes, pscCodes, keywords, agencies, states or minAmount before raising maxItems.
  • Freshness and lag. GET /api/v2/awards/last_updated/ reported 09/07/2026 on 8 September, and every run copies that into SUMMARY.dataLastUpdated. The action-date counts show the practical lag: the four most recent days were still filling in (4 Sep 2,300, 5 Sep 93, 6 Sep 3, 7 Sep 2, 8 Sep 2) against 1,759 for the equivalent Saturday a week earlier. Treat the newest 3 to 4 days as incomplete; a daily schedule with daysBack: 7 or more re-reads that tail as it fills.
  • One record per award, not per transaction. An award that is modified appears again in every later window that contains one of its actions, with the same id. amount is the award's whole-life total, not the money obligated inside your window, so summing amount over a window over-counts. Use id to upsert, and USAspending's own transaction endpoints if you need per-transaction obligations.
  • Rate limits and run time. None is documented and none was observed: 20 back-to-back page requests all returned HTTP 200 in about 1.0 s each with no 429 and no rate-limit headers. Pages are 100 records (the API's maximum - it rejects limit: 500 with Field 'limit' value '500' is above max '100') and are spaced 200 ms apart out of politeness. Measured throughput: 500 awards in 7 seconds, 2,754 awards in 36 seconds (28 pages), roughly 13 seconds per 1,000 awards. fetchWithRetry still retries 429 and 5xx with exponential back-off and honours Retry-After.
  • Deep paging works, but the API's own hasNext flag does not. page_metadata.hasNext turns false at page 100 (10,000 records) even when the result set is far larger. Verified on a 30,330-record window: pages 101 to 303 each returned 100 distinct, correctly sorted records and page 304 returned the final 30. The Actor therefore pages until a page comes back short, and a 2,754-record filtered run delivered exactly the 2,754 the count endpoint promised, with no duplicates.
  • One award family per query. The search endpoint rejects mixed award_type_codes ('award_type_codes' must only contain types from one group.), so awardGroup: "all" issues one paged query per family and merges the six streams on the sort key. That costs one extra first-page request per family. The count endpoint is the exception: it does accept codes from several families in one request, which is why a run of any size still needs only one count call.
  • Field coverage differs by family. Contracts and IDVs carry NAICS/PSC and no CFDA; grants, loans and direct payments carry CFDA and no NAICS/PSC; loans report Loan Value and Subsidy Cost instead of Award Amount and Total Outlays (the Actor maps Loan Value onto amount); IDVs have lastDateToOrder instead of endDate. Nothing is invented - a field the source does not publish for that family is null.
  • minAmount on loans is applied locally, and its count is an upper bound. USAspending's award_amounts filter reads the award's obligation rather than its face value, so on loans it drops the wrong rows: over 10 Jul - 8 Sep the largest loan is a Loan Value of $4,829,148,534, yet lower_bound: 1000 already excludes it and cuts the loan count from 72,036 to 1,992. The Actor therefore never sends that filter for loans - it filters on amount itself after fetching, so a minAmount run on loans really does return every loan at or above your figure, biggest first. The cost is that USAspending cannot count them for you: SUMMARY.availableOnSource.loans then counts every loan in the window, SUMMARY.availableOnSourceIgnoresMinAmountFor lists loans to say so, and the log calls the total an upper bound. For every other family minAmount runs server-side and the count is exact.
  • Window edges. dateFrom/dateTo are inclusive calendar dates sent to the API unchanged; the API refuses anything before 2007-10-01 and the Actor stops with that message rather than sending it. For older awards use USAspending's bulk download endpoints.
  • This endpoint returns no per-record action date. The window is applied server-side; each record carries baseObligationDate and lastModified only.
  • recipientSearch with several terms. The contract documents a one-item limit for recipient_search_text, but multiple terms were accepted and ORed correctly in testing (["Lockheed", "Boeing"] returned both). If Treasury ever enforces the documented limit, use one term per run.

Use cases

  • Competitor and incumbent intelligence. Watch who wins what in your NAICS or PSC codes, at what value, funded by which agency, and when the period of performance ends - endDate and lastDateToOrder tell you when the re-compete is coming.
  • Lead generation for the federal supply chain. The Recipients view gives you prime awardees with their UEI, full business address and congressional district, filtered to your state and industry - the buying list for subcontracting, staffing, insurance, financing and compliance services.
  • Grant and funding research. Track which institutions receive which CFDA programmes, at what value, with dateType: "new_awards_only" for genuinely new awards rather than modifications - for research offices, non-profits and consultancies chasing the same programmes.

Support

Open an issue on the Actor's Issues tab on Apify Store. Replies within 14 days. Bug reports that name the run id and the input used are fixed fastest.