# SBIR STTR Awards Scraper: Funded Tech Company Leads (`agents001/sbir-sttr-awards-feed`) Actor

Returns new SBIR STTR awards to small tech companies, both SBIR grants and contracts, from NIH, NSF and FPDS: company, UEI, city, state, agency, branch, phase, amount, award date, topic, short abstract, ownership flags and link. Company-level only, no contact names.

- **URL**: https://apify.com/agents001/sbir-sttr-awards-feed.md
- **Developed by:** [Mike Ross](https://apify.com/agents001) (community)
- **Categories:** Lead generation, Business
- **Security:** Limited permissions
- **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

## SBIR STTR Awards Scraper: Funded Tech Company Leads

This SBIR STTR awards scraper returns new SBIR grants and contracts to small tech companies that just won US government R\&D money, as clean company-level records: **one record per SBIR or STTR award** with company name, UEI, city, state, agency, branch, program, phase, award amount, award date, title, topic, a short abstract, ownership flags (woman-owned, HUBZone, veteran-owned, minority-owned) where published, and a link to the official award page.

Use it to:

- Build a list of small tech and biotech companies that just received non-dilutive funding.
- Track SBIR grants and contracts by agency, phase, state or technology keyword.
- Find Phase I winners who will compete for Phase II and III, for consulting and grant writing.
- Send new SBIR and STTR awards to a CRM, Google Sheets or Slack every week.

SBIR and STTR awards are a strong buying signal. A company that has just received a Phase I award has fresh, non-dilutive cash and a project to deliver. A Phase II or Phase III award means a larger budget, hiring and new suppliers.

The Actor reads three official US government sources live on every run:

- **NIH RePORTER** for Department of Health and Human Services grants (NIH, FDA, CDC)
- **NSF Awards** for National Science Foundation grants
- **FPDS** (Federal Procurement Data System) for SBIR and STTR contracts of every agency: Defense (Air Force, Army, Navy, DARPA and others), NASA, Homeland Security, HHS, Commerce, Energy, Transportation and more

Records are company-level only. Principal investigator, program officer and contact names, emails and phone numbers are never returned.

### What you get

| Field | Example |
|---|---|
| `companyName`, `uei`, `duns`, `cageCode` | `PRIMARY BIOSCIENCE, INC.`, `L3NSPJDTDD28` |
| `city`, `state`, `zip`, `country` | `Seattle`, `WA`, `98117`, `US` |
| `agency`, `agencyName`, `branch`, `office` | `DOD`, `Department of Defense`, `DARPA` |
| `program`, `phase`, `phaseCode` | `STTR`, `Phase II`, `ST2` |
| `awardType`, `awardAction` | `Contract`, `Definitive contract` |
| `awardAmount`, `obligatedAmount` | `1799870`, `939084` (USD) |
| `awardDate`, `awardYear`, `startDate`, `endDate` | `2026-09-23`, `2026` |
| `awardTitle`, `abstract`, `topic`, `solicitation` | Project title, shortened abstract, NSF program or product and service description |
| `naicsCode`, `naicsDescription` | `541714`, `Research and Development in Biotechnology` (contracts) |
| `smallBusiness`, `womanOwned`, `hubzoneOwned`, `veteranOwned`, `minorityOwned` | `true` / `false` (contracts) |
| `awardUrl` | NIH RePORTER, NSF award search or USAspending page |
| `isNew`, `firstSeenAt` | Whether the award is new since the previous run with the same filters |

The Output tab has two views: **Awards** and **Company firmographics**.

Phases are `Phase I`, `Phase II`, `Phase III` (contracts only), `Fast-Track` (Phase I and II in one award) and `Commercialization` (NIH SB1 and NSF commercialization awards).

### Who it is for

- **Sales teams selling to small tech and biotech companies**: software, lab equipment, cloud, compliance, recruiting, banking, insurance, office space.
- **Government contracting consultants and grant writers** looking for companies that have entered the SBIR pipeline and will compete for Phase II and III.
- **Investors and corporate development teams** tracking deep tech companies with government validation, by technology and state.
- **Economic development groups and universities** following SBIR activity in their region.

### Quick start

1. Click **Start** with the default input. You get up to 500 of the most recent SBIR and STTR awards from the last 90 days, newest first.
2. Narrow it down: agencies such as `DOD`, `Air Force`, `NIH` or `NASA`, phases, company states, keywords such as `battery` or `machine learning`, and a minimum amount.
3. Schedule it daily or weekly with **Only awards not seen in previous runs** switched on, and send the new awards to your CRM, Google Sheets, Slack or email with an Apify integration or webhook.

### Input

| Field | What it does | Default |
|---|---|---|
| `agencies` | Agencies or branches, for example `DOD`, `Air Force`, `Navy`, `Army`, `DARPA`, `NIH`, `HHS`, `NSF`, `NASA`, `DOE`, `DHS` | all |
| `programs` | `SBIR`, `STTR` | both |
| `phases` | `Phase I`, `Phase II`, `Phase III`, `Fast-Track`, `Commercialization` | all |
| `states` | Two-letter state codes of the company address | all |
| `keywords` | Title, abstract, topic, industry or company name contains any of these | none |
| `minAmount` | Minimum award amount in USD | 0 |
| `daysBack` | Award date window ending today | 90 |
| `dateFrom`, `dateTo` | Exact award date window (YYYY-MM-DD). Overrides `daysBack` | none |
| `awardYears` | Calendar years, used when no dates are set | none |
| `sources` | `nih`, `nsf`, `fpds` | all three |
| `includeNihContinuations` | Also return yearly continuation payments of multi-year NIH awards | false |
| `abstractLength` | Shorten abstracts to this many characters. `0` leaves them out | 500 |
| `onlyNew` | Only awards not returned by a previous run with the same filters | false |
| `maxItems` | At most this many award records, newest first. `0` means no limit | 500 |

Example input for a weekly lead list of Defense and NASA Phase II awards in three states:

```json
{
  "agencies": ["DOD", "NASA"],
  "phases": ["Phase II", "Phase III"],
  "states": ["CA", "CO", "TX"],
  "minAmount": 500000,
  "onlyNew": true
}
```

### Output example

```json
{
  "recordId": "fpds:1406:140D0426C0111",
  "source": "FPDS",
  "awardId": "140D0426C0111",
  "program": "STTR",
  "phase": "Phase II",
  "phaseCode": "ST2",
  "awardType": "Contract",
  "awardAction": "Definitive contract",
  "companyName": "PRIMARY BIOSCIENCE, INC.",
  "uei": "L3NSPJDTDD28",
  "cageCode": "20RD3",
  "city": "Seattle",
  "state": "WA",
  "zip": "98117",
  "country": "US",
  "agency": "DOD",
  "agencyName": "Dept of Defense",
  "branch": "DARPA",
  "awardTitle": "STTR Phase II - Development of an Ultra-Low Concentration Biosensor for Use in Protein Sequencing",
  "naicsCode": "541714",
  "naicsDescription": "Research and Development in Biotechnology (except Nanobiotechnology)",
  "awardAmount": 1799870.0,
  "obligatedAmount": 939084.0,
  "awardDate": "2026-09-23",
  "awardYear": 2026,
  "smallBusiness": true,
  "womanOwned": true,
  "hubzoneOwned": false,
  "veteranOwned": false,
  "minorityOwned": false,
  "awardUrl": "https://www.usaspending.gov/award/CONT_AWD_140D0426C0111_1406_-NONE-_-NONE-",
  "isNew": true
}
```

A run report is saved in the key-value store as `RUN_SUMMARY`: records returned per source, the date window, and any source that could not be read.

### Pricing

This Actor uses **pay per event** pricing, with platform usage included:

- **$3 per 1,000 award records** (`award-record` event) on the free plan
- **$2.50 per 1,000** on Bronze, **$2 per 1,000** on Silver, **$1.50 per 1,000** on Gold and above

You only pay for award records saved to your dataset, so filters, `onlyNew` and `maxItems` keep costs down. A weekly `onlyNew` run across all agencies typically returns a few hundred new awards. 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 has already returned for these filters in a key-value store in your account called `agents001-sbir-sttr-awards-feed-state`. The next run only returns awards that are not on that list. The first run returns everything that matches. Changing the filters starts a fresh history; changing only the date window keeps it, so a rolling `daysBack` window works well. The store holds award ids and dates 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.

### Data sources and freshness

- **NIH RePORTER** (api.reporter.nih.gov), the NIH's public API for HHS research awards. Awards usually appear within days of the notice of award.
- **NSF Awards API** (api.nsf.gov), the National Science Foundation's public award search API.
- **FPDS ATOM feed** (fpds.gov), the public feed of the Federal Procurement Data System. Contract awards are reported within days, except Department of Defense contracts, which are published about 90 days after signing by law. That is why the default window is 90 days.

All three are US federal government works and are in the public domain. Data is provided by NIH, NSF and GSA; please credit "NIH RePORTER, NSF Awards and FPDS" when you republish it.

The official SBIR.gov award API was under maintenance when this Actor was built, so the Actor reads the agencies' own systems directly. Website and employee count, which only SBIR.gov publishes, are therefore not included. Agencies that award SBIR grants outside NIH and NSF (for example DOE and USDA grants) are not covered; their SBIR contracts are.

### Privacy

The Actor returns company and award information only. It never returns principal investigator, co-investigator, program officer or contact names, emails or phone numbers, including the company phone number published in FPDS. Abstracts are shortened, and email addresses, phone numbers and the names of the people listed on the award are removed from them.

### FAQ

**How fresh is the data?**
Each run reads NIH RePORTER, NSF Awards and FPDS live. Grants and most contracts appear within days. Defense contracts appear about 90 days after signing (see below).

**How much does a typical run cost?**
$3 per 1,000 award records on the free plan, less on paid plans. A default run of up to 500 awards costs at most $1.50, and a weekly `onlyNew` run of a few hundred new awards costs about $1.

**Can I schedule it and get only new awards?**
Yes. Schedule it on Apify and switch on `onlyNew`. Each award is returned and charged once.

**Does it need a login or API key?**
No. All three sources are public government APIs.

**What formats can I export?**
JSON, CSV, Excel and the other Apify dataset formats, or read it through the Apify API.

**Why do I see few Defense Department awards from the last few weeks?**
FPDS publishes Defense contracts about 90 days after signing. Use `daysBack` of 120 or more, or schedule an `onlyNew` run, to collect them as they are released.

**What does the award amount mean?**
For NIH it is the total cost of this award action. For NSF it is the estimated total award. For contracts it is the base and all options value (the contract ceiling); `obligatedAmount` shows what was committed at signing.

**Can the same company appear more than once?**
Yes, one record per award. A company with two awards in the window appears twice.

**Why is `womanOwned` empty for grants?**
Ownership flags come from the contract record in FPDS. NIH and NSF do not publish them.

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

### Disclaimer

This Actor is independent and is not affiliated with, endorsed by or sponsored by the U.S. Small Business Administration, SBIR.gov, the National Institutes of Health, the National Science Foundation, the General Services Administration or any other agency. Agency names are used only to describe the data. Check the official award record before acting on it.

# Actor input Schema

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

Only awards from these agencies or branches, for example DOD, Air Force, Navy, Army, DARPA, NIH, HHS, NSF, NASA, DOE, DHS, USDA. Leave empty for all agencies.

## `programs` (type: `array`):

SBIR, STTR or both. Leave empty for both.

## `phases` (type: `array`):

Only these phases. Phase III awards come from federal contracts (FPDS) only. Leave empty for all phases.

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

Two-letter US state codes of the company address, for example CA, MA, TX. Leave empty for all states.

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

Only awards whose title, abstract, topic, industry or company name contains any of these words or phrases, for example 'machine learning', 'battery', 'quantum'. Case-insensitive.

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

Drop awards below this amount. 0 keeps all amounts.

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

Award date window ending today. Ignored when you set a start or end date, or award years. NIH and FPDS publish some awards weeks after the award date, and Defense Department contracts appear about 90 days after signing, so 90 days is a good default.

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

Optional start date (YYYY-MM-DD). Overrides 'Awards from the last N days'.

## `dateTo` (type: `string`):

Optional end date (YYYY-MM-DD). Defaults to today.

## `awardYears` (type: `array`):

Optional calendar years, for example 2025 and 2026. Used when no dates are set. The window may cover at most 1,100 days.

## `sources` (type: `array`):

Which official sources to read. Leave empty for all three. When you name agencies, sources that cannot hold their awards are skipped automatically.

## `includeNihContinuations` (type: `boolean`):

Also return the yearly non-competing continuation payments of multi-year NIH awards. Off by default, so you get only new awards and competing renewals (Phase II).

## `abstractLength` (type: `integer`):

Shorten abstracts to this many characters. 0 leaves abstracts out. Federal contracts have no abstract.

## `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 or weekly runs. Changing the filters starts a fresh history; changing only the date window keeps it.

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

Stop after this many award records, newest first. 0 means no limit. You pay per award 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 list 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.

## Actor input object example

```json
{
  "agencies": [
    "NIH",
    "NSF",
    "DOD",
    "NASA"
  ],
  "minAmount": 0,
  "daysBack": 90,
  "includeNihContinuations": false,
  "abstractLength": 500,
  "onlyNew": false,
  "maxItems": 500,
  "stateStoreName": "agents001-sbir-sttr-awards-feed-state"
}
```

# 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 = {
    "agencies": [
        "NIH",
        "NSF",
        "DOD",
        "NASA"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("agents001/sbir-sttr-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 = { "agencies": [
        "NIH",
        "NSF",
        "DOD",
        "NASA",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("agents001/sbir-sttr-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 '{
  "agencies": [
    "NIH",
    "NSF",
    "DOD",
    "NASA"
  ]
}' |
apify call agents001/sbir-sttr-awards-feed --silent --output-dataset

```

## MCP server setup

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