# Federal Subcontracts & Subgrants Feed (USAspending subawards) (`moment-data/usaspending-subawards-feed`) Actor

New federal subcontracts and subgrants (FFATA subawards) from the official USAspending.gov API: sub-recipient company + UEI, prime contractor, amount, agency, NAICS/PSC, assistance listing. Filters by NAICS, PSC, agency, state, keyword and 'new since last run' mode.

- **URL**: https://apify.com/moment-data/usaspending-subawards-feed.md
- **Developed by:** [Luke Miller](https://apify.com/moment-data) (community)
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 subaward records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Federal Subcontracts & Subgrants Feed (USAspending subawards)

Daily feed of **new federal subcontracts and subgrants**: who won work *under* a federal prime contract or grant, for how much, from which prime, and for which agency. Data comes from the official **USAspending.gov API** (U.S. Treasury). It carries the FFATA subaward reports that prime contractors and grantees file through SAM.gov. Each record carries the sub-recipient company and UEI, city, state and ZIP, the prime recipient and prime award ID, the amount and date, the awarding agency and sub-agency, NAICS and PSC (subcontracts) or the assistance listing / CFDA program (subgrants), and a link to the prime award on USAspending.

Prime-award feeds tell you who won the contract. This feed tells you **who the prime is buying from**. Use it to map teaming partners, find suppliers to the big primes, and spot small businesses that just landed federal work.

### Who it's for

- **GovCon business development and capture.** See which small businesses Leidos, SAIC, Booz Allen, Lockheed or your target primes are subcontracting to, by NAICS, PSC and agency. Find teaming partners and competitors.
- **B2B sales to federal suppliers.** Newly funded subcontractors need staff, equipment, software, insurance, compliance (CMMC) and financing.
- **Grant and nonprofit intelligence.** Track which universities, health systems, school districts and nonprofits receive pass-through subgrants under a program (for example NIH 93.837 or NSF 47.049).
- **Investors, analysts and journalists.** Follow money flowing down the defense, space and health supply chains.

### What you get

- `category` (`subcontract` or `subgrant`), `subAwardId`, `subAwardType`, `subAwardDate`, `amount` (USD), `description`.
- Sub-recipient: `subRecipientName`, `subRecipientUei`, `subRecipientCity`, `subRecipientState`, `subRecipientZip5`, `subRecipientCountry`, `subRecipientCongressionalDistrict`, and the place of performance city and state when it is reported.
- Prime: `primeAwardId`, `primeRecipientName`, `primeRecipientUei`, `primeAwardUrl`, `primeRecipientUrl`.
- Classification: `awardingAgency`, `awardingSubAgency`, `naicsCode` and `naicsDescription`, `pscCode` and `pscDescription`, `assistanceListing` and `assistanceListingTitle`.
- `subawardKey`, a stable hash used for dedupe, and `retrievedAt`.

**Entity-level only:** street address lines are never output. Sub-recipients whose name looks like a private individual are dropped by default (`excludePersonLikeNames`).

### Quick start

Click **Start** with the default input `{}`. You get about 30 of the newest subawards (subcontracts and subgrants interleaved, $0 placeholders removed) dated in the last 14 days, in about 3 seconds.

Recipes:

- **Who DoD primes subcontract IT work to:** `{"categories":["subcontracts"],"awardingAgencies":["Department of Defense"],"naicsCodes":["5415"],"minAmount":50000,"daysBack":45,"maxItems":200}`
- **Track specific primes' suppliers:** `{"categories":["subcontracts"],"primeRecipientNameContains":["LEIDOS","BOOZ ALLEN","LOCKHEED"],"daysBack":90,"maxPagesPerCategory":50,"maxItems":500}`
- **New subcontractors in your state, daily:** `{"mode":"sinceLastRun","categories":["subcontracts"],"subRecipientStates":["CO"],"maxItems":200,"stateKey":"co-subs"}`
- **NIH / NSF pass-through subgrants to CA and NY institutions:** `{"categories":["subgrants"],"assistanceListings":["93.837","47.049"],"subRecipientStates":["CA","NY"],"daysBack":30}`

Schedule it daily or weekly in sinceLastRun mode and connect it to a webhook, Google Sheets, Make, Zapier or your CRM.

### Input

| Field | Default | Notes |
|---|---|---|
| `mode` | `window` | `window` (stateless, last `daysBack` days) or `sinceLastRun` (dedupes across runs per `stateKey`, re-checks `lookbackDays`) |
| `categories` | both | `subcontracts`, `subgrants` |
| `daysBack` / `lookbackDays` | 14 / 60 | sub-award action-date window |
| `keywords`, `naicsCodes`, `pscCodes`, `assistanceListings`, `awardingAgencies`, `subRecipientStates`, `minAmount`, `maxAmount` | none | server-side USAspending filters |
| `subRecipientNameContains`, `primeRecipientNameContains` | none | client-side name filters (raise `maxPagesPerCategory` for rare names) |
| `excludeZeroAmount` / `excludePersonLikeNames` | true / true | quality and privacy screens |
| `maxItems` | 30 | up to 5,000 per run |
| `maxPagesPerCategory` | 10 | 100 subawards per API page |

### Output example

```json
{
  "category": "subcontract",
  "subAwardId": "D26P002261",
  "subAwardDate": "2026-10-30",
  "amount": 113998,
  "subRecipientName": "AVIATRIX INC",
  "subRecipientUei": "WNG8LVV75EP3",
  "subRecipientCity": "SHERWOOD",
  "subRecipientState": "OR",
  "subRecipientZip5": "97140",
  "description": "MATERIALS IN SUPPORT OF THE REFERENCED PRIME CONTRACT",
  "primeAwardId": "W58RGZ26F0023",
  "primeRecipientName": "DEFENSE SYSTEMS AND SOLUTIONS",
  "primeRecipientUei": "NWKQVQED4C81",
  "awardingAgency": "Department of Defense",
  "awardingSubAgency": "Department of the Army",
  "naicsCode": "336413",
  "pscCode": "1520",
  "primeAwardUrl": "https://www.usaspending.gov/award/CONT_AWD_W58RGZ26F0023_9700_W58RGZ18D0001_9700"
}
```

See `sample-output.json` for full records.

### Data source and reuse

- Source: USAspending.gov API (`api.usaspending.gov/api/v2/search/spending_by_award/` with `subawards: true`), U.S. Department of the Treasury. U.S. federal government data is public domain. It is keyless and needs no login.
- Subaward data is self-reported by prime recipients under the Federal Funding Accountability and Transparency Act (FFATA) through SAM.gov. Reports can arrive weeks after the subaward date, and some primes report $0 placeholders, which are removed by default. Amounts and names are as reported.
- Polite access: at most about 2.5 requests per second (usually 1-5 requests per run), retries with backoff, and a descriptive User-Agent.
- Not affiliated with or endorsed by the U.S. government.

### Pricing

Pay per event. You pay only for records delivered.

| Event | Price | Charged |
|---|---|---|
| Actor start | $0.005 | once per run |
| Subaward record | $0.003 | per subaward delivered to the dataset |

No separate platform-usage charges: compute is included in the event prices.

Example: a daily sinceLastRun schedule delivering 50 new subawards costs about $0.155 per day (about $4.65 per month). A one-off pull of 1,000 subawards costs about $3.

### FAQ

**How is this different from a prime-award scraper?** Prime-award tools list contracts the government awards. This feed lists the next tier down: the companies, universities and nonprofits that primes pay, which is where teaming partners, suppliers and pass-through grantees show up.

**Why does sinceLastRun use a lookback window?** Primes often report subawards 30 or more days after the subaward date. sinceLastRun re-checks the last `lookbackDays` (default 60) and emits only subawards it has not delivered before for your `stateKey`.

**Why are there fewer subcontracts than subgrants in the last two weeks?** Contract subawards are reported later on average. Widen `daysBack` (for example 45-90) for fuller subcontract coverage.

**Does it include people?** No. Output is organisation-level. Street lines are never output, and person-like names are dropped by default.

# Actor input Schema

## `mode` (type: `string`):

window (default): newest subawards dated within the last N days, no saved state. sinceLastRun: only subawards not delivered before for this State key, re-checking a lookback window to catch late reports; use for daily or weekly schedules.

## `categories` (type: `array`):

subcontracts = subawards under federal contracts (FSRS/SAM.gov). subgrants = subawards under grants, cooperative agreements and other assistance.

## `daysBack` (type: `integer`):

Sub-award action dates from today minus this many days.

## `lookbackDays` (type: `integer`):

Prime recipients report subawards late (often 30+ days), so sinceLastRun re-checks this window and emits only unseen subawards.

## `keywords` (type: `array`):

USAspending keyword search (description, names, IDs), e.g. cyber, drone, broadband.

## `naicsCodes` (type: `array`):

Prime award NAICS codes or prefixes, e.g. 541512, 5415, 236220.

## `pscCodes` (type: `array`):

Product/service codes, e.g. R425, D399, 1520.

## `assistanceListings` (type: `array`):

Grant program numbers, e.g. 93.837, 47.049, 16.575 (subgrants only).

## `awardingAgencies` (type: `array`):

Top-tier agency names exactly as on USAspending, e.g. Department of Defense, Department of Energy, National Aeronautics and Space Administration.

## `subRecipientStates` (type: `array`):

2-letter US state codes of the sub-recipient, e.g. CO, VA, TX.

## `subRecipientNameContains` (type: `array`):

Any of these texts in the sub-recipient name (applied after the API search).

## `primeRecipientNameContains` (type: `array`):

Any of these texts in the prime contractor / grantee name, e.g. LOCKHEED, RAYTHEON, LEIDOS (applied after the API search).

## `minAmount` (type: `integer`):

Only subawards of at least this amount.

## `maxAmount` (type: `integer`):

Only subawards of at most this amount.

## `excludeZeroAmount` (type: `boolean`):

Some primes report $0 placeholder subawards (e.g. child-care subgrant lists).

## `excludePersonLikeNames` (type: `boolean`):

Drop sub-recipients whose name looks like a private individual (entity-level output only).

## `maxItems` (type: `integer`):

Maximum records per run (shared across categories, interleaved newest first).

## `maxPagesPerCategory` (type: `integer`):

100 subawards per page; caps API calls when client-side filters drop many rows.

## `stateKey` (type: `string`):

Separate saved state per saved search in sinceLastRun mode.

## Actor input object example

```json
{
  "mode": "window",
  "categories": [
    "subcontracts",
    "subgrants"
  ],
  "daysBack": 14,
  "lookbackDays": 60,
  "keywords": [],
  "naicsCodes": [],
  "pscCodes": [],
  "assistanceListings": [],
  "awardingAgencies": [],
  "subRecipientStates": [],
  "subRecipientNameContains": [],
  "primeRecipientNameContains": [],
  "excludeZeroAmount": true,
  "excludePersonLikeNames": true,
  "maxItems": 30,
  "maxPagesPerCategory": 10,
  "stateKey": "default"
}
```

# Actor output Schema

## `subawards` (type: `string`):

One record per subcontract or subgrant.

## `summary` (type: `string`):

Date window, rows scanned, filters dropped, API traffic.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("moment-data/usaspending-subawards-feed").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("moment-data/usaspending-subawards-feed").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call moment-data/usaspending-subawards-feed --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,moment-data/usaspending-subawards-feed"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/kjDQztolL5iT1J4jD/builds/Ku5Hxt875JO97ryeL/openapi.json
