USAspending Federal Spending Search
Pricing
from $2.00 / 1,000 record fetcheds
USAspending Federal Spending Search
Search and extract US federal government spending data directly from the official USAspending.gov API. This actor provides structured access to over $2 trillion in annual federal spending across contracts, grants, loans, direct payments, and other financial assistance programs.
Pricing
from $2.00 / 1,000 record fetcheds
Rating
0.0
(0)
Developer
Ryan Clinton
Maintained by CommunityActor stats
0
Bookmarked
8
Total users
2
Monthly active users
8 days ago
Last modified
Categories
Share

Federal market intelligence from USAspending.gov. Search contracts, grants, loans, direct payments and IDVs across $2 trillion in annual federal spending — then go further: analyze market concentration, identify expiring contracts and recompete opportunities, profile contractors, monitor competitors, track contractor momentum, and discover which federal markets are growing fastest. Every run returns clean, normalized award records plus a run-level intelligence summary, with direct links back to USAspending.gov.
Built for capture managers, business development teams, federal contractors, government consultants, market-intelligence analysts, journalists, and researchers who need more than award rows.
What makes this premium
- Market structure, not just rows. Each run emits a summary record with a Herfindahl-Hirschman Index over recipient dollar share, a concentration band, top recipients with market-share %, recipient diversity (repeat vs one-off recipients within the result set), and per-state / per-agency breakdowns.
- Search depth. Filter by NAICS industry codes, PSC product/service codes, recipient and place-of-performance states, an amount band (min and max), multiple keywords, and the date field to filter on. Don't know the codes? Enter plain-language terms and the actor resolves them.
- Multiple award categories in one run. Search across award categories together; results are merged, re-ranked, and broken down by type.
- Expiring-contract intelligence. Every contract carries a recompete signal and days-until-end; the summary rolls up the dollar value expiring inside your window with a one-glance opportunity-density level — the BD pipeline a raw search can't give.
- Scheduled monitoring. Name a watchlist and the actor tracks what's new and what changed since the last run (
changeTypeper award) plus which recipients are gaining or losing share — a Federal Spending Monitor, not just a search. - Capture pipeline, not award rows. Every contract gets a
captureWorthinessverdict (high/medium/low) with the exactcaptureSignalsbehind it (large value, ending soon, competitive market) — and acaptureScoreyou can sort on to rank a BD pipeline instead of eyeballing a flat list. - Operating modes. One actor, five jobs:
search(award rows + analytics),market(a market-scan digest — should I care about this market?),contractor(a recipient profile with incumbent vulnerability),monitor(track what changed), anddiscover(rank the fastest-growing federal markets). - Anomaly flags + priority score. Each award is flagged (above-95th-percentile amount, ending soon, single-recipient dominance, foreign recipient, and more) and scored 0-100 so the most unusual awards sort to the top.
- Reproducible + agent-ready. A query fingerprint makes each run citable; the summary and resolved query are mirrored to the key-value store for BI tools and agents. No API key, deterministic, no LLM.

| Capability | USAspending.gov website | Raw API | This actor |
|---|---|---|---|
| Keyword / agency / recipient search | Yes | Yes | Yes |
| Export structured data | Limited | Requires coding | Yes |
| NAICS / PSC / location filters | Partial | Yes | Yes |
| Search by plain-language industry terms | No | No | Yes |
| Multiple award categories per query | No | No | Yes |
| Market concentration (HHI) | No | No | Yes |
| Recompete / expiring-contract pipeline | No | No | Yes |
| Anomaly flags + priority score | No | No | Yes |
| Capture-worthiness pipeline | No | No | Yes |
| Market-health score | No | No | Yes |
| Incumbent vulnerability | Partial (paid) | No | Yes |
| Recipient share momentum | No | No | Yes |
| Scheduled change monitoring | No | No | Yes |

What a federal market looks like in 30 seconds
- Search
cybersecurityat the Department of Defense. - Read the summary record: a $2.8B market, concentration
concentrated(HHI 1,840), 7 contracts worth $412M expiring inside 180 days, Booz Allen Hamilton gaining share. - Add a
watchlistNameand schedule it weekly. - Each run tells you what changed: new awards appearing, contract values increasing, market share shifting, and whether the market is growing or consolidating over time.
That is the workflow this actor replaces: a capture manager's morning spent in USAspending exports and spreadsheets, returned as one structured run.

