# USAspending Scraper: New Federal Contract Awards Feed (`fecklesspleb/usaspending-new-awards-feed`) Actor

New U.S. federal contract, IDV and grant awards from the official USAspending.gov API: winner, UEI, amount, agency, NAICS, PSC, set-aside, place of performance. Daily feed with dedupe and filters. Not affiliated with USAspending.gov.

- **URL**: https://apify.com/fecklesspleb/usaspending-new-awards-feed.md
- **Developed by:** [Scott Williams](https://apify.com/fecklesspleb) (community)
- **Categories:** Business, Lead generation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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 Scraper: New Federal Contract Awards Feed

> Source: USAspending.gov, U.S. Department of the Treasury (Bureau of the Fiscal Service). **This Actor is independent. It is not affiliated with or endorsed by USAspending.gov or the U.S. Government.**

Get the **newest U.S. federal contract, IDV and grant awards** from the official USAspending.gov API, one clean record per award:
the **winner** (name, UEI, parent company, business categories such as Small Business), the **amount** and ceiling, the
**awarding agency, sub-agency and office**, NAICS and PSC codes, **set-aside**, extent competed, **number of offers**, pricing type,
solicitation ID, place of performance and period of performance. Each record links to its official USAspending award page.

Typical uses: a daily **"who just won" federal contract award alert** for a business-development team, teaming and subcontracting
leads, competitor tracking by NAICS code or agency, local award news for one state, and grant-award tracking by Assistance Listing.

**Not the same as SAM.gov opportunities:** these are awards already made (who won), not open solicitations.

### How it works

- **Daily feed** (default): awards **signed** in the last `lookbackDays` days (default 7, up to 180, U.S. Eastern dates). Each award
  is delivered **once**; the memory is kept per `stateKey`. Schedule it daily.
- **Date range:** awards signed between two dates (from 2007-10-01), for backfills.
- **Award types:** contracts (definitive contracts, purchase orders, delivery orders, BPA calls), IDVs (GWACs, IDIQs, BPAs, FSS
  schedules) and grants (block, formula, project grants and cooperative agreements). Loans, direct payments and insurance are not
  offered, because many of them go to private individuals.
- **Filters:** place-of-performance state, winner's state, NAICS prefixes, PSC prefixes, Assistance Listing numbers (grants),
  awarding agency (name, abbreviation or code, checked against USAspending's agency list), keywords and amount range.
- **Detail** (on by default): one extra API call per award adds the winner's address and business categories, parent company,
  set-aside, competition, offers, pricing type, solicitation ID and period of performance.
- **Polite by design:** at most 2 requests a second, with back-off on 429 and 5xx responses and an immediate stop on 403.

#### Why look back 7 days? Reporting lag

Awards reach USAspending days or weeks after they are signed, and FPDS publishes Department of Defense contract awards with a
90-day delay. The default 7-day window with dedupe catches awards reported a few days late; raise `lookbackDays` (up to 180) to
also catch delayed DoD awards. Each award is still delivered and charged once.

Award **detail** is often published a few days after an award first shows in search. In the daily feed, an award whose detail is
not ready yet is held back (not charged, not remembered) and delivered with detail on a later run. An award that would fall out of
the window first is delivered without detail (`detailFetched: false`).

### Input example

```json
{
  "mode": "daily_feed",
  "lookbackDays": 7,
  "awardTypes": ["contracts"],
  "placeOfPerformanceStates": ["FL"],
  "naicsCodes": ["5415"],
  "maxItems": 25
}
```

### Output example

A contract award from a run on 2026-10-31 (Florida, contracts, last 7 days):

```json
{
  "source": "USAspending.gov",
  "generatedInternalId": "CONT_AWD_80NSSC27C0044_8000_-NONE-_-NONE-",
  "awardId": "80NSSC27C0044",
  "awardCategory": "contract",
  "awardType": "D",
  "awardTypeDescription": "DEFINITIVE CONTRACT",
  "description": "SBIR PHASE II - WIRELESS INSTRUMENTATION FOR SENSING OF PARACHUTE SYSTEMS (WISPS)",
  "dateSigned": "2026-10-29",
  "startDate": "2026-11-03",
  "endDate": "2028-11-03",
  "awardAmount": 1274999.0,
  "baseAndAllOptionsValue": 1274999.0,
  "currency": "USD",
  "recipientName": "INTERDISCIPLINARY CONSULTING CORP",
  "recipientUei": "J6X8X1NF2DP3",
  "recipientType": "organization",
  "businessCategories": ["Small Business", "Manufacturer of Goods", "U.S.-Owned Business"],
  "awardingAgency": "National Aeronautics and Space Administration",
  "awardingOffice": "NASA SHARED SERVICES CENTER",
  "naicsCode": "541715",
  "pscCode": "AJ14",
  "placeOfPerformance": {"city": "GAINESVILLE", "stateCode": "FL", "zip5": "32653", "congressionalDistrict": "FL-03"},
  "extentCompeted": "FULL AND OPEN COMPETITION AFTER EXCLUSION OF SOURCES",
  "setAside": "SMALL BUSINESS SET ASIDE - TOTAL",
  "pricingType": "FIRM FIXED PRICE",
  "detailFetched": true,
  "sourceUrl": "https://www.usaspending.gov/award/CONT_AWD_80NSSC27C0044_8000_-NONE-_-NONE-"
}
```

Some fields and list entries are left out above for space. `sample_output.json` has full records.

**All fields:** `source`, `generatedInternalId`, `awardId`, `awardCategory`, `awardType`, `awardTypeDescription`, `description`,
`dateSigned`, `startDate`, `endDate`, `potentialEndDate`, `lastDateToOrder`, `awardAmount`, `totalObligation`,
`baseAndAllOptionsValue`, `currency`, `recipientName`, `recipientUei`, `parentRecipientName`, `parentRecipientUei`,
`recipientType`, `businessCategories`, `recipientLocation`, `recipientProfileUrl`, `awardingAgency`, `awardingSubAgency`,
`awardingOffice`, `fundingAgency`, `naicsCode`, `naicsDescription`, `pscCode`, `pscDescription`, `assistanceListings`,
`placeOfPerformance`, `solicitationId`, `extentCompeted`, `setAside`, `numberOfOffersReceived`, `pricingType`, `parentAwardId`,
`parentAwardInternalId`, `fundingOpportunityNumber`, `lastModifiedDate`, `detailFetched`, `sourceUrl`, `apiUrl`, `attribution`,
`scrapedAt`, `parseError`.

A run summary (counts, skips, held-back awards, the API's last-updated date) is saved as `RUN_SUMMARY` in the default key-value store.

### Price

Pay per event: a flat **$0.003 per award** ($3 per 1,000), with or without the detail fields. Two event names appear on your bill,
`award` (with detail) and `award-basic` (without), both $0.003, so you can see how many records had detail. The Actor sets no start
fee. Records that could not be parsed are saved free.

Empty input `{}` and the prefilled input return at most **3 awards** (the `maxItems` default), so they cost at most $0.009. Raise
`maxItems` for a full daily feed. `maxItems` and the run's maximum cost setting cap your spend.

### Privacy

- Awards to **private individuals** are skipped, and so are recipients USAspending masks ("REDACTED DUE TO PII",
  "MULTIPLE RECIPIENTS", "INDIVIDUAL RECIPIENT").
- **Executive compensation names are never output.**
- A street address is included only for organisations. **Sole proprietors** keep their business name, city, state and ZIP but no
  street address.
- If you contact award winners, you are responsible for following the law that applies to you, for example CAN-SPAM for e-mail
  and the TCPA for calls and texts.

### FAQ and limits

- **Do I need a USAspending API key?** No. api.usaspending.gov is public and keyless.
- **Why is `setAside` null?** The contract had none recorded, or the award was delivered without detail.
- **Amounts:** `awardAmount` is the obligated amount from search; `baseAndAllOptionsValue` is the ceiling including options.
- **Unknown agency names** stop the run with a message; use e.g. "Department of Defense", "DOD", "VA" or the 3-digit code.
- Award data is as reported by agencies and can change later (modifications, corrections).
- **Source down:** if USAspending.gov is unreachable or keeps answering with errors and no records were saved, the run writes one free status record (`recordType: "status"`, not charged) instead of failing.
- **Nothing new:** if "only new since last run" is on and every award found was already delivered by an earlier run with the same `stateKey`, the run writes one free status record (`recordType: "status"`, `status: "warning"`, message starting "Not charged: no new items since last run") instead of an empty dataset.

### Data source and attribution

Data comes from the USAspending.gov public API (api.usaspending.gov). Source: USAspending.gov, U.S. Department of the Treasury
(Bureau of the Fiscal Service). Federal spending data are published under the DATA Act; works of the U.S. Government are not
subject to copyright in the U.S. (17 U.S.C. 105). Values are passed on unchanged except for formatting. This Actor is not affiliated
with or endorsed by USAspending.gov or the U.S. Government.

# Changelog

This Actor's version history is a separate document: https://apify.com/fecklesspleb/usaspending-new-awards-feed/changelog.md

# Actor input Schema

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

Daily feed is built for a daily schedule and skips awards already delivered. Date range is for backfills.

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

Daily feed: include awards signed in the last N days. 7 is recommended because agencies report awards days late (DoD up to 90 days); dedupe means you pay for each award once.

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

Date range mode: first signing date (YYYY-MM-DD, 2007-10-01 or later).

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

Date range mode: last signing date (YYYY-MM-DD). Defaults to today.

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

Loans, direct payments and insurance are not offered because many go to private individuals.

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

Two-letter state codes, e.g. FL, TX, DC. Empty = all.

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

Two-letter state codes of the winner's address. Empty = all.

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

2-6 digit NAICS codes; prefixes match (5415 matches 541511, 541512 ...). Contracts and IDVs only.

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

Product and Service Codes or prefixes, e.g. D302, R4, 65. Contracts and IDVs only.

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

Grant program numbers such as 93.866 or 20.205. Grants only.

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

Top-tier agency names, abbreviations or codes, e.g. Department of Defense, DHS, 036. Unknown names stop the run with a list of valid ones.

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

Words searched in award descriptions and recipient names (3+ characters each). Any keyword matches.

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

Only awards at or above this obligated amount.

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

Only awards at or below this obligated amount.

## `includeDetail` (type: `boolean`):

Adds the winner's address and business categories, set-aside, competition, offers received, pricing type, solicitation ID, parent recipient and period of performance (one extra API call per award, billed as 'award'). Off = summary fields only (billed as 'award-basic').

## `onlyNewSinceLastRun` (type: `string`):

Skip awards this Actor already delivered (remembered in a named key-value store).

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

Use different names to keep separate 'already delivered' memories for different schedules.

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

Stop after saving this many awards (default 3, at most $0.009). Raise it for a full daily feed.

## `maxPages` (type: `integer`):

Safety cap on 100-result search pages per award type.

## Actor input object example

```json
{
  "mode": "daily_feed",
  "lookbackDays": 7,
  "awardTypes": [
    "contracts"
  ],
  "placeOfPerformanceStates": [
    "FL"
  ],
  "includeDetail": true,
  "onlyNewSinceLastRun": "auto",
  "stateKey": "default",
  "maxItems": 3,
  "maxPages": 200
}
```

# Actor output Schema

## `awards` (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 = {
    "awardTypes": [
        "contracts"
    ],
    "placeOfPerformanceStates": [
        "FL"
    ],
    "maxItems": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("fecklesspleb/usaspending-new-awards-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 = {
    "awardTypes": ["contracts"],
    "placeOfPerformanceStates": ["FL"],
    "maxItems": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("fecklesspleb/usaspending-new-awards-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 '{
  "awardTypes": [
    "contracts"
  ],
  "placeOfPerformanceStates": [
    "FL"
  ],
  "maxItems": 3
}' |
apify call fecklesspleb/usaspending-new-awards-feed --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,fecklesspleb/usaspending-new-awards-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/c1gfnR6EjmLDGrz6s/builds/VuOlW4FJeyR1AChFW/openapi.json
