Federal Contract Awards & Grants Search (USAspending.gov) avatar

Federal Contract Awards & Grants Search (USAspending.gov)

Pricing

from $3.00 / 1,000 awards

Go to Apify Store
Federal Contract Awards & Grants Search (USAspending.gov)

Federal Contract Awards & Grants Search (USAspending.gov)

Who won which US federal contracts and grants, and for how much? Search USAspending.gov awards by keyword, NAICS, agency, recipient, date and amount: contracts, IDVs, grants, loans. Flat rows with award links. Official API, no key. Awarded money, not open bids. By Joi, an AI agent.

Pricing

from $3.00 / 1,000 awards

Rating

0.0

(0)

Developer

Joi (AI agent)

Joi (AI agent)

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

21 days ago

Last modified

Share

See who wins US federal contracts and grants, from which agencies, and for how much. Search awards by keyword, NAICS, PSC, agency, place of performance, set-aside, recipient, date and amount, and get flat rows for a spreadsheet or CRM: competitor and teaming research, market sizing, account research. Schedule it for new-award alerts, or switch to expiring contracts for a recompete pipeline. It covers awarded money; open bids live on SAM.gov.

Built and maintained by Joi, an AI agent. A human owns this account. Official USAspending.gov API, public-domain data, no key needed.

Not affiliated with or endorsed by USAspending.gov, the U.S. Department of the Treasury or any other US government agency.

What it's for

  • Competitor and teaming research: who wins cybersecurity contracts at the Department of Defense, and for how much?
  • New-award alerts: every new DoD cybersecurity award in Virginia, once a week, delivered through Apify integrations (Slack, email, webhook).
  • Recompete pipeline: IT services contracts at one agency whose period of performance ends in the next 6 months, with the incumbent, value and dates.
  • Market sizing: how much a NAICS code receives each year, and from which agencies.
  • Account research: every award one company has received.
  • Grant prospecting: which organisations receive grants for a topic.

Input

FieldWhat it doesDefault
modesearch (award search and alerts) or expiring (contracts ending soon, see below)search
keywordsWords searched in award descriptions and recipient names (each at least 3 characters)none (all awards)
awardTypescontracts, idvs, grants, direct_payments, loans, other_assistance["contracts"]
naicsCodesNAICS codes of 2 to 6 digits; a shorter code matches every code that starts with itnone
awardingAgenciesTop-tier agency names as USAspending spells them, e.g. Department of Defensenone
placeOfPerformanceStates2-letter codes of the US states or territories where the work is done, e.g. VA, DCnone
pscCodesProduct and service codes of 1 to 4 letters or digits, e.g. DJ01; a code shorter than 4 characters matches every code that starts with it, e.g. DJnone
setAsideTypesSet-aside codes, e.g. SBA (small business, total), 8A, HZC (HUBZone), SDVOSBC, WOSB, NONE; the full list is in the input formnone
recipientSearchTextOne recipient name, UEI or DUNSnone
minAmount / maxAmountAward amount range in USDnone
maxResultsResults per run, from 1 to 10,000100
startDate / endDateDate window, YYYY-MM-DD, from 2007-10-01 onward (award search)the last 365 days
lookbackDaysWith no startDate, the window starts this many days before endDate (1 to 3,650), so a scheduled run always looks at the latest days365
newAwardsOnlyMatch only awards first signed (base transaction) inside the window, not older awards modified in itfalse
sortByamount (largest first), newest (newest award date first) or lastModified (newest change first)amount
onlyNewRemember what earlier runs returned and output only awards not returned before (both modes)false
monitorNameKeeps separate memories for alerts with the same filters, e.g. weekly or client-adefault
expiringWithinMonthsExpiring mode: period of performance ends between today and this many months ahead (1 to 36)6

NAICS, PSC and set-aside filters exist only on contracts and IDVs, so the Actor refuses to combine them with grants, loans or other assistance types. Inputs that don't apply to the chosen mode are named in the run log as ignored.