Common federal contracting jobs
Buyers search by the job they need done, not by feature. Map your job to a mode:
| I want to... | Use |
|---|---|
| Find federal contracts expiring soon (recompete pipeline) | Search + includeExpiringOnly, or read recompetePipeline |
| Build a prioritized BD pipeline | Search + sort by captureWorthiness / captureScore |
| Evaluate whether a market is worth entering | mode: "market" |
| Analyze a contractor and spot a vulnerable incumbent | mode: "contractor" |
| Find which federal markets are growing fastest | mode: "discover" |
| Monitor competitors and get alerted when things change | mode: "monitor" + watchlistName |
| Track whether a market is consolidating over time | mode: "monitor" → marketHistory |
Ready-to-run examples
One-click presets for the most common federal-contracting jobs — each opens with the input filled in:
- Find Federal Contracts Expiring Soon — the recompete pipeline: contracts entering the re-bid window with days remaining and the incumbent.
- Federal Contract Capture Opportunities — the contracts worth pursuing, each scored for capture-worthiness.
- Identify Incumbent Risk Opportunities — vulnerable incumbents to displace, ranked by recompete exposure and at-risk value.
- Federal Contract Market Analysis — concentration (HHI), top contractors, incumbent risk and the spending trend for a market.
- Analyze a Federal Contractor — a contractor's market share, share trend, active awards, expiring value and incumbent risk.
- Fastest-Growing Federal Markets — federal markets ranked by fiscal-year spending growth.
See all examples on the examples page.
Questions this actor answers
- Who is winning Department of Defense cybersecurity contracts?
- Which federal contracts are expiring in the next 180 days?
- Which contractors are gaining or losing federal market share?
- Which federal markets are growing fastest right now?
- Which agencies are increasing their spending, and how competitively do they buy?
- How concentrated is a federal market — is one contractor dominant?
- Which competitors just won new awards or had a contract value increase?
- Which incumbents are most vulnerable to losing their work at recompete?
Popular workflows
- Find expiring DoD contracts
- Monitor competitors winning federal awards
- Track federal AI spending
- Analyze a contractor's federal market share
- Identify federal cybersecurity opportunities
- Discover growing government markets
- Monitor recompete pipelines
- Build a federal BD capture pipeline
How the metrics are derived. All market-intelligence metrics come from the awards returned by your query and your watchlist history. They are deterministic analytical signals computed from public federal data, not predictions or forecasts.
Operating modes
One actor, five jobs — set mode to reshape the output over the same federal data.
| Mode | Answers | Adds |
|---|---|---|
search (default) | "Find me the awards." | Award rows + analytics summary. |
market | "Should I care about this market?" | A market-scan digest: market-health score, trend, concentration, recompete value, gaining/losing share, top incumbents with vulnerability. |
contractor | "How strong is this contractor, and is the incumbent vulnerable?" | A contractor-profile digest for the recipient you search: market share, share trend, active awards, expiring value, vulnerability, top agencies. |
monitor | "What changed in my market since last run?" | Cross-run change tracking (set a watchlistName): per-award changeType, recipient share momentum, marketMovements, and dated historical market snapshots. |
discover | "Where should I be looking?" | Ignores the keyword and ranks a curated set of federal markets by spending growth (topGrowingMarkets, topEmergingMarkets, leaderboard). |
{ "mode": "market", "keyword": "cybersecurity", "agency": "Department of Defense" }
{ "mode": "discover" }
{ "mode": "contractor", "recipient": "Booz Allen Hamilton", "maxResults": 200 }
{ "mode": "monitor", "keyword": "zero trust", "watchlistName": "ztc-pipeline", "emitOnly": "new_or_changed" }

