# Grant Opportunity Records — US Grants.gov Federal Extract (`nexgensignal/grant-opportunity-records`) Actor

Per-record U.S. federal grant opportunities from the official Grants.gov daily extract. Agency, program, eligibility, award size, dates. Keyless, metadata-only, public domain. No contact-person data.

- **URL**: https://apify.com/nexgensignal/grant-opportunity-records.md
- **Developed by:** [NexGen Signal](https://apify.com/nexgensignal) (community)
- **Categories:** Business, News, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $33.50 / 1,000 grant opportunity 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Grant Opportunity Records — U.S. Grants.gov Federal Extract

**Official source. No API key. Pay per record.**

This actor turns the U.S. government's **Grants.gov** daily database extract into clean, per-opportunity records — every federal grant **opportunity** (posted synopses and planned forecasts) an organization screens before it invests in an application. Each run reads the official Grants.gov XML extract (the Class A bulk file) and delivers one row per opportunity: the opportunity number, the agency and program, the eligibility categories, the funding instrument, the award ceiling and floor, the open and close dates, and the CFDA / Assistance Listing numbers — the fit-screening facts, and **only** the metadata, never a grantor's contact person and never an attachment's contents.

### What this is, in one paragraph

Grants.gov publishes a complete database extract of federal grant opportunities every day as a single bulk XML file. This actor reads that official extract directly, streams it, and flattens each opportunity into one analysis-ready record: what the opportunity is, which agency is offering it, who is eligible, how much money is on the table, and when it opens and closes. Values are verbatim. It carries the dated extract it came from on every record, so a pull is always reproducible and its freshness is auditable. You are billed only for records actually delivered.

### Who buys this and for what job

- **Grant teams and nonprofits** screening the full federal opportunity set for fit — by agency, eligibility category, funding activity, or award size — before committing to write an application.
- **Universities, hospitals, and research offices** tracking which programs are open and forecast across every federal agency in one feed.
- **Consultants and grant-writing firms** building a pipeline of open and upcoming opportunities for their clients.
- **Analysts and data engineers** who want a keyless, one-call federal grants feed already reduced to org-level, fit-screening fields.

### Metadata only — public domain, with an honest boundary

Grant opportunity **metadata** on Grants.gov is a U.S. Government work and is in the public domain under 17 U.S.C. §105 — free to reuse. But the government's own guidance is explicit that not everything on a federal site is a government work: per USA.gov, *"Content on federal websites may include protected intellectual property used with the right holder's permission."* Grant opportunities frequently link **attachment documents** (application packages, NOFO PDFs) that can carry separate rights. So this actor draws a hard line: it carries opportunity **metadata only** — the structured fields of the extract — and **never** downloads, parses, or redistributes attachment contents. The licence and this boundary are carried on every record.

Grants.gov also disclaims reliance and endorsement. Per the operating agency (HHS): *"Reference in this website to any specific commercial product, process, service, manufacturer, or company is not an endorsement or recommendation by the U.S. Government or the U.S. Department of Health and Human Services (HHS),"* and the site's information is *"only intended to be general summary information for public use."* These are records for fit-screening — not legal, grant-writing, or eligibility advice.

### No contact-person data — by construction

Each opportunity in the extract carries a grantor **contact** (a named official, their email, phone, and a free-text contact blurb). This actor **never maps those tags to a field** — the parser only reads the org-level metadata tags, so the grantor contact name, email, and phone can never become part of a record. As a second, structural safeguard, every free-text metadata field (description, eligibility notes, explanations, and the information URL) is scrubbed before emit: the grantor contact's own name/text is redacted, and any email address or phone-number pattern is removed. This is enforced by acceptance tests that feed an opportunity carrying all five contact tags plus contact data embedded in the description, and assert none of it survives — and by a live sweep over the full daily extract (83,000+ opportunities → 0 contact emails, 0 contact phones, 0 grantor-contact names emitted).

### Living source — a daily, dated file

The extract is a **rolling daily file**: Grants.gov posts a new dated extract each day, and the bucket keeps a short window of recent dates. This actor pins the latest available extract at run time (or a specific date you request, if it is still in the window), and stamps `extract_date` and `extract_file` on **every record** so a pull is always reproducible and drift is visible. Ask for a date that has already rolled out of the window and the run tells you which dates are available rather than silently substituting another.

### Pricing

| Event | Free plan | Bronze | Silver | Gold / Platinum / Diamond |
|-------|-----------|--------|--------|---------------------------|
| `grant_opportunity_record` | $0.05 | $0.045 | $0.04 | $0.0335 |

Delivered before charged. Blocked runs and empty results cost nothing.

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `recordTypes` | string list | synopsis, forecast | Which records to pull: `synopsis` (posted opportunities), `forecast` (planned opportunities). |
| `extractDate` | string (YYYYMMDD) | latest | Optional. Pull a specific dated extract; must be within the bucket's rolling window. |
| `agencyCodePrefix` | string | — | Optional. Keep only opportunities whose agency code starts with this prefix (e.g. `HHS`, `DOS`, `USDA`). |
| `eligibleApplicant` | string (1–2 digits) | — | Optional Grants.gov eligibility code to filter on (e.g. `25` = nonprofits with 501(c)(3)). |
| `onlyOpen` | boolean | false | If enabled, keep only opportunities whose close date is today or later. |
| `maxRecords` | integer | 500 | Ceiling on records delivered and billed. |

### Output

One JSON object per opportunity. Real example (fields as delivered, values verbatim):

```json
{
  "record_id": "262148",
  "record_type": "synopsis",
  "opportunity_id": "262148",
  "opportunity_number": "SCAPPD-14-AW-161-SCA-08152014",
  "opportunity_title": "Establishment of the Edmund S. Muskie Graduate Internship Program",
  "opportunity_category": "D",
  "funding_instrument_types": ["CA"],
  "categories_of_funding_activity": ["O"],
  "category_explanation": "Public Diplomacy",
  "cfda_numbers": ["19.040"],
  "eligible_applicants": ["25"],
  "additional_information_on_eligibility": "Eligibility for U.S. institutions is limited to not-for-profit organizations subject to 501 (c) (3) of the tax code.",
  "agency_code": "DOS-SA",
  "agency_name": "Bureau of South and Central Asian Affairs",
  "post_date": "08152014",
  "close_date": "09042014",
  "award_ceiling": "600000",
  "award_floor": "400000",
  "estimated_total_program_funding": "600000",
  "source": "U.S. Grants.gov (federal grant opportunity extract)",
  "source_url": "https://www.grants.gov/search-results-detail/262148",
  "extract_date": "20260818",
  "extract_file": "extracts/GrantsDBExtract20260818v2.zip",
  "licence": "U.S. Grants.gov ... public domain (17 U.S.C. §105) ... metadata ONLY, never attachment contents ...",
  "attribution": "Source: U.S. Grants.gov (HHS) federal grant opportunity extract. Public-domain U.S. Government work.",
  "observed_at": "2026-08-18T00:00:00Z"
}
```

An unbilled `RUN_RECEIPT` records the robots check, the pinned extract date and file, the rolling window of available dates, the filters applied, records scanned and delivered, and whether charged equals delivered.

### Cost guidance

One `grant_opportunity_record` per delivered opportunity: cost = opportunities delivered × your plan's per-record price. The current daily extract carries roughly **83,000 opportunities** (posted synopses plus planned forecasts). A filtered pull — one agency, or only currently-open opportunities — keeps runs small and cheap; 1,000 opportunities is **$50** (Free) / **$33.50** (Gold).

### Honest limitations

- **Metadata only.** Opportunity fields only — attachment documents (NOFO PDFs, application packages) are never downloaded or redistributed.
- **Dates are verbatim MMDDYYYY strings** as published in the extract; they are not reformatted.
- **Rolling window.** Only dates still in the bucket can be pulled; older extracts age out.
- **No contact-person data** is emitted, by design.
- **Point-in-time.** Each record is the opportunity as of its dated extract; re-run against a newer extract to refresh.

### Differentiation

Distinct from the sibling grant products in the NexGenData fleet. Fleet-2's **nih-reporter-grant-award-delta** tracks **awarded** grants after the fact (post-award deltas from NIH RePORTER) — the opposite end of the lifecycle. Fleet-2's **California grant-deadline watch** covers **one state's** portal. This actor is **federal pre-award opportunities** — the fit-screening grain, across every federal agency, before an application is written. A narrower, earlier job than either sibling, and all three are named here so buyers pick the right one.

### The NexGen Signal family

Part of the NexGen Signal family of official-source, pay-per-record products:

- [Eurostat House Price Index](https://apify.com/nexgensignal/eurostat-house-price-index)
- [Eurostat Business & Consumer Confidence](https://apify.com/nexgensignal/eurostat-business-confidence)
- [Eurostat Income Distribution (EU-SILC)](https://apify.com/nexgensignal/eurostat-income-distribution)
- [Eurostat Immigration Statistics](https://apify.com/nexgensignal/eurostat-immigration-statistics)
- [Eurostat Road Freight Transport](https://apify.com/nexgensignal/eurostat-road-freight)
- [Organization Sanctions & LEI Risk](https://apify.com/nexgensignal/organization-sanctions-lei-risk)
- [EU Tender Bid Signals — TED](https://apify.com/nexgensignal/eu-tender-bid-signals)

*Source: U.S. Grants.gov (HHS) federal grant opportunity extract. Opportunity metadata is a public-domain U.S. Government work (17 U.S.C. §105); linked attachments may carry separate rights and are never included. Reformatted to org-level records; values verbatim; no contact-person data emitted.*

# Actor input Schema

## `recordTypes` (type: `array`):

Which opportunity records to pull: synopsis (posted opportunities) and/or forecast (planned opportunities).

## `extractDate` (type: `string`):

Optional. Pull a specific dated daily extract. Must be within the bucket's rolling window; leave blank for the latest available.

## `agencyCodePrefix` (type: `string`):

Optional. Keep only opportunities whose agency code starts with this prefix (e.g. HHS, DOS, USDA).

## `eligibleApplicant` (type: `string`):

Optional Grants.gov eligibility code (1-2 digits) to filter on (e.g. 25 = nonprofits with 501(c)(3)).

## `onlyOpen` (type: `boolean`):

If enabled, keep only opportunities whose close date is today or later.

## `maxRecords` (type: `integer`):

Maximum records delivered and billed. You are billed only for records delivered.

## Actor input object example

```json
{
  "recordTypes": [
    "synopsis",
    "forecast"
  ],
  "onlyOpen": false,
  "maxRecords": 500
}
```

# Actor output Schema

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

The delivered federal grant opportunity records.

# 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 = {
    "recordTypes": [
        "synopsis",
        "forecast"
    ],
    "maxRecords": 500
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgensignal/grant-opportunity-records").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 = {
    "recordTypes": [
        "synopsis",
        "forecast",
    ],
    "maxRecords": 500,
}

# Run the Actor and wait for it to finish
run = client.actor("nexgensignal/grant-opportunity-records").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 '{
  "recordTypes": [
    "synopsis",
    "forecast"
  ],
  "maxRecords": 500
}' |
apify call nexgensignal/grant-opportunity-records --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nexgensignal/grant-opportunity-records"
        }
    }
}

```

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/P4Bnk0vkN1yXfjHzO/builds/1tzC0ZUfwqWiWAKeC/openapi.json
