# USAspending New Federal Contract Awards & Winners Scraper (`groundplanes/usaspending-new-contract-awards`) Actor

Find newly awarded US federal contracts from USAspending.gov: winner name, UEI, address, amount, agency, NAICS/PSC, place of performance and business categories. Filter by date, NAICS, state, agency and amount. For subcontracting and GovCon research. No API key.

- **URL**: https://apify.com/groundplanes/usaspending-new-contract-awards.md
- **Developed by:** [John](https://apify.com/groundplanes) (community)
- **Categories:** Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 contract awards

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

## USAspending New Federal Contract Awards & Winners Scraper

Extract **newly awarded** US federal prime contracts (`date_type: "new_awards_only"`) from the official USAspending.gov REST API v2 and enrich each winning prime contractor with its SAM.gov UEI, headquarters street address, parent entity, socio-economic business categories, primary place of performance, NAICS/PSC hierarchy, and (optional, off by default) reported executive compensation.

Unlike generic USAspending queries that return multi-year contracts modified with small administrative actions, this Actor strictly filters on `new_awards_only` so every row is a genuinely new prime contract award.

### Who it's for

- **Subcontractors & specialty vendors** identifying newly awarded federal prime contractors (`recipientName`, `recipientUei`, `recipientAddress`, `placeOfPerformance`) to pitch teaming and subcontracting support
- **B2B sales, staffing, recruiting & GovCon BD teams** tracking companies that just won federal awards above a dollar threshold (`minAwardAmountUsd`) in target NAICS codes
- **Defense, IT, construction & professional services suppliers** monitoring new contract wins across civilian and defense agencies

### Input

All filters are optional. By default, the Actor pulls up to 200 new contract awards of at least $250,000 signed in the last 30 days, sorted by award amount descending (or newest first with `sortBy`), with recipient detail enrichment on and executive names off.

```json
{
  "awardStartDate": "2026-09-23",
  "awardEndDate": "2026-10-23",
  "naicsCodes": ["541512", "541511"],
  "minAwardAmountUsd": 250000,
  "maxAwardAmountUsd": 50000000,
  "recipientStates": ["VA", "MD"],
  "placeOfPerformanceStates": ["VA"],
  "awardingAgencies": ["Department of Veterans Affairs"],
  "sortBy": "NEWEST_FIRST",
  "enrichRecipientDetails": true,
  "includeExecutiveCompensation": false,
  "maxItems": 200
}
```

| Field | Type | Default | Description |
|---|---|---|---|
| `awardStartDate` | string (`YYYY-MM-DD`) | `today - 30 days` | Start of the new-award date window. |
| `awardEndDate` | string (`YYYY-MM-DD`) | `today` | End of the new-award date window. |
| `naicsCodes` | array of strings | `[]` (all) | 2- to 6-digit NAICS codes (e.g. `["541512"]`). |
| `minAwardAmountUsd` | integer | `250000` | Minimum contract award obligation amount in USD. |
| `maxAwardAmountUsd` | integer | `0` (no max) | Maximum contract award obligation amount in USD (`0` = unlimited). |
| `recipientStates` | array of strings | `[]` (all) | 2-letter US state codes for prime contractor headquarters. |
| `placeOfPerformanceStates` | array of strings | `[]` (all) | 2-letter US state codes for contract place of performance. |
| `awardingAgencies` | array of strings | `[]` (all) | Official toptier awarding agency names (mapped to `agencies` filter with `type: "awarding"`, `tier: "toptier"`). |
| `enrichRecipientDetails` | boolean | `true` | Fetch `/api/v2/awards/{generated_internal_id}/` (throttled to ≤ 5 req/s) for recipient street address, business categories and parent recipient. |
| `sortBy` | string | `AMOUNT_DESC` | `AMOUNT_DESC` (largest first) or `NEWEST_FIRST` (most recently signed first). |
| `includeExecutiveCompensation` | boolean | `false` | Also return `topExecutives` (names + pay as reported to SAM.gov). These are named individuals; leave off unless you need them. |
| `maxItems` | integer | `200` | Maximum number of rows to output. |

### Output

| Field | Type | Description |
|---|---|---|
| `awardId` | string | null | Procurement Instrument Identifier (PIID / Award ID) |
| `generatedInternalId` | string | USAspending unique internal award identifier |
| `recipientName` | string | null | Winning prime contractor legal name |
| `recipientUei` | string | null | SAM.gov 12-character Unique Entity Identifier (UEI) |
| `parentRecipientName` | string | null | Ultimate parent recipient legal name |
| `awardAmountUsd` | number | null | Total award obligation amount in USD |
| `startDate` | string | null | Period of performance start date (`YYYY-MM-DD`) |
| `endDate` | string | null | Period of performance end date (`YYYY-MM-DD`) |
| `awardingAgency` | string | null | Toptier awarding agency name |
| `awardingSubAgency` | string | null | Subtier awarding agency name |
| `naicsCode` | string | null | 6-digit NAICS code |
| `naicsDescription` | string | null | NAICS industry description |
| `pscCode` | string | null | Product and Service Code (PSC) |
| `description` | string | null | Contract award description |
| `recipientAddress` | object | `{ street, city, state, zip }` of the prime contractor |
| `placeOfPerformance` | object | `{ city, state, zip }` where the work is performed |
| `businessCategories` | array of strings | SAM socio-economic and entity classifications |
| `dateSigned` | string | null | Date the base award was signed (`YYYY-MM-DD`) |
| `topExecutives` | array of objects | Reported top executives `[{ name, amount }]`. Empty unless `includeExecutiveCompensation` is on, or when not reported |
| `usaspendingUrl` | string | Direct link: `https://www.usaspending.gov/award/<generatedInternalId>` |

#### Sample output row

```json
{
  "awardId": "36C10G26K0300",
  "generatedInternalId": "CONT_AWD_36C10G26K0300_3600_36C10G19D0038_3600",
  "recipientName": "TRIWEST HEALTHCARE ALLIANCE CORP",
  "recipientUei": "J7M9HPTGJ1S9",
  "parentRecipientName": "TRIWEST HEALTHCARE ALLIANCE CORP",
  "awardAmountUsd": 1200153022.86,
  "startDate": "2026-08-01",
  "endDate": "2026-08-31",
  "awardingAgency": "Department of Veterans Affairs",
  "awardingSubAgency": "Department of Veterans Affairs",
  "naicsCode": "524114",
  "naicsDescription": "DIRECT HEALTH AND MEDICAL INSURANCE CARRIERS",
  "pscCode": "G007",
  "description": "EXPRESS REPORT: AUGUST 2026",
  "recipientAddress": {
    "street": "15810 N 28TH AVE",
    "city": "PHOENIX",
    "state": "AZ",
    "zip": "85053"
  },
  "placeOfPerformance": {
    "city": "FREDERICKSBURG",
    "state": "VA",
    "zip": "22408"
  },
  "businessCategories": [
    "Category Business",
    "Corporate Entity Not Tax Exempt",
    "Not Designated a Small Business",
    "Special Designations",
    "U.S.-Owned Business"
  ],
  "topExecutives": [],
  "usaspendingUrl": "https://www.usaspending.gov/award/CONT_AWD_36C10G26K0300_3600_36C10G19D0038_3600"
}
```

### How pricing works

Pay per result. You only pay for rows returned.

### Data source and terms

All data is fetched live from the official U.S. Department of the Treasury / Bureau of the Fiscal Service **USAspending.gov API v2** (`https://api.usaspending.gov/api/v2/`). Civilian agencies publish new contract awards within days of signature; **Department of Defense (DoD) contract data on USAspending is published on a 90-day statutory delay**. Public federal spending records are in the U.S. public domain.

### Limits and FAQ

- **Why are DoD contracts missing from the last 30 days?** By law, Department of Defense procurement actions are held for 90 days before publication on USAspending.gov. To pull newly released DoD contract wins, set `awardStartDate` and `awardEndDate` roughly 90–120 days back. Civilian agencies publish within days.
- **Privacy: executive compensation.** `topExecutives` contains named people and their pay as published by USAspending/SAM.gov. It is off by default. If you turn it on, use it only for legitimate business research and follow applicable privacy law; don't use it for unsolicited marketing to those individuals.
- **How many results can I get?** The Actor pages with USAspending's record cursor, so it is not limited by the ~10,000-row cap of page-number paging. `maxItems` is the only limit.
- **Why is `topExecutives` sometimes `[]` even when turned on?** Under FAR 52.204-10, only contractors meeting specific federal revenue thresholds without public SEC compensation filings are required to report their top 5 executives in SAM.gov.
- **How fast is `enrichRecipientDetails`?** Detail calls are rate-limited to at most 5 requests per second (~40 seconds per 200 awards). Set `enrichRecipientDetails: false` for fast summary-only runs.

### Changelog

- **v0.1.2** — Cursor paging (no 10k cap). New `sortBy` option (`NEWEST_FIRST`) and `dateSigned` field. Executive names/pay are now opt-in via `includeExecutiveCompensation`.

- **v0.1.1** — Steadier paging, and one failed award-detail lookup no longer stops the whole run.

- **v0.1** — Initial release with `new_awards_only` filtering and rate-limited `/api/v2/awards/{id}/` recipient enrichment.

# Actor input Schema

## `awardStartDate` (type: `string`):

Start of the new-award action date window in YYYY-MM-DD format. Leave empty for today minus 30 days.

## `awardEndDate` (type: `string`):

End of the new-award action date window in YYYY-MM-DD format. Leave empty for today.

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

Optional list of 2- to 6-digit NAICS codes (e.g. \["541512", "541511"]). Leave empty for all industries.

## `minAwardAmountUsd` (type: `integer`):

Minimum contract award obligation amount in USD.

## `maxAwardAmountUsd` (type: `integer`):

Maximum contract award obligation amount in USD. Set to 0 for no maximum.

## `recipientStates` (type: `array`):

Optional 2-letter US state codes for prime contractor headquarters (e.g. \["VA", "MD"]).

## `placeOfPerformanceStates` (type: `array`):

Optional 2-letter US state codes where contract work is performed (e.g. \["VA", "TX"]).

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

Optional list of official toptier awarding agency names (e.g. \["Department of Veterans Affairs", "General Services Administration"]).

## `sortBy` (type: `string`):

Largest awards first, or most recently signed first.

## `enrichRecipientDetails` (type: `boolean`):

Fetch each award's detail endpoint for recipient street address, business categories, parent recipient, place of performance, NAICS/PSC hierarchy, and top executive compensation.

## `includeExecutiveCompensation` (type: `boolean`):

Return the recipient's top 5 executives with compensation, when reported to SAM.gov. These are named individuals: off by default. Turn on only if you have a lawful reason to process it.

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

Maximum number of newly awarded contracts to return.

## Actor input object example

```json
{
  "naicsCodes": [],
  "minAwardAmountUsd": 250000,
  "maxAwardAmountUsd": 0,
  "recipientStates": [],
  "placeOfPerformanceStates": [],
  "awardingAgencies": [],
  "sortBy": "AMOUNT_DESC",
  "enrichRecipientDetails": true,
  "includeExecutiveCompensation": false,
  "maxItems": 200
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "naicsCodes": [],
    "minAwardAmountUsd": 250000,
    "maxAwardAmountUsd": 0,
    "recipientStates": [],
    "placeOfPerformanceStates": [],
    "awardingAgencies": [],
    "enrichRecipientDetails": true,
    "maxItems": 200
};

// Run the Actor and wait for it to finish
const run = await client.actor("groundplanes/usaspending-new-contract-awards").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 = {
    "naicsCodes": [],
    "minAwardAmountUsd": 250000,
    "maxAwardAmountUsd": 0,
    "recipientStates": [],
    "placeOfPerformanceStates": [],
    "awardingAgencies": [],
    "enrichRecipientDetails": True,
    "maxItems": 200,
}

# Run the Actor and wait for it to finish
run = client.actor("groundplanes/usaspending-new-contract-awards").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 '{
  "naicsCodes": [],
  "minAwardAmountUsd": 250000,
  "maxAwardAmountUsd": 0,
  "recipientStates": [],
  "placeOfPerformanceStates": [],
  "awardingAgencies": [],
  "enrichRecipientDetails": true,
  "maxItems": 200
}' |
apify call groundplanes/usaspending-new-contract-awards --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,groundplanes/usaspending-new-contract-awards"
        }
    }
}
```

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/gHxnGMMQzLkubh6Kd/builds/9DoRbYfrrdvRifbZD/openapi.json