Why use USAspending Federal Spending Search?
The USAspending.gov website is the authoritative source for federal spending data, maintained by the US Department of the Treasury. But manually searching the site is slow, repetitive, and limited -- there is no built-in way to export structured data at scale, schedule recurring searches, or integrate results into automated workflows.
The underlying API is powerful but requires building POST request bodies with complex filter objects, handling page-based pagination, managing different field sets for different award types (loans use entirely different fields than contracts), and transforming nested response structures into usable formats. That is a significant engineering investment before you get a single row of data.
This actor handles all of that complexity. It builds the correct API request for your chosen award type, paginates through results automatically, normalizes loan and non-loan fields into a consistent output schema, constructs recipient location strings, and generates direct USAspending.gov URLs for every award. You get clean, flat JSON records ready for analysis, export, or integration -- without writing a single line of code.
Running on Apify's cloud infrastructure, you can schedule daily or weekly monitoring runs, push results to Google Sheets or Slack, trigger webhooks for downstream processing, and access data programmatically through the Apify API in JSON, CSV, or Excel format.
Key features
- Six award type categories -- search contracts, grants, loans, direct payments, IDVs (Indefinite Delivery Vehicles), and other financial assistance independently, each with the correct API codes and field mappings.
- Keyword search -- filter awards by description keywords such as "cybersecurity," "renewable energy," "artificial intelligence," or any topic area.
- Agency filtering -- narrow results to a specific top-tier awarding agency like the Department of Defense, NASA, or the Department of Energy.
- Recipient search -- find all awards going to a specific contractor or organization by name (e.g., "Lockheed Martin," "Deloitte," "RAND Corporation").
- Date range filtering -- restrict results to a specific fiscal period using YYYY-MM-DD format, with data available back to fiscal year 2008 (2007-10-01).
- Minimum amount threshold -- filter out small awards by setting a dollar floor (e.g., only contracts above $1,000,000).
- Automatic pagination -- the actor handles multi-page API responses transparently, fetching up to 1,000 results across multiple requests with built-in rate limiting.
- Consistent output schema -- loans use different fields (Loan Value, Issued Date) than contracts and grants (Award Amount, Start/End Date), but the actor normalizes everything into a single consistent format.
- Direct USAspending links -- every output record includes a URL linking directly to the full award page on USAspending.gov for verification and further research.
- No API key required -- the USAspending API is free, open, and requires no registration or authentication tokens.
- Market-concentration analytics -- every run emits a summary record answering the question raw rows cannot: how concentrated is this spending (Herfindahl-Hirschman Index + a concentrated/competitive/fragmented band), who the top recipients are by dollar share, which agencies dominate, and where the money lands by state.
- Award-size tiering and active flags -- each award is classified
mega/large/mid/smallby dollar value, tagged with its period-of-performance length in days, and flagged active when its end date is in the future -- so you can sort, filter, and route without re-deriving anything. - Fiscal-year spending trend -- opt in to see whether spend for your filters is rising, falling, or stable across fiscal years, computed from the official aggregate endpoint.
How to use USAspending Federal Spending Search
- Navigate to the USAspending Federal Spending Search actor on the Apify Store.
- Click Try for free to open the actor in Apify Console.
- Enter an optional keyword to search across award descriptions (e.g., "cybersecurity," "renewable energy").
- Select an award type -- contracts (default), grants, loans, direct payments, IDVs, or other financial assistance.
- Optionally add filters for agency, recipient name, date range, or minimum dollar amount.
- Set max results (default 25, maximum 1,000) and click Start.
- Download results as JSON, CSV, or Excel from the Dataset tab, or connect via API.
Using the API
You can start the actor programmatically via the Apify API. See the API & integration section below for Python, JavaScript, and cURL examples.
Input parameters
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
mode | String | No | search | search / market / contractor / monitor / discover. See "Operating modes" above. |
keyword | String | No | -- | Search term matched against award descriptions (e.g., "artificial intelligence", "infrastructure", "wildfire suppression"). |
keywords | String[] | No | -- | Additional keywords, matched as ANY (OR) by the API, combined with keyword. |
awardType | String | No | contracts | Category of federal award. Options: contracts, grants, loans, direct_payments, other, idvs. |
awardTypes | String[] | No | -- | Search several award types in one run (e.g. ["contracts","grants"]). Each is fetched as its own API group, then merged and ranked. Takes precedence over awardType. |
agency | String | No | -- | Top-tier awarding agency name (e.g., "Department of Defense"). Must be the exact official name unless resolveAgency is on. |
resolveAgency | Boolean | No | false | Resolve a loose agency name ("DoD", "NASA") to its canonical top-tier name via the autocomplete endpoint before filtering. Costs one extra API call. |
recipient | String | No | -- | Recipient or contractor name to search for (e.g., "Lockheed Martin", "Booz Allen Hamilton"). |
naicsCodes | String[] | No | -- | Filter by NAICS industry codes (e.g. ["541512"] Computer Systems Design Services). |
naicsSearch | String[] | No | -- | Plain-language industry terms (e.g. ["cybersecurity","cloud"]) resolved to NAICS codes via autocomplete. Merged with naicsCodes. |
pscCodes | String[] | No | -- | Filter by Product/Service Codes (e.g. ["D399"]). |
pscSearch | String[] | No | -- | Plain-language product/service terms resolved to PSC codes via autocomplete. Merged with pscCodes. |
recipientStates | String[] | No | -- | Filter by recipient location, 2-letter US state codes (e.g. ["VA","MD"]). |
placeOfPerformanceStates | String[] | No | -- | Filter by place of performance, 2-letter US state codes. |
dateRange | String | No | -- | Date range in the format YYYY-MM-DD to YYYY-MM-DD (e.g., "2024-01-01 to 2024-12-31"). Earliest supported date is 2007-10-01. |
dateType | String | No | action_date | Which date dateRange filters on: action_date, date_signed, last_modified_date, or new_awards_only. |
minAmount | Number | No | -- | Minimum award amount in US dollars (e.g., 1000000 for $1M+). |
maxAmount | Number | No | -- | Maximum award amount in US dollars. Combine with minAmount for an amount band. |
sortBy | String | No | amount | Order results by award amount or recipient name. |
sortOrder | String | No | desc | desc (default) or asc. |
recompeteWindowDays | Integer | No | 180 | Contracts ending within this many days are flagged as recompete opportunities. |
includeExpiringOnly | Boolean | No | false | Emit only awards inside the recompete window. Suppressed awards are still counted in the summary. |
onlyFlagged | Boolean | No | false | Emit only awards carrying at least one anomaly flag. Suppressed awards are still counted in the summary. |
maxResults | Integer | No | 25 | Maximum number of awards to return. Minimum 1, maximum 1,000. |
outputProfile | String | No | standard | Detail level per award record: minimal (decision headline), standard (full record minus long description), or full (every field). The run-level analytics summary is always included. |
includeTrend | Boolean | No | false | Also compute the fiscal-year spending trend (rising / falling / stable) for these filters, added to the summary record. Costs one extra API call. |
watchlistName | String | No | -- | Name a watchlist to turn on cross-run monitoring. The actor remembers each run's awards + recipient shares and tags the next run's awards with a changeType. First run is a baseline. |
emitOnly | String | No | all | When monitoring: emit only new, changed, or new_or_changed awards (default all). Suppressed awards are still tracked and counted. |
Input example
Find large DoD cybersecurity contracts:
{"keyword": "cybersecurity","awardType": "contracts","agency": "Department of Defense","minAmount": 1000000,"maxResults": 50}
Search NIH grants for a specific organization:
{"keyword": "cancer research","awardType": "grants","agency": "Department of Health and Human Services","recipient": "Johns Hopkins","maxResults": 100}
Federal loans issued in 2024:
{"awardType": "loans","dateRange": "2024-01-01 to 2024-12-31","minAmount": 5000000,"maxResults": 200}
Input tips
- Use specific keywords -- broad terms like "technology" or "services" return millions of results. More specific phrases like "quantum computing" or "wildfire suppression" produce focused results.
- Agency names must be exact -- use the full official name such as "Department of Defense" rather than abbreviations like "DoD." Check USAspending.gov for correct names.
- Award types cannot be mixed -- the USAspending API requires searching one award type per request. Run the actor separately for contracts and grants if you need both.
- Date ranges start at FY2008 -- the earliest available data begins on 2007-10-01 (fiscal year 2008).
- Combine filters for precision -- using keyword + agency + date range together produces the most targeted results.
Output
The dataset contains two record types, distinguished by the recordType field: one award record per result, plus a single summary analytics record per run.
Award records (recordType: "award")
{"recordType": "award","schemaVersion": "2.0.0","awardId": "W911NF23C0045","title": "CYBERSECURITY OPERATIONS AND DEFENSE SUPPORT SERVICES","awardType": "Contract","awardAmount": 48750000,"awardSizeTier": "large","awardingAgency": "Department of Defense","fundingAgency": "Department of the Army","recipientName": "BOOZ ALLEN HAMILTON INC.","recipientLocation": "McLean, VA","startDate": "2023-03-15","endDate": "2028-03-14","durationDays": 1826,"daysUntilEnd": 142,"isActive": true,"recompeteSignal": "recompete-window","recompetePriority": "medium","flags": ["amount_above_p95"],"priorityScore": 25,"description": "CYBERSECURITY OPERATIONS AND DEFENSE SUPPORT SERVICES FOR ARMY NETWORK ENTERPRISE TECHNOLOGY COMMAND","usaspendingUrl": "https://www.usaspending.gov/award/CONT_AWD_W911NF23C0045_9700_-NONE-_-NONE-","summary": "Contract: BOOZ ALLEN HAMILTON INC. (McLean, VA) — $48,750,000 from Department of Defense.","extractedAt": "2026-02-17T14:30:00.000Z"}
| Field | Type | Description |
|---|---|---|
recordType | String | award for award rows. |
schemaVersion | String | Output-contract version (additive within a major version). |
awardId | String | Official award identification number assigned by the contracting agency. |
title | String | Short description of the award (truncated to 500 characters). |
awardType | String | Human-readable award type label: Contract, Grant, Loan, Direct Payment, IDV, or Other Financial Assistance. |
awardAmount | Number or null | Total award value in US dollars. For loans, this is the loan face value. Null if no amount is recorded. |
awardSizeTier | String or null | Size band: mega (≥$100M), large (≥$10M), mid (≥$1M), small (<$1M). Null when no amount is recorded. |
awardingAgency | String | Name of the federal agency that made the award. |
fundingAgency | String or null | Name of the agency providing the funding, if different from the awarding agency. |
recipientName | String | Name of the company, organization, or individual receiving the award. |
recipientLocation | String or null | City and state of the recipient (e.g., "McLean, VA"). Includes country name for non-US recipients. |
startDate | String or null | Award start date (or issue date for loans) in YYYY-MM-DD format. |
endDate | String or null | Award end date in YYYY-MM-DD format. Not available for loans. |
durationDays | Number or null | Period-of-performance length in days. Null for loans and any award missing a date. |
daysUntilEnd | Number or null | Days until the end date (negative if ended). Null for loans / no end date. |
isActive | Boolean or null | True when the end date is in the future. Null when there is no end date (loans). |
recompeteSignal | String or null | expiring-soon (≤90d) / recompete-window (≤window) / active / ended. Null for loans. A signal derived from the end date, not a prediction the agency will re-compete. |
recompetePriority | String or null | high / medium / low for the recompete signal. Null for loans / no end date. |
flags | String[] | Deterministic anomaly flags (e.g. amount_above_p95, ending_soon, single_recipient_dominance, foreign_recipient). Empty when none fire. |
priorityScore | Number | 0-100 attention score from the weighted flags (see weights below). Sort descending to surface the most unusual awards. |
captureScore | Number | 0-100 BD pursue-worthiness (size + ending-soon + market competitiveness). A different question from priorityScore: "should I pursue this?" vs "is this unusual?". |
captureWorthiness | String or null | high / medium / low from the capture score. Null for awards with no recompete dimension (loans / no end date). |
captureSignals | String[] | The deterministic reasons behind the capture verdict: large_value, ending_soon, recompete_window, competitive_market. Read these instead of asking "why this score?". |
changeType | String or null | Monitoring only: new_award / amount_increased / amount_decreased / contract_extended / unchanged vs the prior watchlist run. Null without a watchlist. |
previousAmount / amountChange | Number or null | Monitoring only: the award's amount on the prior run and the delta. Null on first sight. |
firstSeenAt | String or null | Monitoring only: when the award was first observed under the watchlist. |
description | String | Full description text of the award (present in standard and full profiles). |
Priority score weights. Deterministic, summed from the flags that fire (capped at 100): amount_above_p95 +25, ending_soon +25, single_recipient_dominance +20, recompete_window +15, short_duration_high_value +15, foreign_recipient +10, missing_amount +5.
| usaspendingUrl | String | Direct link to the award page on USAspending.gov for full details and documentation. |
| summary | String | One plain-English line describing the award, quotable by an LLM or agent without joining fields. |
| extractedAt | String | ISO 8601 timestamp of when the data was extracted by this actor. |
(Fields shown are the full profile. standard omits description; minimal keeps only the decision headline: recordType, awardId, awardType, awardSizeTier, recipientName, awardAmount, awardingAgency, isActive, usaspendingUrl, summary.)