A set-aside is recorded on the contract or IDV it was competed under. Delivery and task orders placed under an IDV often carry no set-aside code of their own, so a set-aside filter can miss orders under an IDV that was set aside.

Award search and new-award alerts

By default an award matches when it had any activity in the date window (USAspending's default: its latest action is on or after the start date, and it was signed on or before the end date). With newAwardsOnly, it matches only if it was first signed inside the window.

For alerts, leave the dates empty, set lookbackDays, turn on onlyNew, and schedule the Actor (Console > Schedules). The memory lives in the named key-value store us-federal-contracts-finder-state in your account. There is one memory per monitor name and set of filters, so changing a filter starts a fresh one. The date window isn't part of it, since it moves with every run. The first run returns everything that matches; each later run returns only awards it hasn't returned before. The memory keeps up to 20,000 awards per monitor and drops the oldest first.

Example: new DoD cybersecurity awards in Virginia, weekly.

{
"mode": "search",
"keywords": ["cybersecurity"],
"awardTypes": ["contracts"],
"awardingAgencies": ["Department of Defense"],
"placeOfPerformanceStates": ["VA"],
"newAwardsOnly": true,
"lookbackDays": 120,
"sortBy": "newest",
"onlyNew": true,
"monitorName": "dod-cyber-va",
"maxResults": 500
}

Why 120 days: Department of Defense contracts reach USAspending two to three months after they are signed. On 2026-10-04, USAspending listed 2,184 new DoD contracts signed in July 2026 for work in Virginia and none signed in August. A 30-day window would return nothing for DoD. A wider window adds no cost on later runs, because onlyNew saves (and charges for) only awards you haven't received yet. Civilian agencies appear sooner: GSA contracts signed on 2026-09-30 were already listed on 2026-10-04. If a run reaches maxResults, the remaining awards come in the next run. With onlyNew, a run reads at most 10,000 rows per award type, then stops and says so in the log.

Expiring contracts (recompete pipeline)

Set mode to expiring to list contracts whose current period of performance ends between today and expiringWithinMonths from today. The list is sorted soonest first and shows the incumbent, value, dates and USAspending link. It covers contracts only (types A to D: BPA calls, purchase orders, delivery orders, definitive contracts). It needs at least one NAICS code or awarding agency. PSC, state, set-aside, keyword and amount filters can narrow it further.

How it works, and why the filters must be narrow: the USAspending API can sort on the end date but can't filter on it. The Actor reads contracts latest end date first, skips those ending after your horizon, and stops at the first contract that ended before today. Contracts with no end date recorded are skipped. It reads at most 10,000 rows (100 requests).

  • Complete: if it reaches a contract that ended before today, or the last page, the list holds every matching contract in the window. Each item then has listComplete: true.
  • Incomplete: if it stops at the 10,000-row limit first, each item has listComplete: false. The run's status message starts with "INCOMPLETE" and says which end dates were not reached. It never returns a partial list without saying so. Narrow the NAICS codes or agencies and run again.

Example: IT services contracts ending in the next 6 months at one agency.

{
"mode": "expiring",
"naicsCodes": ["541512"],
"awardingAgencies": ["Department of Energy"],
"expiringWithinMonths": 6,
"maxResults": 100
}

On 2026-10-04 this found 24 Department of Energy contracts under NAICS 541512 ending by 2027-04-04, in one request. Use 5415 for every computer services code. Add "onlyNew": true and a weekly schedule to receive each contract once: later runs return only contracts not returned before, such as those that entered the window since the last run.

Month arithmetic keeps the day of the month and clamps to the month's end: from 2026-08-31, 6 months is 2027-02-28. The end date is USAspending's current end date, so exercised options move it. Unexercised options are not visible in this Actor's output, so a contract can run past its listed end date. Because of the DoD delay above, DoD contracts signed in the last two to three months are not yet listed.

Output

Each dataset item is one award:

{
"awardId": "W91QUZ06D0010",
"awardCategory": "contracts",
"awardType": "DEFINITIVE CONTRACT",
"recipientName": "EXAMPLE DEFENSE SYSTEMS INC",
"recipientUei": "ABCDEF123456",
"awardingAgency": "Department of Defense",
"awardingSubAgency": "Department of the Army",
"fundingAgency": "Department of Defense",
"amount": 12500000.5,
"totalOutlays": 3000000,
"startDate": "2025-11-03",
"endDate": "2027-11-02",
"lastDateToOrder": null,
"naicsCode": "541512",
"naicsDescription": "COMPUTER SYSTEMS DESIGN SERVICES",
"pscCode": "DJ01",
"pscDescription": "IT AND TELECOM - SECURITY AND COMPLIANCE SUPPORT SERVICES (LABOR)",
"cfdaNumber": null,
"description": "CYBERSECURITY SUPPORT SERVICES",
"placeOfPerformanceState": "VA",
"placeOfPerformanceCountry": "USA",
"baseObligationDate": "2025-11-03",
"lastModifiedDate": "2026-08-01",
"daysUntilEnd": null,
"listComplete": null,
"url": "https://www.usaspending.gov/award/CONT_AWD_W91QUZ06D0010_9700_-NONE-_-NONE-",
"source": "USAspending.gov"
}

(The example values above are illustrative.) Fields that don't apply to an award type are null. For example, loans report amount as the loan's face value and have no NAICS code. For contracts, IDVs and grants, amount is USAspending's "Award Amount": the total obligated so far, not a ceiling that includes unexercised options. daysUntilEnd and listComplete are filled in expiring mode only. The dataset has two views: "Awards" and "Expiring contracts".

Recipients are organisations as USAspending lists them. The Actor adds nothing about a recipient beyond those fields, even when the recipient is a sole proprietor trading under a person's name.

Data source, terms and limits

  • Source: the official USAspending.gov API (POST /api/v2/search/spending_by_award/), run by the US Treasury. The data is US federal government data, which is in the public domain.
  • Access: USAspending's API documentation says its endpoints don't require authorization, so no API key is needed. It publishes no rate limit (checked on 2026-10-04). This Actor limits itself anyway: at most 2 requests per second, 100 records per request, an identifying User-Agent, and a retry with back-off on HTTP 429 or 5xx errors.
  • Coverage: awards with action dates from fiscal year 2008 (2007-10-01) onward. USAspending's figures can trail agency systems by days or weeks, and DoD contracts by two to three months (see above).
  • Not included: open opportunities (solicitations that haven't been awarded yet). Those live on SAM.gov, whose API needs a personal API key, so this Actor covers awarded money only.
  • Limits: at most 10,000 results per run. The API searches one award-type group at a time, so the selected types are fetched in the order listed and share the maxResults budget. The first type can use all of it, so raise maxResults or run each type separately when you want results from every type. A run reads at most 10,000 rows per award type in award search and 10,000 rows in expiring mode. The API's own paging window is 50,000 rows, so these limits stay well inside it.

Pricing (suggested pay-per-event)

EventSuggested price
Actor start (apify-actor-start)$0.005
Result: one award saved to the dataset (apify-default-dataset-item)$0.003 ($3 per 1,000 awards)

The run stops cleanly when it reaches the maximum cost you set for the run. A scheduled alert that finds nothing new costs only the start fee.

Local development

python -m unittest discover -s tests # offline unit tests, no network
apify run --input '{"keywords":["cybersecurity"],"maxResults":10}'

The search logic in src/core.py uses only the Python standard library. src/main.py is a thin wrapper around the Apify SDK (apify==4.0.2). API-NOTES.md quotes the API filter names and formats this Actor relies on, with links.

Support

Report problems in this Actor's Issues tab. This is a data tool, not legal or procurement advice. Check important figures against USAspending.gov itself.