# US Federal Grants.gov + Past CFDA Winners & Officer Contacts (`grandiose_envelope_0fj/us-federal-grants-sbir-scraper`) Actor

🔗 \[Entity-Pure Relational LEFT JOIN: Grants.gov Solicitation × Opportunity Details × USAspending.gov CFDA History] 1 Row = 1 Active Federal Grant Opportunity enriched with its Program Officer direct email/phone and past winners of that exact CFDA program.

- **URL**: https://apify.com/grandiose_envelope_0fj/us-federal-grants-sbir-scraper.md
- **Developed by:** [Olive LI](https://apify.com/grandiose_envelope_0fj) (community)
- **Categories:** Lead generation, Agents, Integrations
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.80 / 1,000 cross-joined enriched lead / records

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

## US Federal Grants.gov & SBIR Solicitation Intelligence + USAspending CFDA Incumbents & Program Officer Contacts

> **🔗 \[Entity-Pure Relational LEFT JOIN: Grants.gov Search2 API × Grants.gov Opportunity Details API × NSF/NIH Program Officer Resolution × USAspending.gov Historical CFDA Awards API]**
> **1 Row = 1 Active Federal Grant / Cooperative Agreement Opportunity** enriched with verified Program Officer direct `.gov`/`.mil` contact channels, numeric budget ceilings, and historical past winners of that exact Assistance Listing (CFDA) program.

***

### 🎯 Target B2B Buyer Personas & High-ROI Workflows

1. **Federal Grant Writing & Proposal Consulting Agencies** ($5K–$25K Retainers + Success Fees)
   - **Workflow**: Identify newly posted or forecasted multi-award federal grant cohorts (`expected_awards_count_num >= 10`, `award_ceiling_usd_num >= $250,000`) across NIH, NSF, DOE, USDA, CDC, HRSA, and DoD. Pitch university PIs, deep-tech startups, and non-profits on proposal preparation retainers well ahead of `close_date`.
   - **Plug-and-Play Import**: Import `contact_first_name`, `contact_last_name`, `contact_email`, `agency_clean_name`, and `outreach_icebreaker` directly into **Instantly.ai**, **Smartlead**, or **HubSpot** sequences.
2. **GovCon BD, Capture Teams & R\&D Subcontractors**
   - **Workflow**: Filter by `opportunity_status = "Forecasted"` (`EARLY_FORECAST_SHAPING_WINDOW`) to engage the managing Federal Program Officer before final RFP/NOFO specifications lock, or use `incumbent_past_recipients` (joined from `USAspending.gov` by CFDA # and program topic) to pitch subcontracting and teaming agreements to proven historical winners.
   - **Power Dialer & CRM Enrichment**: Import `contact_phone_e164` (`+1XXXXXXXXXX`), `contact_phone_formatted`, `company_domain`, and pure numeric budget columns (`award_ceiling_usd_num`, `estimated_total_program_funding_num`, `historical_program_spend_num`) into **Orum**, **Nooks**, **Clay.com**, or **Salesforce**.

***

### 🔗 Entity-Pure Relational `LEFT JOIN` Architecture (Zero `UNION ALL`)

| Join Stage | Authoritative Data Source | Join Key | Extracted B2B Intelligence |
| :--- | :--- | :--- | :--- |
| **Base Entity** | **Grants.gov Search API** (`/grantsws/rest/opportunities/search/`) | `opportunity_id_num` | Active `Posted` and `Forecasted` solicitations with future `close_date` (`days_until_close_num > 0`) |
| **`LEFT JOIN 1`** | **Grants.gov Opportunity Details API** (`/grantsws/rest/opportunity/details`) | `oppId` (`opportunity_id_num`) | `award_ceiling_usd_num`, `award_floor_usd_num`, `estimated_total_program_funding_num`, `expected_awards_count_num`, `funding_instrument_type`, and Synopsis/Forecast contact blocks |
| **`LEFT JOIN 2`** | **NSF Solicitation & Awards API (`api.nsf.gov`) + NIH RePORTER API (`api.reporter.nih.gov`)** | `fundingDescLinkUrl` / `ProgEleCode` / `opportunity_number` | Resolves real human Cognizant Program Directors (`contact_first_name`, `contact_last_name`, direct `@nsf.gov` / `@nih.gov` email & phone) when Grants.gov only lists a generic helpdesk |
| **`LEFT JOIN 3`** | **USAspending.gov Awards Search API** (`/api/v2/search/spending_by_award/`) | `cfda_number` (`program_numbers`) + Program Topic Keywords | Deduplicated `incumbent_past_recipients`, `historical_program_spend_num`, `historical_avg_award_usd_num`, and `historical_awards_count_num` |

***

### 📊 Complete 42-Column Buyer-Ready Dataset Schema (7-Gate Verified)

| Field Key | Column Title | Gate / B2B Intelligence Description |
| :--- | :--- | :--- |
| **`opportunity_id_num`** | Grants.gov Opportunity ID (#) | **Gate 1 & 5**: Pure numeric Grants.gov internal Opportunity ID (Primary Entity Key) |
| **`opportunity_number`** | Funding Opportunity Number | Official Federal Funding Opportunity Number / Solicitation ID |
| **`opportunity_title`** | Opportunity Title | Clean solicitation title decoded of HTML entities |
| **`opportunity_status`** | Solicitation Status | `Posted` (open for bidding) or `Forecasted` (early shaping window) |
| **`funding_instrument_type`** | Funding Instrument | `Grant`, `Cooperative Agreement`, or `Grant / Cooperative Agreement` |
| **`agency_clean_name`** | Federal Agency (Clean Merge Name) | **Gate 3**: Clean Title-Cased federal agency name for outreach merge tags |
| **`agency_legal_name`** | Official Issuing Department / Agency | Full official federal department and sub-agency name |
| **`agency_code`** | Agency Code | Official Grants.gov owning agency code |
| **`company_domain`** | Agency Root Domain | **Gate 3**: Clean root `.gov` / `.mil` domain for Clay.com & CRM enrichment |
| **`cfda_number`** | CFDA / Assistance Listing # | Federal Assistance Listing Number used to relational-join USAspending.gov history |
| **`cfda_program_title`** | CFDA Program Title | Official Assistance Listing program title from Grants.gov Details API |
| **`award_ceiling_usd_num`** | Award Ceiling (Numeric USD) | **Gate 5**: Pure numeric maximum single award dollar amount |
| **`award_ceiling_formatted`** | 💰 Award Ceiling ($) | Formatted maximum single award dollar amount |
| **`award_floor_usd_num`** | Award Floor (Numeric USD) | **Gate 5**: Pure numeric minimum single award dollar amount |
| **`award_floor_formatted`** | Award Floor ($) | Formatted minimum single award dollar amount |
| **`estimated_total_program_funding_num`** | Total Program Pool (Numeric USD) | **Gate 5**: Pure numeric total estimated program funding pool in USD |
| **`estimated_total_program_funding_formatted`** | 🏦 Total Program Funding ($) | Formatted total estimated program funding pool |
| **`expected_awards_count_num`** | Expected # of Awards | **Gate 5**: Pure numeric estimated number of awards to be granted |
| **`contact_first_name`** | 👤 Program Officer First Name | **Gate 2**: Clean Title-Cased first name stripped of titles/credentials |
| **`contact_last_name`** | 👤 Program Officer Last Name | **Gate 2**: Clean Title-Cased last name stripped of titles/credentials |
| **`contact_full_name`** | 👤 Program Officer Full Name | Clean full name of the managing federal Program Officer |
| **`contact_credentials`** | Officer Credentials | Extracted academic/professional credentials (`PhD`, `MD`, `DDS, MPH`, `Federal Officer`) |
| **`contact_role_title`** | Officer Role Title | Clean role title (`NSF Program Director`, `Grants Management Specialist`, `Contract & Grant Specialist`) |
| **`contact_email`** | 📧 Primary Officer Email | **Gate 4**: Single atomic `.gov` / `.mil` email address of the Program Officer |
| **`secondary_contact_email`** | Secondary Program Inbox Email | **Gate 4**: Secondary program office or solicitation helpdesk email if applicable |
| **`contact_phone_e164`** | 📞 Officer Phone (E.164) | **Gate 4**: E.164 formatted direct phone number (`+1XXXXXXXXXX`) for Orum/Nooks |
| **`contact_phone_formatted`** | 📞 Officer Phone (Formatted) | **Gate 4**: Local US formatted phone number (`(XXX) XXX-XXXX`) |
| **`agency_hq_city`** | Agency HQ City | **Gate 6**: Issuing federal agency headquarters city |
| **`agency_hq_state`** | Agency HQ State | **Gate 6**: Issuing federal agency headquarters 2-letter state code |
| **`agency_hq_zip`** | Agency HQ ZIP | **Gate 6**: Issuing federal agency headquarters 5-digit postal code |
| **`agency_country`** | Country | **Gate 6**: ISO 2-letter country code (`US`) |
| **`posted_date`** | Posted Date (ISO) | **Gate 6**: Solicitation release date in strict ISO `YYYY-MM-DD` format |
| **`close_date`** | Close / Deadline Date (ISO) | **Gate 6**: Proposal submission deadline in strict ISO `YYYY-MM-DD` format |
| **`days_until_close_num`** | Days Until Deadline | **Gate 5**: Pure numeric count of days remaining until proposal deadline |
| **`incumbent_past_recipients`** | 🏆 Past Program Winners (USAspending Join) | Deduplicated past winners and award sizes joined by CFDA # & program topic |
| **`historical_program_spend_num`** | Historical Program Sample Spend (Numeric USD) | **Gate 5**: Pure numeric sum of matched historical awards on USAspending.gov |
| **`historical_avg_award_usd_num`** | Historical Avg Award (Numeric USD) | **Gate 5**: Pure numeric average historical award size in USD |
| **`historical_avg_award_formatted`** | 📊 Historical Avg Award ($) | Formatted average historical award dollar size for this program |
| **`historical_awards_count_num`** | Historical Awards Analyzed (#) | **Gate 5**: Pure numeric count of historical awards matched |
| **`actionable_b2b_signal`** | 🔥 Actionable B2B Capture Signal | Derived capture and grant consulting signal based on status and award ceiling |
| **`outreach_icebreaker`** | 💬 Plug-and-Play Outreach Icebreaker | **Gate 7**: Ready-to-send personalized outreach hook referencing agency, solicitation #, ceiling, deadline, and top incumbent |
| **`official_url`** | 🔗 Official Grants.gov URL | Direct link to the official Grants.gov opportunity synopsis |

# Actor input Schema

## `keyword` (type: `string`):

Search keyword (e.g., 'artificial intelligence', 'cybersecurity', 'defense', 'biotechnology', 'clean energy').

## `oppStatuses` (type: `string`):

Pipe-separated statuses: forecasted|posted

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

Maximum number of entity-pure federal grant opportunities to extract (1 to 5,000).

## Actor input object example

```json
{
  "keyword": "artificial intelligence",
  "oppStatuses": "forecasted|posted",
  "maxItems": 20
}
```

# Actor output Schema

## `results` (type: `string`):

🔗 \[Entity-Pure Relational LEFT JOIN: Grants.gov Solicitation × Opportunity Details × USAspending.gov CFDA History] 1 Row = 1 Active Federal Grant Opportunity enriched with its Program Officer direct email/phone and past winners of that exact CFDA program.

# 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 = {
    "keyword": "artificial intelligence",
    "oppStatuses": "forecasted|posted",
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("grandiose_envelope_0fj/us-federal-grants-sbir-scraper").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 = {
    "keyword": "artificial intelligence",
    "oppStatuses": "forecasted|posted",
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("grandiose_envelope_0fj/us-federal-grants-sbir-scraper").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 '{
  "keyword": "artificial intelligence",
  "oppStatuses": "forecasted|posted",
  "maxItems": 20
}' |
apify call grandiose_envelope_0fj/us-federal-grants-sbir-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,grandiose_envelope_0fj/us-federal-grants-sbir-scraper"
        }
    }
}
```

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/aWmxlPc6BOjIzjaYD/builds/YGsvfQY5GSEv9U440/openapi.json