Summary analytics record (recordType: "summary")
One per run, also mirrored to the key-value store under the SUMMARY key. It turns the result set into market intelligence:
{"recordType": "summary","schemaVersion": "2.0.0","awardTypeLabel": "Contract","awardsAnalyzed": 50,"totalAwardAmount": 2840000000,"averageAwardAmount": 56800000,"medianAwardAmount": 22500000,"p90AwardAmount": 180000000,"largestAward": { "recipientName": "LOCKHEED MARTIN CORPORATION", "amount": 410000000, "awardId": "..." },"awardSizeDistribution": { "mega": 8, "large": 31, "mid": 9, "small": 2, "unspecified": 0 },"byAwardType": [ { "awardType": "Contract", "awardCount": 50, "totalAmount": 2840000000 } ],"recipientConcentration": { "hhi": 1840, "level": "concentrated", "topRecipientSharePct": 24.1, "top5RecipientSharePct": 61.4, "distinctRecipients": 37 },"recipientDiversity": { "distinctRecipients": 37, "repeatRecipients": 6, "newRecipients": 31, "repeatRecipientSharePct": 38 },"topRecipients": [ { "recipientName": "LOCKHEED MARTIN CORPORATION", "awardCount": 4, "totalAmount": 684000000, "marketSharePct": 24.1 } ],"recipientMomentum": [ { "recipientName": "BOOZ ALLEN HAMILTON INC.", "shareCurrent": 18.4, "sharePrior": 12.1, "changePct": 52.1, "trend": "gaining_share" } ],"topAwardingAgencies": [ { "agency": "Department of Defense", "awardCount": 42, "totalAmount": 2510000000, "avgAwardSize": 59761904, "vendorDiversity": 31, "competitionLevel": "medium" } ],"topRecipientStates": [ { "state": "VA", "awardCount": 14, "totalAmount": 980000000, "expiringValue": 240000000 } ],"recompetePipeline": { "windowDays": 180, "expiringCount": 7, "expiringTotalValue": 412000000, "highPriorityCount": 3, "avgDaysRemaining": 124, "level": "high" },"marketMovements": [ { "movementType": "incumbent_loss", "detail": "ACME CORP lost share 22.0% → 14.0%", "entity": "ACME CORP", "magnitude": -36.4 } ],"monitoring": { "enabled": true, "watchlistName": "dod-cyber", "isBaselineRun": false, "runIndex": 4, "newAwards": 3, "changedAwards": 2 },"queryFingerprint": "a1b2c3d4e5f6a7b8","resolutionWarnings": [],"query": { "keyword": "cybersecurity", "keywords": null, "awardTypes": ["contracts"], "agency": "Department of Defense", "recipient": null, "dateRange": null, "minAmount": 1000000, "maxAmount": null, "naicsCodes": null, "pscCodes": null },"spendingTrend": { "group": "fiscal_year", "periods": [], "direction": "rising", "recentAmount": 0, "priorAmount": 0, "changePct": 18.4 }}
| Field | Type | Description |
|---|---|---|
awardsAnalyzed | Number | Count of award records the analytics were computed over (all matched rows, before any output filter). |
totalAwardAmount / averageAwardAmount / medianAwardAmount / p90AwardAmount | Number | Aggregate, mean, median, and 90th-percentile award value. |
largestAward | Object or null | The single biggest award (recipient, amount, award ID). |
awardSizeDistribution | Object | Count of awards in each size tier (mega / large / mid / small / unspecified). |
byAwardType | Array | Per-award-type breakdown (count + dollars). One entry for single-type runs; multiple for multi-type. |
recipientConcentration | Object | hhi (Herfindahl-Hirschman Index 0–10000 over recipient dollar share), level (highly-concentrated / concentrated / competitive / fragmented), topRecipientSharePct, top5RecipientSharePct, distinctRecipients. |
recipientDiversity | Object | Repeat vs one-off recipients within the result set: repeatRecipients, newRecipients, repeatRecipientSharePct. A within-query diversity signal, not lifetime federal-incumbent history. |
topRecipients | Array | Top 10 recipients by dollars, each with award count, total, and market-share %. |
recipientMomentum | Array | Monitoring only: top recipients with shareCurrent, sharePrior, changePct, and trend (gaining_share / losing_share / stable / new). Empty without a watchlist. |
topAwardingAgencies | Array | Top 10 awarding agencies by dollars, each with avgAwardSize, vendorDiversity (distinct recipients), and a competitionLevel (high / medium / low) buying-behaviour read. |
topRecipientStates | Array | Top 10 recipient states by re-bid value, each with expiringValue (the dollar value expiring in that state) and totalAmount. |
recompetePipeline | Object | Contracts expiring inside recompeteWindowDays: expiringCount, expiringTotalValue, highPriorityCount, avgDaysRemaining, and a one-glance opportunity-density level (high / medium / low). |
marketMovements | Array | Monitoring only: typed "what changed" events — share_shift, incumbent_loss, new_funding — each with a plain-English detail. Empty on a baseline run. |
marketHistory | Object or null | Monitoring only: the dated snapshot series and its diffs — spendChangePctVsPrior, spendChangePctVsEarliest, spendTrend, concentrationTrend (consolidating / fragmenting / stable), plus the recent snapshots[]. The longitudinal "is this market growing or consolidating over time" read. insufficient-data until two runs exist. |
monitoring | Object | enabled, watchlistName, isBaselineRun, runIndex, newAwards, changedAwards. Reflects the cross-run watchlist state. |
queryFingerprint | String | Stable 16-char hash of the resolved query — cite it to reproduce the exact search. |
resolutionWarnings | Array | Any agency-name resolutions applied (when resolveAgency is on). |
query | Object | Echo of the search filters that produced this run. |
spendingTrend | Object or null | Present only when includeTrend is set: fiscal-year trend direction plus recent/prior amounts and changePct. |
Market-scan digest (recordType: "market-scan", market mode)
In mode: "market", one extra record answers "should I care about this market?":
{"recordType": "market-scan","market": "cybersecurity","marketHealthScore": 78,"classification": "good","marketTrend": "expanding","concentrationLevel": "competitive","recompeteValue": 412000000,"newMoney": 90000000,"gainingShare": [ { "recipientName": "BOOZ ALLEN HAMILTON INC.", "shareCurrent": 18.4, "trend": "gaining_share" } ],"losingShare": [],"topIncumbents": [ { "recipientName": "ACME CORP", "marketSharePct": 14.0, "shareTrend": "losing_share", "expiringValue": 120000000, "vulnerabilityScore": 71, "incumbentRisk": "high" } ],"scoreComponents": [ { "name": "spendingTrend", "available": true, "contribution": 25 }, { "name": "newEntrants", "available": false, "contribution": 12 } ]}
Market Health Score = Competitiveness (25%) + Recompete Density (25%) + Spending Growth (25%) + New Entrants (25%). Competitiveness rewards a more fragmented market; recompete density rewards more re-bid value; spending growth rewards rising fiscal-year spend; new entrants rewards fresh money since last run. Components that need an opt-in (includeTrend for the trend, a watchlistName for new entrants) are marked available: false in scoreComponents and contribute a neutral baseline — the score is honest about what it could and couldn't measure rather than scoring a missing input as zero.
Contractor-profile digest (recordType: "contractor-profile", contractor mode)

