# Emerging Federal Contractor Radar (`lukehunter/emerging-federal-contractor-radar`) Actor

New US federal contract awards from USAspending, filterable by NAICS code and awarding agency, flagged by the winner's lifetime award history: first-time federal contractors and small emerging vendors. No API key needed.

- **URL**: https://apify.com/lukehunter/emerging-federal-contractor-radar.md
- **Developed by:** [Luke Hunter](https://apify.com/lukehunter) (community)
- **Categories:** Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$25.00 / 1,000 emerging awardees

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

## Emerging Federal Contractor Radar

**For subcontracting teams, GovCon sales, capture managers and small-business advocates who want to reach new federal entrants before competitors do.** One run returns new US federal contract awards, flagged by the winner's lifetime award history, so you see first-time and small emerging contractors instead of the same twenty incumbents every list already knows about.
Pay-per-result: **$0.025 per delivered awardee — 100 leads = $2.50.**
Try it free with Apify's monthly platform credit.

Federal contract award notices exist (FPDS/USAspending, SAM.gov), but they don't tell you whether a winner is brand new to federal work or a decades-old incumbent. This Actor calls USAspending's public, keyless `spending_by_award` search for new prime contract awards, then looks up each winner's whole-of-government lifetime transaction history to classify them as a first-time winner, a small/emerging contractor, or an established one.

### Quick start (2 minutes)

1. Open the **Input** tab (no USAspending account or API key needed — the source is public).
2. Use this prefill for new small IT-services awardees from the VA:

```json
{
  "sinceDays": 14,
  "stages": ["FIRST_AWARD", "EMERGING"],
  "minAwardAmount": 25000,
  "naicsCodes": ["5415"],
  "awardingAgencies": ["Department of Veterans Affairs"],
  "maxItems": 250
}
```

3. Click **Start**. Export the emerging-contractor list to CSV/JSON, or pull it via API into your CRM.

### Use cases

- **Subcontracting and teaming teams** finding small/first-time primes who may need a subcontractor's capacity or past performance.
- **GovCon sales and capture managers** reaching a contractor right after their first federal win, before they've built out a vendor list.
- **Small-business advocacy and outreach programs** identifying genuinely new entrants to route support and resources to.
- **Market researchers** tracking which agencies and NAICS codes are bringing in new, non-incumbent contractors.

### Run it weekly

1. Set your `stages`/`naicsCodes`/`awardingAgencies` filters, then click **Schedule** on the run page (or create one under **Schedules** in the Apify Console).
2. A weekly run with `sinceDays: 7-14` catches civilian-agency awards quickly; DoD awards can lag up to 90 days (see Limitations), so widen the window occasionally to catch those.
3. Keep `awardId` as your dedupe key across runs — it's stable, so a scheduled pull never double-lists the same award.

### Awardee stages — the exact cutoffs

Every row's `awardeeStage` is one of three values, computed from the winner's **lifetime, whole-of-government** transaction count and obligated dollars (from USAspending's recipient profile), not just this run's own numbers:

- **`FIRST_AWARD`** — the recipient has 1–2 lifetime federal transactions, **and** essentially all of its lifetime obligated dollars (≥ 99.9%) are accounted for by awards in this run's own window. In other words: this looks like the recipient's actual first (or second) federal contract, appearing for the first time in this scan.
- **`EMERGING`** — lifetime obligated dollars under **$1,000,000**, **or** 10 or fewer lifetime transactions (whichever is true), and not already classified `FIRST_AWARD`.
- **`ESTABLISHED`** — everyone else: an incumbent with meaningful transaction history and dollar volume.

These cutoffs are fixed and are not configurable input — they are the whole point of the Actor. `stages` (default `FIRST_AWARD` + `EMERGING`) lets you pick which of the three to receive; `ESTABLISHED` is available if you want it too.

### Example input

```json
{
  "sinceDays": 14,
  "stages": ["FIRST_AWARD", "EMERGING"],
  "minAwardAmount": 25000,
  "naicsCodes": ["5415"],
  "awardingAgencies": ["Department of Veterans Affairs"],
  "maxItems": 250
}
```

### Example output

Real output, captured live from USAspending on 2026-09-24:

```json
{
  "awardId": "1305M326P0406",
  "generatedInternalId": "CONT_AWD_1305M326P0406_1330_-NONE-_-NONE-",
  "usaspendingUrl": "https://www.usaspending.gov/award/CONT_AWD_1305M326P0406_1330_-NONE-_-NONE-",
  "recipientName": "INTEGRATED MONITORING, INC.",
  "recipientUei": "SBZHMUVQ9CB7",
  "recipientId": "d8ab4d27-776c-5d15-a94d-4fde0ac49cca-C",
  "awardAmount": 434727.8,
  "awardingAgency": "Department of Commerce",
  "awardingSubAgency": "National Oceanic and Atmospheric Administration",
  "naics": {"code": "541511", "description": "CUSTOM COMPUTER PROGRAMMING SERVICES"},
  "contractAwardType": "PURCHASE ORDER",
  "startDate": "2027-01-01",
  "businessTypes": ["category_business", "corporate_entity_not_tax_exempt", "manufacturer_of_goods", "small_business"],
  "lifetimeTransactions": 1,
  "lifetimeObligatedUsd": 434727.8,
  "awardeeStage": "FIRST_AWARD",
  "awardShareOfLifetime": 1.0,
  "retrievedAt": "2026-09-24T18:00:00.000Z"
}
```

| Field | Value |
|---|---|
| `recipientName` | `INTEGRATED MONITORING, INC.` |
| `awardAmount` | `434727.8` |
| `awardingAgency` | `Department of Commerce` |
| `awardingSubAgency` | `National Oceanic and Atmospheric Administration` |
| `naics.description` | `CUSTOM COMPUTER PROGRAMMING SERVICES` |
| `contractAwardType` | `PURCHASE ORDER` |
| `lifetimeTransactions` | `1` |
| `awardeeStage` | `FIRST_AWARD` |
| `awardShareOfLifetime` | `1.0` |

### Input

| Field | Default | Meaning |
|---|---:|---|
| `sinceDays` | 7 | New awards (first action, not modifications) from the last 1–30 days. Civilian agencies post within days; DoD awards can lag up to 90 days, so a short window is mostly civilian. |
| `stages` | `["FIRST_AWARD","EMERGING"]` | Any of `FIRST_AWARD`, `EMERGING`, `ESTABLISHED` — see cutoffs above. |
| `minAwardAmount` | 25000 | Only awards obligated at least this many US dollars. |
| `naicsCodes` | `[]` (all) | Optional NAICS codes of exactly 2, 4 or 6 digits — USAspending's own filter accepts no other length. A shorter code matches every code that starts with it. |
| `awardingAgencies` | `[]` (all) | Optional top-tier awarding agency names, spelled exactly as USAspending does (e.g. "Department of Veterans Affairs"). |
| `maxItems` | 250 | Hard cap on delivered (and billed) rows. Also bounds the work per run: at most 8 × `maxItems` recipient profile lookups (capped at 2,000). |

### Output fields

| Field | Meaning |
|---|---|
| `awardId`, `generatedInternalId`, `usaspendingUrl` | The award's own USAspending identifiers and a direct link to its public award page. |
| `recipientName`, `recipientUei`, `recipientId` | The winning business's name, its SAM Unique Entity ID, and USAspending's internal recipient key. |
| `awardAmount`, `awardingAgency`, `awardingSubAgency`, `naics`, `contractAwardType`, `startDate` | The award itself: obligated amount, awarding agency/sub-agency, NAICS code+description, contract type (BPA call, purchase order, delivery order or definitive contract), and start date. |
| `businessTypes` | The recipient's business-category tags from USAspending, used to confirm it is an organisation (see Privacy below). |
| `lifetimeTransactions`, `lifetimeObligatedUsd` | **Derived**: the recipient's whole-of-government lifetime transaction count and obligated dollars, from its USAspending recipient profile. |
| `awardeeStage` | **Derived**: `FIRST_AWARD`, `EMERGING` or `ESTABLISHED` — see cutoffs above. |
| `awardShareOfLifetime` | **Derived**: this award's amount as a fraction of the recipient's lifetime obligated dollars (`null` only if lifetime obligated is $0). |
| `retrievedAt` | When this row was fetched. |

### Privacy: businesses only, fail-closed

USAspending lets a contracting officer record a federal awardee as an individual or a sole proprietorship (their `business_types` includes tags like `individuals` or `sole_proprietorship`). This Actor **excludes** any recipient whose `business_types`:

- is missing, empty, or contains a malformed (non-string or blank) entry, or
- indicates an individual, sole proprietorship or self-employed person, or
- comes with a redacted/generic name (e.g. "REDACTED", "Multiple Recipients").

This is fail-**closed**: when we cannot confirm a recipient is a real organisation, it is dropped rather than delivered. One consequence, deliberate and documented here: a real small-business LLC that also self-certifies `sole_proprietorship` as its IRS tax classification (common in USAspending data) is excluded too, even though it is a legitimate corporate entity — we chose the safer false-negative over any risk of surfacing a natural person's contract as a sales lead.

### Pricing and cost control

Pay-per-event: **$0.025 per delivered emerging awardee**, benchmarked against comparable USAspending-based lead-generation Actors on the Apify Store that charge per delivered row with no lifetime-history classification.

- `maxItems` is a hard cap on both delivered rows and the recipient-lookup work this run can do.
- Delivered rows always equal charged rows: if your run's own "Maximum cost per run" budget runs out mid-run, the Actor stops, finishes `SUCCEEDED`, and its status message says exactly how many awardees were delivered and that only those were charged — never a silent under-charge, and never a row delivered for free that should have been charged.
- If the Actor is not monetized (e.g. running it yourself), every matching row is delivered free.
- If a platform migration restarts the run mid-delivery, rows already delivered and charged are never delivered or charged again.

### Limitations — read before you build automation on this

- **DoD awards lag.** The Department of Defense can take up to 90 days to post awards to USAspending; a short `sinceDays` window mostly surfaces civilian-agency awards.
- **`FIRST_AWARD` is a proxy, not certainty.** USAspending's recipient profile gives lifetime totals, not per-transaction dates, so "all of this run's dollars are essentially all of the recipient's lifetime dollars" (≥ 99.9% share) stands in for "this is genuinely their first award." A recipient whose only prior transaction was tiny enough to round away could be misclassified.
- **Recipient lookups are capped.** At most 8 × `maxItems` (2,000 max) new recipient profiles are looked up per run; once that cap is hit, further awards in the scanned window are excluded rather than guessed at, and the run's log/status message says so.
- **A bad or unknown `recipient_id`** (a USAspending data gap) excludes that one award rather than failing the whole run.

### FAQ

**Do I need a USAspending API key?** No. `api.usaspending.gov` is public and keyless.

**Why did a contractor I know about not show up?** Either its award fell outside `sinceDays`, its business type indicates an individual/sole proprietor (excluded, see Privacy), the recipient lookup budget was reached, or it doesn't meet the `stages`/`minAwardAmount`/`naicsCodes`/`awardingAgencies` filters you set.

**Can I get everything since a specific date?** `sinceDays` covers up to 30 days per run; for a longer backfill, run it repeatedly with different windows, or schedule it daily and de-duplicate on `awardId`.

**Does this cover subcontracts?** No — only prime contract awards (`award_type_codes` A–D: BPA call, purchase order, delivery order, definitive contract).

### Related Actors

Other data tools from the same developer, built to the same standard: official or public sources, hard cost caps, and honest documentation of limits.

- **[Federal Register Rule Effective-Date Radar](https://apify.com/lukehunter/federal-rule-effective-date-radar)**: final federal rules about to take effect, with citations, dockets and urgency.
- **[Chicago Contract Recompete & Extension Radar](https://apify.com/lukehunter/chicago-contract-expiration-radar)**: expiring City of Chicago contracts with extension history, for recompete prospecting.
- **[Bank Branch Closings & Merger Radar (FDIC)](https://apify.com/lukehunter/bank-branch-merger-radar)**: new US bank branch closings, openings and mergers from the FDIC.
- **[Chicago New Business License Radar](https://apify.com/lukehunter/chicago-new-business-license-radar)**: newly licensed Chicago businesses as opening leads, grouped by category.
- **[NYC FDNY Contractor Leads & Hearing Radar](https://apify.com/lukehunter/fdny-violation-radar)**: fresh NYC fire-code summonses routed by remediation trade, with hearing dates.
- **[RCRA Enforcement Response Leads](https://apify.com/lukehunter/rcra-enforcement-radar)**: new EPA hazardous-waste (RCRA) enforcement actions and penalties, by state.
- **[Hospital Price Transparency Enforcement Leads](https://apify.com/lukehunter/hospital-price-transparency-enforcement-leads)**: hospitals with recent CMS price transparency warning notices, CAP requests and CMP notices.
- **[Hospital Ownership Change Radar](https://apify.com/lukehunter/hospital-chow-radar)**: hospitals that just changed owner, with buyer, seller and effective date from CMS filings.
- **[New Healthcare Organization NPI Radar](https://apify.com/lukehunter/new-healthcare-organization-npi-radar)**: newly registered healthcare organizations from CMS's weekly NPI file, by provider type.
- **[County Multifamily Building Permits Surge Radar](https://apify.com/lukehunter/county-multifamily-permit-surge-radar)**: U.S. counties where 5+ unit apartment permits are surging year over year.
- **[Zillow ZIP Code Property Search Scraper](https://apify.com/lukehunter/zillow-zip-scraper)**: for-sale listings by ZIP code with prices, price cuts and days on Zillow.
- **[Walmart Category Scraper](https://apify.com/lukehunter/walmart-category-scraper)**: product names, prices, was-prices and ratings from Walmart category pages.

# Actor input Schema

## `sinceDays` (type: `integer`):

Look at new federal contract awards (base awards, not modifications) whose first action falls in the last N days, 1-30, default 7. USAspending publishes civilian awards within days and DoD awards with a 90-day delay, so short windows are mostly civilian agencies.

## `stages` (type: `array`):

FIRST\_AWARD: the recipient has 1-2 lifetime federal transactions and all of its lifetime obligated dollars are in new awards from this window. EMERGING: lifetime obligations under $1,000,000 or 10 or fewer lifetime transactions. ESTABLISHED: everyone else.

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

Only awards whose obligated amount is at least this many US dollars.

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

Optional NAICS codes of exactly 2, 4 or 6 digits (USAspending's filter accepts no other length), up to 50 codes; a shorter code matches every code that starts with it (e.g. 5415 matches 541511, 541512, ...). Leave empty for all industries.

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

Optional top-tier awarding agency names exactly as USAspending spells them, e.g. "Department of Veterans Affairs", "Department of Homeland Security", "General Services Administration". Up to 20 agencies. Leave empty for all agencies.

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

Hard cap on delivered (and billed) rows, 1-2000, default 250. It also bounds the work per run: the Actor looks up at most 8 x maxItems recipient profiles (max 2,000).

## Actor input object example

```json
{
  "sinceDays": 7,
  "stages": [
    "FIRST_AWARD",
    "EMERGING"
  ],
  "minAwardAmount": 25000,
  "naicsCodes": [],
  "awardingAgencies": [],
  "maxItems": 15
}
```

# Actor output Schema

## `awardees` (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 = {
    "sinceDays": 7,
    "stages": [
        "FIRST_AWARD",
        "EMERGING"
    ],
    "minAwardAmount": 25000,
    "maxItems": 15
};

// Run the Actor and wait for it to finish
const run = await client.actor("lukehunter/emerging-federal-contractor-radar").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 = {
    "sinceDays": 7,
    "stages": [
        "FIRST_AWARD",
        "EMERGING",
    ],
    "minAwardAmount": 25000,
    "maxItems": 15,
}

# Run the Actor and wait for it to finish
run = client.actor("lukehunter/emerging-federal-contractor-radar").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 '{
  "sinceDays": 7,
  "stages": [
    "FIRST_AWARD",
    "EMERGING"
  ],
  "minAwardAmount": 25000,
  "maxItems": 15
}' |
apify call lukehunter/emerging-federal-contractor-radar --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,lukehunter/emerging-federal-contractor-radar"
        }
    }
}
```

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/FRVhfkUxiDMG50qPc/builds/C69WyAOBkmdgdVuYf/openapi.json
