# Federal Contract Awards Scraper: New Gov Contract Winners (`agents001/us-federal-contract-awards`) Actor

Returns new US federal contract awards from USAspending.gov: winning company, UEI, city and state, awarding agency, amount, NAICS, PSC, description, award date and award page link. Filter by date, amount, NAICS, state, agency and keyword. Grants and IDVs optional. Company-level data only.

- **URL**: https://apify.com/agents001/us-federal-contract-awards.md
- **Developed by:** [Mike Ross](https://apify.com/agents001) (community)
- **Categories:** Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 award records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 Contract Awards Scraper: New Gov Contract Winners

Get the companies that just won US federal contracts, as clean structured data: **one record per new award** with the winning company's name, UEI, city, state and country, the awarding agency, the award amount, NAICS and product or service codes, the description, the award date and a link to the award page on USAspending.gov. Grants and new contract vehicles (IDVs) are optional extras.

A federal contract win is a strong buying signal. The company has fresh budget, often needs to hire, subcontract, buy equipment, software and services, and has a deadline to deliver. Schedule the Actor daily with **Only awards not seen in previous runs** switched on and you get a feed of new winners that match your market.

### What you get

| Field | Example |
|---|---|
| `recipientName`, `recipientUei` | `VETERANS DEVELOPMENT CORPORATION, INC.`, `X3TQE41XJCA6` |
| `recipientCity`, `recipientState`, `recipientCountry` | `NORWELL`, `MA`, `UNITED STATES` |
| `awardAmount` | `63117507.88` (US dollars) |
| `actionDate` | `2026-10-21` (date of the award's first transaction) |
| `awardingAgency`, `awardingSubAgency`, `fundingAgency` | `Department of Veterans Affairs` |
| `awardCategory`, `awardType` | `contract`, `DEFINITIVE CONTRACT` |
| `naicsCode`, `naicsDescription` | `236220`, `COMMERCIAL AND INSTITUTIONAL BUILDING CONSTRUCTION` |
| `pscCode`, `pscDescription` | `Y1DA`, `CONSTRUCTION OF HOSPITALS AND INFIRMARIES` |
| `description` | What the government is buying |
| `startDate`, `endDate` | Period of performance |
| `placeOfPerformanceCity`, `placeOfPerformanceState` | Where the work happens |
| `parentAwardId` | For orders: the IDIQ, schedule or BPA they were placed under |
| `assistanceListingNumber`, `assistanceListingTitle` | Grants only |
| `awardId`, `usaspendingAwardId`, `awardUrl`, `recipientUrl` | Contract number and links to USAspending.gov |
| `isNew`, `firstSeenAt` | Whether the award is new since the previous run with the same filters |

The Output tab has three views: **Awards**, **Companies** (ready for CRM import) and **Industry and agency codes**.

### Who it is for

- **B2B sales teams** selling to government contractors: software, staffing, equipment, insurance, facilities and finance.
- **Subcontractors and teaming partners** looking for primes that just won work in their NAICS code or state.
- **Recruiters and staffing firms**: contract winners often need to staff up quickly.
- **Analysts and investors** tracking which companies win federal work.

### Quick start

1. Click **Start** with the example input. You get the largest new federal contracts from the last 7 days.
2. Narrow it to your market: for example NAICS `5415` (computer systems design), states `VA` and `MD`, minimum amount `250000`.
3. Switch on **Only awards not seen in previous runs** and schedule the Actor daily. Connect the dataset to Slack, email, Google Sheets or your CRM with an Apify integration or webhook.

### Input

| Field | What it does | Default |
|---|---|---|
| `awardTypes` | `contracts`, `idvs` (contract vehicles such as IDIQs and GSA schedules) and `grants` | `["contracts"]` |
| `daysBack` | Awards whose first transaction is dated in the last N days | 7 |
| `startDate`, `endDate` | Fixed window instead of `daysBack` (YYYY-MM-DD) | none |
| `minAwardAmount`, `maxAwardAmount` | Award amount range in US dollars | no limit |
| `naicsCodes` | NAICS codes or prefixes, for example `54`, `5415`, `541512` | all |
| `pscCodes` | Product or service codes or prefixes, for example `D`, `R425` | all |
| `states` | Two-letter state codes | all |
| `locationField` | Match states against the `recipient` address or the `placeOfPerformance` | `recipient` |
| `agencies` | Awarding department or sub agency names, for example `Department of the Navy` | all |
| `keywords` | Words or phrases searched across the award text | none |
| `recipientNames` | Company names or UEIs to watch | none |
| `businessesOnly` | Leave out universities, nonprofits and government bodies | false |
| `sortBy` | `amount` (largest first) or `newest` | `amount` |
| `onlyNew` | Only awards not returned by a previous run with the same filters | false |
| `maxItems` | At most this many records in total. `0` means no limit | 1000 |

Example input for a daily IT services feed:

```json
{
  "awardTypes": ["contracts"],
  "daysBack": 3,
  "naicsCodes": ["5415", "518210"],
  "states": ["VA", "MD", "DC"],
  "minAwardAmount": 250000,
  "onlyNew": true
}
```

### Output example

```json
{
  "awardId": "36C24827C0008",
  "awardCategory": "contract",
  "awardType": "DEFINITIVE CONTRACT",
  "recipientName": "VETERANS DEVELOPMENT CORPORATION, INC.",
  "recipientUei": "X3TQE41XJCA6",
  "recipientCity": "NORWELL",
  "recipientState": "MA",
  "recipientStateName": "Massachusetts",
  "recipientCountryCode": "USA",
  "recipientCountry": "UNITED STATES",
  "awardAmount": 63117507.88,
  "actionDate": "2026-10-21",
  "startDate": "2026-10-21",
  "endDate": "2030-10-20",
  "awardingAgency": "Department of Veterans Affairs",
  "awardingSubAgency": "Department of Veterans Affairs",
  "naicsCode": "236220",
  "naicsDescription": "COMMERCIAL AND INSTITUTIONAL BUILDING CONSTRUCTION",
  "pscCode": "Y1DA",
  "pscDescription": "CONSTRUCTION OF HOSPITALS AND INFIRMARIES",
  "description": "BB - REPLACE DETERIORATED AHU 21, 22, 23 AND 24, PROJECT NUMBER 573-21-705.",
  "placeOfPerformanceCity": "GAINESVILLE",
  "placeOfPerformanceState": "FL",
  "parentAwardId": null,
  "usaspendingAwardId": "CONT_AWD_36C24827C0008_3600_-NONE-_-NONE-",
  "awardUrl": "https://www.usaspending.gov/award/CONT_AWD_36C24827C0008_3600_-NONE-_-NONE-",
  "recipientUrl": "https://www.usaspending.gov/recipient/87798ff6-9a29-9efd-f1b2-b3e3bbf326a4-C/latest",
  "isNew": true,
  "firstSeenAt": "2026-10-23T15:45:20Z",
  "source": "api.usaspending.gov",
  "license": "Public domain (US Government work, 17 U.S.C. 105)",
  "scrapedAt": "2026-10-23T15:45:20Z",
  "schemaVersion": 1
}
```

A run report is saved in the key-value store as `RUN_SUMMARY`: records returned per award type, rows read, records left out for privacy, and any errors.

### Pricing

This Actor uses **pay per event** pricing, with platform usage included. You pay per award record saved to your dataset (`award-record` event):

| Apify plan | Price per 1,000 award records |
|---|---|
| Free | $3.00 |
| Starter | $2.50 |
| Scale | $2.00 |
| Business | $1.50 |
| Enterprise | $1.25 |

Filters, **Only awards not seen in previous runs** and **Max records** keep costs down. A daily feed for one NAICS code and a few states typically returns tens of records a day. Set a maximum cost per run in the run options and the Actor stops cleanly when it is reached.

### How "only new awards" works

When `onlyNew` is on, the Actor remembers which awards it already returned for this exact set of filters, in a key-value store in your account called `agents001-us-federal-contract-awards-state`. The next run only returns awards that are not on that list. The first run returns everything that matches. The date window, order and Max records are not part of the memory, so a rolling `daysBack` window keeps the same history. Changing any filter starts a fresh history. The store holds award ids and timestamps only.

With `onlyNew` off, the Actor does not open or update this store, so every record has `isNew` set to true. If a run stops with a message that it cannot open the store (for example because another Actor in your account already uses that name), enter a different name in **State store name** and run again.

### Good to know about the data

- **New awards only.** The Actor asks USAspending for awards whose first (base) transaction falls in your window. Later modifications to older contracts are not returned.
- **Reporting delays.** Most civilian contracts appear within a few days of signing. Department of Defense contracts are published with a delay, so recent weeks show few or no DoD awards. Grants usually appear several weeks after signing: use `daysBack` of 45 or more for grants.
- **Award amount.** For contracts this is the amount obligated so far, which can grow later. New IDVs (IDIQs, schedules, BPAs) often show 0 until orders are placed under them; their orders show up as contracts with `parentAwardId` set.
- **Up to 50,000 records per award type per run.** That is the search API's limit. Use a shorter window or more filters for bigger pulls.

### Data source, licence and privacy

All data comes from the official USAspending.gov API (`api.usaspending.gov`), run by the US Department of the Treasury, Bureau of the Fiscal Service. USAspending data is a work of the US Government and is in the public domain in the United States (17 U.S.C. 105). Every record carries `license` and `attribution` fields. Source: USAspending.gov. The Actor selects fields, renames them, flattens locations and adds links; it does not change values.

The output is **company-level only**:

- Street addresses, ZIP codes and congressional districts are never output. Location stops at city, state and country.
- Awards to private individuals are left out. That covers redacted recipients such as "INDIVIDUAL RECIPIENT", sole proprietorships whose name is a person's name, and any recipient name shaped like a person's name. A few small businesses with person-like names are left out as a result. The count appears in `RUN_SUMMARY`.
- No contact names, emails or phone numbers are collected.

### FAQ

**Why do I get no grants?**
Grants reach USAspending weeks after signing. Set `daysBack` to 45 or more.

**Why are there few Department of Defense contracts?**
DoD contract data is published with a delay. Widen the window, for example `daysBack` 60, to see recent DoD awards.

**How do I find the exact agency name?**
Use the name shown in the `awardingAgency` or `awardingSubAgency` field of any record, for example `Department of Veterans Affairs` or `Department of the Navy`.

**Can I watch specific companies?**
Yes. Put their names or UEIs in **Recipient name or UEI**.

**Something looks wrong. What should I do?**
Open an issue on the Actor's Issues tab with the run link and your input.

### Disclaimer

This Actor is independent and is not affiliated with, endorsed by or sponsored by USAspending.gov, the US Department of the Treasury or any other US Government agency. Award data is published by the US Government; check the award page on USAspending.gov before acting on it.

# Actor input Schema

## `awardTypes` (type: `array`):

Contracts are purchase orders, delivery orders, BPA calls and definitive contracts. IDVs are new contract vehicles such as IDIQs, GSA schedules and blanket purchase agreements (their amount is often 0 until orders are placed). Grants are block, formula and project grants and cooperative agreements; they reach USAspending several weeks after signing, so use a window of 45 days or more for grants.

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

Only awards whose first (base) transaction is dated within this many days before the end date. Ignored when a start date is set.

## `startDate` (type: `string`):

Optional fixed start date (YYYY-MM-DD), for example 2026-10-01. Earliest allowed: 2007-10-01.

## `endDate` (type: `string`):

Optional fixed end date (YYYY-MM-DD). Leave empty for today.

## `minAwardAmount` (type: `integer`):

Only awards worth at least this many US dollars. 0 or empty means no minimum.

## `maxAwardAmount` (type: `integer`):

Only awards worth at most this many US dollars. 0 or empty means no maximum.

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

Only awards whose NAICS industry code starts with any of these, for example 54 (professional services), 5415 (computer systems design) or 236220. Contracts and IDVs only.

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

Only awards whose PSC starts with any of these, for example D (IT services), R425 or 7030. Contracts and IDVs only.

## `states` (type: `array`):

Two-letter state codes, for example VA, TX, CA. Matched against the recipient's address or the place of performance (see the next field).

## `locationField` (type: `string`):

Use the winning company's address or where the work is done.

## `agencies` (type: `array`):

Department or sub agency names exactly as USAspending writes them, for example 'Department of Veterans Affairs', 'General Services Administration', 'Department of the Navy'.

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

Awards matching any of these words or phrases in the description, recipient, codes and other text fields. For example 'cybersecurity', 'software', 'roofing'.

## `recipientNames` (type: `array`):

Only awards to companies whose name, UEI or DUNS matches any of these, for example 'Booz Allen' or a 12-character UEI. Useful to watch competitors or accounts.

## `businessesOnly` (type: `boolean`):

Leave out universities, nonprofits and government bodies; keep only recipients USAspending classifies as businesses.

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

Largest awards first, or most recently awarded first. Matters when Max records cuts the list.

## `onlyNew` (type: `boolean`):

Remember which awards were already returned for these filters and only return awards that are new since then. The first run returns everything that matches. Ideal for scheduled daily runs. The date window, order and Max records are not part of the memory, so a rolling window keeps the same history.

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

Stop after this many award records in total, across all award types (contracts first, then IDVs, then grants). 0 means no limit (up to 50,000 per award type). You pay per record returned.

## `stateStoreName` (type: `string`):

Only used when 'Only awards not seen in previous runs' is on. Name of the key-value store in your account that keeps the ids of awards already returned. Each different set of filters gets its own record inside it. Change it only to keep separate histories. If a run reports that it cannot open the store, enter a different name here.

## `requestDelaySecs` (type: `number`):

Minimum seconds between requests to the USAspending API. Keep this polite.

## Actor input object example

```json
{
  "awardTypes": [
    "contracts"
  ],
  "daysBack": 7,
  "minAwardAmount": 100000,
  "locationField": "recipient",
  "businessesOnly": false,
  "sortBy": "amount",
  "onlyNew": false,
  "maxItems": 1000,
  "stateStoreName": "agents001-us-federal-contract-awards-state",
  "requestDelaySecs": 0.5
}
```

# Actor output Schema

## `awards` (type: `string`):

No description

## `companies` (type: `string`):

No description

## `runSummary` (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 = {
    "minAwardAmount": 100000
};

// Run the Actor and wait for it to finish
const run = await client.actor("agents001/us-federal-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 = { "minAwardAmount": 100000 }

# Run the Actor and wait for it to finish
run = client.actor("agents001/us-federal-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 '{
  "minAwardAmount": 100000
}' |
apify call agents001/us-federal-contract-awards --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,agents001/us-federal-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/PbJNAfH4CRWiOMnSU/builds/HPgiJDJzYk1HOY6UZ/openapi.json