In mode: "contractor" with a recipient set, one extra record profiles that contractor over the returned awards:
{"recordType": "contractor-profile","recipientName": "Booz Allen Hamilton","marketSharePct": 12.4,"shareTrend": "gaining_share","activeAwards": 38,"totalAwardValue": 684000000,"expiringValue": 120000000,"vulnerabilityScore": 24,"incumbentRisk": "low","topAgencies": [ { "agency": "Department of Defense", "awardCount": 21, "totalAmount": 410000000 } ]}
This profiles the awards the recipient query returned, not the contractor's full federal history. Set a watchlistName for share-trend accuracy across runs.
Market-discovery digest (recordType: "market-discovery", discover mode)

In mode: "discover", the actor ignores the keyword and ranks a curated set of high-value federal contracting markets by fiscal-year spending growth. The scanned set is: artificial intelligence, cybersecurity, cloud computing, health information technology, logistics, engineering services, professional services, research and development, telecommunications, and facilities maintenance. Each is measured with one spending-over-time query, then ranked into fastest-growing and emerging (small-but-rising) lists:
{"recordType": "market-discovery","marketsScanned": 10,"topGrowingMarkets": [ { "market": "artificial intelligence", "recentSpend": 1840000000, "growthPct": 41.2, "trend": "rising" } ],"topEmergingMarkets": [ { "market": "facilities maintenance", "recentSpend": 210000000, "growthPct": 28.0, "trend": "rising" } ],"leaderboard": [ "...all scanned markets ranked by growth..." ]}
This ranks a curated candidate set, not every federal market. Run mode: "market" on a specific market for its full recompete + incumbent detail.
Monitoring federal spending changes

