# Federal Contract Awards: Who Won and for How Much (`datapenguin/federal-contract-awards`) Actor

See who just won US federal contracts, for how much, and from which agency. Filter by keyword, NAICS or PSC code, state, agency, set-aside or company name. Official USAspending.gov data, no API key. Use it for pricing research, teaming partners and competitor tracking.

- **URL**: https://apify.com/datapenguin/federal-contract-awards.md
- **Developed by:** [Data Penguin](https://apify.com/datapenguin) (community)
- **Categories:** Lead generation
- **Security:** 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 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

### Who won federal contracts, for how much, and from which agency

Federal Contract Awards searches the official USAspending.gov award data and gives you recent US federal contract awards as a clean table: the company that won, the amount, what the work is, the agency and office, the NAICS and product or service codes, where the work happens and links to the award and the winner's spending history. You can narrow it by keyword, NAICS or PSC code, state, agency, set-aside program, company name or minimum amount.

There is no account, API key or login to set up. Type a few words that describe your work, pick how far back to look and start the run.

Contractors use it to see who is winning the work they bid on and at what price, before they price their own bid. Others use it to find teaming partners and subcontracting leads among recent winners, or to keep an eye on a competitor's new awards with a weekly schedule.

#### How to use it

1. Click **Try for free** and open the **Input** tab.
2. Add keywords such as `janitorial` or `roofing`, or a NAICS code such as `561720`, and set how many days back to look.
3. Click **Start**, then open the **Output** tab.

Each run also saves a short Markdown list of the awards (`DIGEST_MD`) that you can send to email or Slack from the Integrations tab.

#### Example inputs

Janitorial and custodial awards from the last 60 days:

```json
{
    "keywords": ["janitorial", "custodial"],
    "awardedWithinDays": 60,
    "maxItems": 100
}
```

Construction awards over $1 million in Texas, set aside for small business, largest first:

```json
{
    "naicsCodes": ["23"],
    "states": ["TX"],
    "setAsides": ["SBA"],
    "minAmount": 1000000,
    "awardedWithinDays": 90,
    "sortBy": "amount"
}
```

Every new award won by one company, for a weekly schedule:

```json
{
    "recipientName": "booz allen",
    "awardedWithinDays": 14,
    "onlyNew": true
}
```

On October 28, 2026 there were 235 janitorial and custodial awards from the previous 60 days, and about 5,700 new contract awards of all kinds from the previous 7 days.

#### What you get

For each award: award ID, winning company and its UEI number, amount obligated, description, date awarded, start and end dates, awarding agency and office, award type (contract, purchase order, delivery order or BPA call), NAICS code and description, product or service code and description, state and ZIP of the work, the date the record last changed, a link to the award on USAspending.gov and a link to the winner's page there.

A shortened example from a real award:

```json
{
    "awardId": "47PJ5227F0005",
    "recipientName": "ELECTRONIC METROLOGY LABORATORY, LLC",
    "amount": 11675.47,
    "description": "URGENT LAFAYETTE AFTER HOURS CUSTODIAL SERVICES FOR VA EHRM OPERATIONS",
    "awardedDate": "2026-10-23",
    "agency": "General Services Administration",
    "subAgency": "Public Buildings Service",
    "awardType": "BPA Call",
    "naicsCode": "561210",
    "pscCode": "S216",
    "awardUrl": "https://www.usaspending.gov/award/CONT_AWD_47PJ5227F0005_4740_47PD0322A0003_4740"
}
```

#### Pricing

You pay per use. There is no monthly fee.

| What | Price |
| --- | --- |
| Award | $0.003 |
| Starting a run | $0.00005 |

A run that returns 100 awards costs about $0.30, and 1,000 awards cost about $3. Set **Maximum cost per run** on the run page to cap what you spend. The Actor stops returning rows when the cap is reached.

#### Questions

##### Do I need a USAspending or SAM.gov account?

No. USAspending.gov publishes this data openly, and the Actor reads it directly.

##### Where does the data come from, and how fresh is it?

From USAspending.gov, which loads federal contract data from the Federal Procurement Data System. Most civilian awards appear within a few days of signing. Department of Defense awards are published about 90 days after signing, so look back 120 days or more when you search for them.

##### What is the difference between "New awards only" on and off?

On, you get contracts that were first signed in your time window. Off, you also get older contracts that had any change in the window, such as an option year, an extension or added funding.

##### Why did I get no results?

Keywords are matched against the award text, which is often short and in capitals, so try a broader word or a NAICS code instead. Also check the time window, especially for Defense awards.

##### Something is wrong or missing. Where do I report it?

Open a thread in the **Issues** tab. I answer within 14 days.

#### Related tools

To find open bids you can still respond to, try [Bid Scout](https://apify.com/datapenguin/sam-gov-opportunities-digest). It lists new SAM.gov notices filtered by the same NAICS codes, set-asides and states.

#### Good to know

Data is public information from USAspending.gov. Amounts are the obligated value reported so far, which can grow as options are exercised. Grants, loans and other assistance are not included, only contracts.

This is an independent tool. It is not affiliated with, endorsed by or sponsored by USAspending.gov, the U.S. Department of the Treasury or any other agency. Data can be incomplete or out of date, so confirm anything important at the source. This is not legal advice.

# Changelog

This Actor's version history is a separate document: https://apify.com/datapenguin/federal-contract-awards/changelog.md

# Actor input Schema

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

Words to look for in the award description and other award text, for example "janitorial" or "roofing". An award matches if it contains any of them. Leave empty for any.

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

Industry codes. Use a full six-digit code like 561720, or the first digits to cover a group: 5617 matches every code starting with 5617, and 23 matches all construction. Leave empty for any.

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

Exact four-character federal product and service codes, such as S201 for custodial services. Leave empty for any.

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

Two-letter codes for the state where the work is done, such as TX or VA. Leave empty for any state.

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

Only awards made by these departments or agencies. Leave empty for all.

## `setAsides` (type: `array`):

Only awards that were reserved for these programs, for example small business or service-disabled veteran-owned. Leave empty for any.

## `recipientName` (type: `string`):

Part of a company name to see only that company's awards, for example "booz allen". Leave empty for any company.

## `awardedWithinDays` (type: `integer`):

How far back to look. Most awards show up within a few days of signing. Defense awards are published about 90 days late, so use 120 or more for them.

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

Only awards worth at least this much, for example 100000. Leave at 0 for any amount.

## `newAwardsOnly` (type: `boolean`):

Only contracts first signed in this window. Turn off to also include changes to older contracts, such as option years and extensions.

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

Order of the results.

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

Remembers what earlier runs with the same filters returned and skips it. Use this with a daily or weekly schedule.

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

The most awards to return. You are charged per award, so this also caps what a run can cost.

## Actor input object example

```json
{
  "keywords": [
    "janitorial",
    "custodial"
  ],
  "awardedWithinDays": 60,
  "minAmount": 0,
  "newAwardsOnly": true,
  "sortBy": "date",
  "onlyNew": false,
  "maxItems": 25
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `digest` (type: `string`):

No description

## `summary` (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 = {
    "keywords": [
        "janitorial",
        "custodial"
    ],
    "awardedWithinDays": 60,
    "maxItems": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("datapenguin/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 = {
    "keywords": [
        "janitorial",
        "custodial",
    ],
    "awardedWithinDays": 60,
    "maxItems": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("datapenguin/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 '{
  "keywords": [
    "janitorial",
    "custodial"
  ],
  "awardedWithinDays": 60,
  "maxItems": 25
}' |
apify call datapenguin/federal-contract-awards --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,datapenguin/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/4I3o9zVU5Dq7gLqYW/builds/MMKnxtbAbFteXjxG8/openapi.json
