# Federal Contract Award Alerts – New Awards Only (`keyboardhacker/federal-contract-award-alerts`) Actor

Get only newly signed U.S. federal contract awards by NAICS, PSC, agency, set-aside or state, with offers received and competition data.

- **URL**: https://apify.com/keyboardhacker/federal-contract-award-alerts.md
- **Developed by:** [Jetayvius Saragosa](https://apify.com/keyboardhacker) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 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

### What does Federal Contract Award Alerts do?

It gives you **only the U.S. federal contracts that were newly signed since your last run** in
the industries, agencies and places you care about, from the official
[USAspending.gov](https://www.usaspending.gov) API run by the U.S. Department of the Treasury.
Each award comes with the competition details you need to act on it: how many offers the agency
received, whether it was a small-business set-aside, the solicitation number, the contract
vehicle it was ordered under, the winner's parent company and the potential total value.

Schedule it daily or weekly and you get a clean feed of new wins. It is useful for capture and
business-development teams, small-business contractors watching their NAICS codes, subcontractors
looking for primes that just won work, and market analysts tracking an agency's spending.

**You get only new awards, and pay only for those.** In incremental mode, awards you already
received and older awards that were already public before your first run are skipped and not
charged. The one exception is described under "What if a run is stopped" below.

### Why use it instead of searching USAspending yourself?

- **"Newly signed" means newly signed.** It filters on the date the contract was signed, so
  modifications of old contracts aren't mistaken for new wins.
- **Late-published awards are not lost.** Department of Defense awards reach USAspending 30–90
  days after signing. Each run re-checks the last 120 days and delivers any award that has
  appeared since your previous run, without repeating awards this feed already received.
- **Competition intelligence is included.** One record has the offer count, the extent
  competed, the set-aside type, the solicitation ID (for matching to SAM.gov opportunities), the
  parent IDV and the parent company.
- **No API key, scraping or login.** It uses an official, public government API only.

### How to use it

1. Enter at least one filter: **NAICS codes** (for example `541512`, or `5415` for the whole
   group), **PSC codes**, **keywords**, **awarding agencies**, **set-aside types**,
   **place-of-performance states** or a **minimum award amount**.
2. Run it once to see the last 7 days of matching awards.
3. For monitoring, tick **"Only new awards since my last run"** and create a **schedule**, for
   example daily at 08:00. Every run then returns only awards that are new to you. Connect the
   dataset to email, Slack, Google Sheets or a webhook through Apify integrations.

Each distinct filter set is its own feed, so you can monitor several markets side by side.
Reordering or re-casing the same codes keeps the same feed. To run two independent feeds with
identical filters (for example one per team), give each a **Feed name**.

#### Input example

```json
{
  "naicsCodes": ["541512", "541519"],
  "setAsideTypes": ["SBA", "SDVOSBC"],
  "placeOfPerformanceStates": ["VA", "MD"],
  "minAwardAmount": 25000,
  "incremental": true
}
```

Set-aside codes verified against the live API: `SBA` total small business, `8A` and `8AN` 8(a),
`SDVOSBC` service-disabled veteran-owned, `WOSB` women-owned small business.

#### Output example

```json
{
  "awardId": "80TECH27FA010",
  "dateSigned": "2026-10-22",
  "recipientName": "NEW TECH SOLUTIONS, INC.",
  "awardAmount": 66592.61,
  "potentialValueBaseAndAllOptions": 452587.83,
  "awardingAgency": "National Aeronautics and Space Administration",
  "awardingOffice": "NASA IT PROCUREMENT OFFICE",
  "naicsCode": "541519",
  "pscCode": "DA10",
  "setAside": "SMALL BUSINESS SET ASIDE - TOTAL",
  "extentCompeted": "FULL AND OPEN COMPETITION AFTER EXCLUSION OF SOURCES",
  "numberOfOffersReceived": 2,
  "contractPricing": "FIRM FIXED PRICE",
  "solicitationId": "80TECH27QA002",
  "parentIdvPiid": "NNG15SC82B",
  "recipientUei": "XK11LLUL61A7",
  "parentRecipientName": "NEW TECH SOLUTIONS, INC.",
  "periodOfPerformanceStart": "2026-10-25",
  "periodOfPerformanceEnd": "2027-10-24",
  "placeOfPerformanceState": "CA",
  "usaspendingUrl": "https://www.usaspending.gov/award/CONT_AWD_80TECH27FA010_8000_NNG15SC82B_8000"
}
```

Each run also writes a summary to the `OUTPUT` record of the key-value store. It shows how many
awards were delivered, skipped as already delivered, or baselined, and why the run stopped.

### How much does it cost?

Pricing is **pay-per-event** and is active now. Apify platform usage is included at no extra cost:

- **$0.004 per award delivered** ($4 per 1,000);
- **$0.002 per run start** (one start event per run at the default 128 MB memory).

There is no separate per-dataset-item charge, and each award is charged at most once per run.
In incremental mode, awards already delivered to a feed, and older awards that were already
public before its first run, are skipped and not charged. The exception is an abruptly killed
run (see the FAQ). Without incremental mode, every run returns, and charges for, every matching
award in its window, including awards earlier runs already returned. **Maximum awards per run**
and your run's **maximum charge** both cap what one run can deliver.

For scale: in October 2026, NAICS 541512 alone averaged about 2 new awards a day, and the whole
5415 group about 11 a day. On a daily schedule that comes to about $0.30 and $1.40 a month.

### FAQ

#### How fresh is the data?

Civilian agencies usually appear on USAspending within 1–3 days of signing. Department of Defense
awards are published with a 30–90 day delay, set by the government. Incremental mode delivers
them as soon as they appear.

#### Why did my first incremental run return fewer awards than I expected?

The first run delivers awards signed within **Look back (days)**, 7 by default. Older awards that
were already public are recorded as a free baseline. For a historical pull, set **Signed on or
after** instead.

#### Are contract vehicles (GWACs, IDIQs, schedules) included?

New vehicles themselves are not included. The funded work arrives as orders under them, and
those orders are included: definitive contracts, purchase orders, delivery and task orders, and
BPA calls. Each order carries its parent vehicle in `parentIdvPiid`.

#### What if a run is stopped, times out or overlaps another run?

Progress is saved every 20 awards, and again when the platform asks the run to stop. The next run
continues where it stopped and skips every award this feed already received. If a run is killed
abruptly, fewer than 20 of its most recent awards may be delivered, and charged, once more. If
two runs of the same feed overlap, the second one exits without delivering anything.

#### Are there limits?

Each run checks up to 10,000 matching awards. Very broad filters (for example an entire 2-digit
NAICS sector) get a warning to narrow them.

#### Is this data allowed to be used?

Yes. USAspending data is published by the U.S. government under the DATA Act for public use. This
Actor is not affiliated with, or endorsed by, USAspending.gov or the U.S. Department of the
Treasury. Executive-compensation data is never collected.

#### Something is wrong — what do I do?

Open an issue on the Actor's **Issues** tab with the run ID. Input mistakes, such as an unknown
agency name, stop the run before any award is delivered or charged and say how to fix them.

# Actor input Schema

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

Industry codes (2–6 digits). A shorter code matches every code under it, e.g. 5415 = all computer systems design services.

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

Federal product and service codes, e.g. D399 (other IT and telecom services) or R408 (program management support).

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

Words or phrases matched against award descriptions and recipient names, e.g. "cybersecurity".

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

Top-level agency names exactly as USAspending writes them, e.g. "Department of Defense", "Department of Veterans Affairs". Note: Department of Defense awards are published 30–90 days after signing; incremental mode still delivers them when they appear.

## `setAsideTypes` (type: `array`):

Only awards under these small-business set-asides, e.g. SBA (total small business), 8A, 8AN, SDVOSBC (service-disabled veteran-owned), WOSB (women-owned). Leave empty for all.

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

Two-letter U.S. state codes where the work is performed, e.g. VA, MD, TX.

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

Skip awards below this obligated amount.

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

Skip awards above this obligated amount.

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

Awards signed within this many days are returned (on the first incremental run, or on every run when incremental mode is off). Ignored when "Signed on or after" is set.

## `dateFrom` (type: `string`):

Fixed start date (YYYY-MM-DD) for a one-off historical pull instead of a rolling window.

## `maxResults` (type: `integer`):

Hard cap on awards delivered (and charged) per run. Your run's maximum-charge setting is also respected.

## `enrichDetails` (type: `boolean`):

Adds NAICS/PSC, set-aside, extent competed, number of offers received, solicitation ID, parent contract vehicle, recipient UEI and parent company, potential total value and place of performance. Slower (one extra official API call per award); the price per award is the same.

## `incremental` (type: `boolean`):

Remembers which awards this feed already delivered and never returns (or charges for) them again — including awards the source publishes late (Department of Defense data appears 30–90 days after signing). TURN THIS ON FOR SCHEDULED MONITORING. Off: every run returns everything signed in the window.

## `feedName` (type: `string`):

Only needed if you want two independent incremental feeds with identical filters (e.g. one per team or integration). Each feed name keeps its own memory of delivered awards.

## Actor input object example

```json
{
  "naicsCodes": [
    "5415"
  ],
  "lookbackDays": 7,
  "maxResults": 200,
  "enrichDetails": true,
  "incremental": false
}
```

# Actor output Schema

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

Dataset items: one newly signed federal contract award per item, with competition details.

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

OUTPUT record: awards delivered, skipped as already delivered, baselined, and why the run stopped.

# 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": [
        "5415"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("keyboardhacker/federal-contract-award-alerts").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": ["5415"] }

# Run the Actor and wait for it to finish
run = client.actor("keyboardhacker/federal-contract-award-alerts").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": [
    "5415"
  ]
}' |
apify call keyboardhacker/federal-contract-award-alerts --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,keyboardhacker/federal-contract-award-alerts"
        }
    }
}
```

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/4aX8lkQpbqtd1PgsE/builds/f4naXxmsz088XUanz/openapi.json