Set a watchlistName and schedule the actor to turn a one-off search into a continuous monitor. The actor remembers the awards and recipient shares it saw under that name and reports what changed on each subsequent run.
- First run is a baseline: every award is
new_award,recipientMomentumtrends arenew, andmonitoring.isBaselineRunistrue. Change detection activates from the second run. - From the second run on, each award carries a
changeType(new_award/amount_increased/amount_decreased/contract_extended/unchanged) withpreviousAmountandamountChange, and the summary'srecipientMomentumshows which contractors are gaining or losing share. emitOnlynarrows the dataset tonew,changed, ornew_or_changedawards for low-noise alerting — suppressed awards are still tracked and counted in the summary.- Historical snapshots accumulate over time. Each run banks a dated market aggregate (total spend, concentration, distinct recipients) under the watchlist. The
marketHistoryblock then answers "is this market growing or consolidating over time" with real evidence —spendChangePctVsEarliestand aconcentrationTrendofconsolidating/fragmenting. This is the moat: a competitor can clone the analytics, but not the months of history your watchlist has banked. - State is stored per watchlist name, so two schedules with different names never interfere. The history is bounded; the longer you run a watchlist, the richer its momentum, change record, and snapshot series.
Pair a scheduled run with the changes dataset view and an Apify webhook / Slack integration to get a "what's new in my federal market" digest with no post-processing.
Use cases
- Government contracting research -- identify which companies win the largest federal contracts in your industry and track spending trends by agency, keyword, or time period.
- Grant opportunity analysis -- discover which organizations receive federal grants in specific research areas to benchmark your own grant applications and identify potential collaborators.
- Competitive intelligence -- monitor what contracts your competitors are winning from federal agencies and at what dollar amounts, broken down by award type and time period.
- Journalism and transparency -- investigate how taxpayer money is allocated across agencies, programs, and geographic regions with structured, exportable data.
- Policy analysis -- track federal spending patterns by agency, award type, or time period to support policy research, legislative advocacy, and budget analysis.
- Business development -- identify federal agencies that are actively spending in your product or service area to target BD efforts and build a qualified pipeline.
- Due diligence -- verify a company's claimed government contracts and check the actual dollar values of their federal awards before making investment or partnership decisions.
- Academic research -- build datasets of federal spending for economics, political science, or public administration research projects with clean, structured data.
- Loan portfolio analysis -- search federal loan programs to understand which organizations receive government-backed financing and at what face values.
- Spending alerts -- schedule recurring runs to monitor new awards in a specific area and trigger notifications when large contracts or grants are issued.
API & integration
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_API_TOKEN")run = client.actor("ryanclinton/usaspending-search").call(run_input={"keyword": "cybersecurity","awardType": "contracts","agency": "Department of Defense","minAmount": 1000000,"maxResults": 100,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"${item['awardAmount']:,.0f} -- {item['recipientName']} -- {item['title'][:80]}")
JavaScript
import { ApifyClient } from "apify-client";const client = new ApifyClient({ token: "YOUR_APIFY_API_TOKEN" });const run = await client.actor("ryanclinton/usaspending-search").call({keyword: "cybersecurity",awardType: "contracts",agency: "Department of Defense",minAmount: 1000000,maxResults: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();for (const item of items) {console.log(`$${item.awardAmount?.toLocaleString()} -- ${item.recipientName} -- ${item.title.slice(0, 80)}`);}
cURL
# Start the actorcurl -X POST "https://api.apify.com/v2/acts/ryanclinton~usaspending-search/runs?token=YOUR_APIFY_API_TOKEN" \-H "Content-Type: application/json" \-d '{"keyword": "cybersecurity","awardType": "contracts","agency": "Department of Defense","minAmount": 1000000,"maxResults": 100}'# Retrieve results (use the defaultDatasetId from the run response)curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_APIFY_API_TOKEN&format=json"
Integrations
The output dataset can be consumed through any of Apify's built-in integrations:
- Google Sheets -- automatically export federal spending data to a spreadsheet for team review and analysis.
- Slack / Email -- receive notifications when new large awards are detected in scheduled runs.
- Webhooks -- push results to your CRM, BI platform, or custom data pipeline.
- Zapier / Make -- connect to thousands of apps for automated workflow triggers.
- Amazon S3 -- archive results to cloud storage for long-term trend analysis.
- API access -- retrieve results programmatically in JSON, CSV, XML, or Excel format via the Apify dataset API.
Use in Dify
Drop this actor into Dify workflows via the Apify plugin's Run Actor node. It returns classified, concentration-scored federal spending as structured JSON: a recordType discriminator (award / summary / error), an awardSizeTier per award (mega / large / mid / small), a market recipientConcentration.level (highly-concentrated / concentrated / competitive / fragmented), and an opt-in spendingTrend.direction (rising / falling / stable) — the enums your downstream node branches on. A raw API wrapper pointed at USAspending returns paginated award rows; this returns a market-structure read your workflow can route on.
- Actor ID:
ryanclinton/usaspending-search - Sample input (competitive intelligence on a federal market):
{"keyword": "cybersecurity","awardType": "contracts","agency": "Department of Defense","minAmount": 1000000,"maxResults": 200,"includeTrend": true}
- Branching example. Filter the dataset to the
summaryrecord (recordType == "summary"), then route a Dify if/else node on the analytics it carries:recipientConcentration.level == "highly-concentrated"→ escalate to a "concentrated market — review incumbent dominance" branch.spendingTrend.direction == "rising"→ route to an "expanding market" branch;"falling"→ a "contracting market" branch.- On the per-award rows, branch on
awardSizeTier == "mega"to fan out only the largest awards, onisActive == trueto act only on live periods of performance, or onrecompeteSignal == "expiring-soon"to route imminent re-bid opportunities to a BD queue. - Sort or threshold on
priorityScore(0-100) to surface only the most unusual awards, and read each row'sflags[]to label why. - Branch on
captureWorthiness == "high"to route only the awards a BD team should pursue, or filter the dataset torecordType == "market-scan"and branch onclassification/marketTrendto decide whether a market is worth entering. - In monitoring mode, branch on
changeType == "new_award"to alert only on new awards, orchangeType == "amount_increased"to route contract growth — the stable enum a scheduled Dify/Make/n8n flow fires on without parsing prose.
- The
topRecipients[],topAwardingAgencies[]andrecipientMomentum[]arrays are usable verbatim — no LLM rewriting — to populate a Slack digest or a downstream enrichment step. - Opt-in modes Dify workflows leverage:
watchlistName(scheduled change monitoring),emitOnly(new/changed only),includeTrend(fiscal-year trend),includeExpiringOnly(recompete pipeline only).
How it works
-
Input parsing -- the actor reads your search parameters and validates the award type against six supported categories (contracts, grants, loans, direct_payments, other, idvs).
-
Filter construction -- a POST request body is built with the correct award type codes (e.g., contracts = A/B/C/D, grants = 02/03/04/05), along with keyword, agency, recipient, date range, and minimum amount filters.
-
Field selection -- the actor selects the appropriate field set based on award type. Loans use different fields (Loan Value, Subsidy Cost, Issued Date) than standard awards (Award Amount, Start Date, End Date).
-
Paginated fetching -- the actor sends POST requests to the USAspending API (
api.usaspending.gov/api/v2/search/spending_by_award/), fetching up to 100 results per page. It continues paginating until the requested number of results is reached or no more results are available, with a 300ms delay between requests. -
Transformation -- each raw API result is normalized into a consistent output schema. Loan fields are mapped to the same output fields as standard awards, recipient location is assembled from city/state/country components, and a direct USAspending.gov URL is constructed from the internal award ID.
-
Output -- clean JSON records are pushed to the Apify dataset one at a time. A summary log shows the total count, aggregate dollar amount, top awarding agencies, and top recipients.
Input (keyword, awardType, agency, recipient, dateRange, minAmount)|v+---------------------------------------------+| Filter Builder || - Award type codes (A/B/C/D for contracts) || - Keywords, agency, recipient filters || - Date range, minimum amount |+---------------------+-----------------------+|v+---------------------------------------------+| USAspending API (POST) || api.usaspending.gov/api/v2/search/ || spending_by_award/ || - 100 per page, sorted by amount desc || - 300ms delay between pages || - Up to 10 pages (1,000 results max) |+---------------------+-----------------------+|v+---------------------------------------------+| Transform & Normalize || - Map loan fields to standard schema || - Build recipient location string || - Construct USAspending.gov award URL || - Truncate title to 500 chars |+---------------------+-----------------------+|v+---------------------------------------------+| Output to Apify Dataset || - JSON records with 13 fields each || - Summary: total amount, top agencies, || top recipients |+---------------------------------------------+
Performance & cost
USAspending Federal Spending Search is extremely cost-efficient. It runs with only 256 MB of memory and calls a free government API -- no web scraping or browser rendering involved.
| Scenario | Results | Pages | Estimated time | Estimated cost |
|---|---|---|---|---|
| Quick lookup | 25 | 1 | ~5 sec | ~$0.001 |
| Standard search | 100 | 1 | ~8 sec | ~$0.002 |
| Deep scan | 500 | 5 | ~20 sec | ~$0.005 |
| Maximum extraction | 1,000 | 10 | ~40 sec | ~$0.01 |
| Daily monitoring (1 month) | 100/day | 1/day | ~8 sec/run | ~$0.06/month |
Apify Free Tier: New Apify accounts receive $5 of free platform credits each month. This is enough to run the actor hundreds of times per month at no cost.
USAspending API: The API is completely free with no API key, no registration, and no rate limits for reasonable usage.
Limitations
- Award-type groups are fetched separately -- the USAspending API requires one award-type group per request. To search several types in one run, pass
awardTypes(e.g.["contracts","grants","loans"]); the actor fetches each group, then merges and re-ranks the results and breaks them down by type. - 1,000 result maximum -- the actor caps at 1,000 results per run (100 per page, 10 pages). For larger datasets, narrow your search with date ranges, keywords, or agency filters and run multiple times.
- Agency names must be exact -- the agency filter requires the full official top-tier agency name (e.g., "Department of Defense," not "DoD" or "Pentagon"). Misspelled or abbreviated names will return no results.
- Federal spending only -- USAspending.gov tracks only federal government spending. State, local, and tribal government data is not available through this API.
- Data update lag -- USAspending.gov data is updated monthly by the Treasury Department. Recent awards may take 30-90 days to appear after they are obligated.
- Loan end dates unavailable -- the USAspending API does not return end dates for loan awards. The
endDatefield will always be null for loan searches. - No sub-award data -- this actor searches prime awards only. Sub-award and sub-contract data is available through a different USAspending API endpoint not covered by this actor.
Responsible use
- Public data only -- all data returned by this actor comes from publicly available federal spending records on USAspending.gov. No private or restricted information is accessed.
- Respect API capacity -- while the USAspending API has no formal rate limits, the actor includes a 300ms delay between page requests. Avoid scheduling excessively frequent runs that could burden the API.
- Accuracy verification -- while the actor normalizes and structures the data, always verify critical details on the official USAspending.gov website before making business, investment, or reporting decisions.
- Intended purposes -- this data is provided for research, journalism, business development, policy analysis, and transparency purposes. Use it responsibly and in compliance with applicable laws.
- Recipient information -- recipient names and locations are public record. Do not use this data for harassment, unsolicited marketing, or any purpose that violates recipient privacy expectations.
FAQ
Do I need a USAspending API key? No. The USAspending API is completely free and open to the public. No registration, API key, or authentication of any kind is required.
How current is the data? USAspending.gov data is updated monthly by the Treasury Department. Recent awards may take 30-90 days to appear in the system after they are obligated by the awarding agency.
Can I search for multiple award types at once?
Yes. Pass awardTypes as an array (e.g. ["contracts","grants"]). The actor fetches each type as its own API request, then merges, re-ranks, and breaks the results down by type in the summary record. The single awardType field still works for one type at a time.
What is an IDV? An IDV (Indefinite Delivery Vehicle) is a contract that does not specify a firm quantity of supplies or a fixed scope of work at the time of award. This includes GWAC contracts (Government-Wide Acquisition Contracts), Federal Supply Schedules (GSA Schedules), and blanket purchase agreements.
Why are some award amounts null?
Some awards, particularly those in early stages or certain assistance programs, may not have a dollar amount recorded in the system yet. The awardAmount field will be null in these cases.
Can I search for state or local government spending? No. USAspending.gov tracks only federal government spending. For state-level data, you would need separate data sources such as individual state transparency portals.
What date range is supported? The earliest available data begins on 2007-10-01 (the start of federal fiscal year 2008). You can search any date range from that point to the present using the format "YYYY-MM-DD to YYYY-MM-DD."
How are results sorted?
Results are always sorted by award amount in descending order (largest first). For loan searches, results are sorted by loan face value. This means setting a small maxResults value gives you the biggest awards immediately.
What is the difference between awarding agency and funding agency? The awarding agency is the federal agency that issues and manages the contract or grant. The funding agency provides the money. These are often the same, but in some cases (such as interagency agreements), the funding comes from a different agency than the one managing the award.
Can I get results in CSV or Excel format?
Yes. After the actor completes, click "Export" on the dataset page and choose CSV, Excel, JSON, or XML. The Apify API also supports format=csv and format=xlsx query parameters for programmatic access.
How do I find the correct agency name? Visit USAspending.gov and browse the Agency page to find the exact official name. Common examples include "Department of Defense," "Department of Health and Human Services," "National Aeronautics and Space Administration," and "Department of Energy."
Is this the same data as on USAspending.gov? Yes. This actor queries the same official USAspending.gov API that powers the website. The data is identical -- the actor simply provides it in a structured, machine-readable format with automated search and export capabilities.
Related actors
| Actor | Description | Link |
|---|---|---|
| SAM.gov Contract Monitor | Search active federal contract opportunities and solicitations on SAM.gov | View |
| Grants.gov Federal Grant Search | Search active federal grant opportunities across all agencies | View |
| Congress Bill Search | Search US congressional bills and legislation by keyword, sponsor, or status | View |
| FEC Campaign Finance Search | Search Federal Election Commission data for campaign contributions and political spending | View |
| Federal Register Search | Search proposed rules, final rules, and notices in the Federal Register | View |
| Congressional Stock Trade Tracker | Track stock transactions reported by members of the US Congress | View |
| OFAC Sanctions Search | Screen entities against the US Treasury OFAC sanctions list | View |
| SEC EDGAR Filing Analyzer | Search and analyze SEC financial filings and corporate disclosures | View |
| CFPB Consumer Complaints | Search consumer complaints filed with the Consumer Financial Protection Bureau | View |
| FDIC Bank Data Search | Search FDIC bank financial data and institution information | View |