# US Grants & Business Incentives Feed: Grants.gov + Fed Register (`signalloom/grants-incentives-feed`) Actor

Get open US grants, loans, tax credits and rebates for businesses from Grants.gov and the Federal Register in one clean schema. Filter by keyword, who can apply, agency, state and deadline; optional 0-100 match score per business profile. New-only alerts. $0.002 per result.

- **URL**: https://apify.com/signalloom/grants-incentives-feed.md
- **Developed by:** [Signalloom](https://apify.com/signalloom) (community)
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 opportunity returneds

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 Grants & Business Incentives Feed: Grants.gov + Federal Register

Find **US federal grants, loans, tax credits and rebates that a business can apply for**, in one clean schema. Filter by keyword, who can apply, agency, state and deadline. Add a short business profile and every result gets a **0–100 match score with plain-language reasons**. Turn on **only new** mode and schedule it to get alerts when new opportunities appear.

- **Grants.gov**: every open and forecasted federal grant and cooperative agreement, with eligibility, award floor and ceiling, deadlines, category and program
- **Federal Register**: funding notices that never reach Grants.gov, including **SBA disaster loan declarations by state** (with loan deadlines), tax credit allocation rounds and rebate programs
- **One schema** across sources: type (grant, loan, tax credit, rebate…), who can apply, amounts, open, close and posted dates, state, link
- **Business-profile matching**: keywords + state + applicant type → `matchScore` and `matchReasons`. Rule-based and explainable, no AI guesswork
- **Alerts**: `onlyNew` remembers what it has seen, so a scheduled run outputs only new opportunities and forecasts that just opened

**Price: $0.002 per opportunity** ($2 per 1,000). The prefilled example (40 opportunities) finishes in about 20–30 seconds.

### Use this when…

- you're a **grant writer or consultant** and want a weekly list of new federal opportunities for each client, scored against that client's profile
- you run a **small business** and want to know which grants, SBIR/STTR awards and SBA loans you could apply for
- you need **SBA disaster loan** declarations for a state, with the physical and economic-injury (EIDL) deadlines
- you want a **grants.gov feed** in clean JSON, CSV or Excel for a CRM, spreadsheet, newsletter or dashboard
- you want **alerts** for new grants matching a keyword, agency or eligibility type

### For AI agents

- **Run** `signalloom/grants-incentives-feed` (Apify MCP server `call-actor`, or the Apify API) with input like `{"keywords": ["small business"], "eligibility": ["small_business"], "maxResults": 20}`
- **Returns** one JSON row per open opportunity in the default dataset: `title`, `agency`, `type`, `eligibleApplicantTypes`, `awardFloor`/`awardCeiling`, `closeDate`, `daysToClose`, `url`, plus `matchScore` and `matchReasons` when a business profile is given.
- **Typical cost:** up to 20 opportunities = **$0.04** at most ($0.002 per opportunity).

### How to use it

1. Add **keywords** (e.g. `small business`, `energy efficiency`, `rural`), or leave them empty to list everything.
2. Optional filters: **who can apply** (small businesses, nonprofits…), **agencies** (`SBA`, `USDA`, `DOE`…), **state**, **funding types**, **closing within N days**, **posted within N days**.
3. Optional **business profile**: keywords describing the business, its state, and its applicant type. Results are then sorted by `matchScore`.
4. For alerts: turn on **Only new opportunities**, give the search a **Monitor ID**, and schedule the run (daily or weekly). The first run is a baseline and outputs everything.

**Recipe: client pipeline.** One saved task per client, each with its own profile and Monitor ID, scheduled weekly with `onlyNew` on. Each run is a short list of new, scored opportunities.

### Output

One record per opportunity. Real examples from a run with the prefilled input (descriptions shortened):

```json
{
  "source": "grants.gov",
  "id": "363966",
  "opportunityNumber": "HHS-2027-ACL-NIDILRR-BISA-0308",
  "title": "Small Business Innovation Research (SBIR) program, Phase I",
  "agency": "Administration for Community Living",
  "parentAgency": "Department of Health and Human Services",
  "program": "ACL National Institute on Disability, Independent Living, and Rehabilitation Research",
  "type": "grant",
  "fundingInstrument": "Grant",
  "status": "forecasted",
  "eligibleApplicantTypes": ["small_business", "for_profit"],
  "applicantTypeLabels": ["Small businesses"],
  "eligibilityText": "Each organization submitting an application must qualify at the time of the award as a small business concern as defined by the Small Business Administration. Foreign entities are not eligible to comp…",
  "eligibilityBasis": "coded by agency",
  "awardFloor": 95000,
  "awardCeiling": 100000,
  "estimatedTotalFunding": 1100000,
  "expectedAwards": 11,
  "costSharing": false,
  "openDate": "2026-09-25",
  "closeDate": "2026-12-16",
  "rollingDeadline": false,
  "daysToClose": 35,
  "postedDate": "2026-09-25",
  "category": "Science and Technology and other Research and Development",
  "state": "US",
  "states": ["US"],
  "assistanceListings": ["93.433"],
  "description": "The purpose of the Federal SBIR program is to stimulate technological innovation in the private sector, strengthen the role of small business in meeting Federal research or research and development (R…",
  "contactEmail": null,
  "url": "https://www.grants.gov/search-results-detail/363966",
  "matchScore": 48,
  "matchReasons": ["None of your keywords appear", "Small businesses are listed as eligible", "Nationwide (federal) program", "Forecasted: not open yet, time to prepare"]
}
```

```json
{
  "source": "federalregister.gov",
  "id": "2026-23019",
  "title": "Administrative Declaration of a Disaster for the State of Tennessee",
  "agency": "Small Business Administration",
  "type": "loan",
  "status": "posted",
  "eligibleApplicantTypes": ["small_business", "for_profit", "nonprofit", "individual"],
  "eligibilityBasis": "SBA disaster loan rules",
  "openDate": "2026-11-12",
  "closeDate": "2027-08-06",
  "daysToClose": 268,
  "postedDate": "2026-11-12",
  "datesText": "Issued on November 6, 2026. Incident Period: August 22, 2026. Physical Loan Application Deadline Date: January 5, 2027. Economic Injury (EIDL) Loan Application Deadline Date: August 6, 2027.",
  "state": "TN",
  "states": ["TN"],
  "description": "This is notice of an Administrative declaration of a disaster for the state of Tennessee dated November 6, 2026. Incident: Severe Storms and Straight-Line Winds.…",
  "url": "https://www.federalregister.gov/documents/2026/11/12/2026-23019/administrative-declaration-of-a-disaster-for-the-state-of-tennessee",
  "matchScore": 40,
  "matchReasons": ["None of your keywords appear", "Small businesses are listed as eligible", "Targets another state (TN)", "Open, closes in 268 days"]
}
```

**Field notes**

- `type`: `grant`, `cooperative_agreement`, `loan`, `tax_credit`, `rebate`, `procurement_contract` or `other`. Grants.gov types come from the agency's funding instrument; Federal Register types come from the notice's wording.
- `eligibleApplicantTypes`: `small_business`, `for_profit`, `nonprofit`, `individual`, `state_local_government`, `tribal`, `education`, plus `unrestricted` (open to anyone) and `other_see_text` (read `eligibilityText`). `eligibilityBasis` says where they came from: coded by the agency (Grants.gov), SBA's disaster loan rules, or inferred from the notice text.
- `state`: `US` for nationwide federal programs, otherwise the state(s) named in the title.
- `closeDate` is the application deadline. For SBA disaster declarations it's the later EIDL deadline; both deadlines are in `datesText`. `rollingDeadline: true` means the source lists a far-future placeholder date, so there's no fixed deadline.
- `changeType` (with `onlyNew`): `NEW`, or `NOW_OPEN` for a forecast that has opened.
- **Match score:** keywords (in title 20 points each, in description 10; max 40), applicant type (listed 30, open to anyone 22, "other" 12, unknown 10), state (targets your state 20, nationwide 12), timing (open with 7+ days left 10, forecasted or no deadline 6, under 7 days 3, closed 0). The total is scaled to 0–100 over the parts of the profile you filled in.

A run summary (per-source status, counts, time) is saved as `OUTPUT` in the run's key-value store.

### Pricing

- **$0.002 per opportunity** in the results
- Searches that find nothing are free

### Data sources

| Source | What we use | Access |
|---|---|---|
| [Grants.gov API](https://www.grants.gov/api) | `search2` (search) and `fetchOpportunity` (details) | Official, documented, no key or login |
| [Federal Register API](https://www.federalregister.gov/developers/documentation/api/v1) | `documents.json` (notices), plus each notice's plain-text version (`raw_text_url` returned by the API) to read its DATES section | Official, documented, no key or login |

**Undocumented endpoints:** none. Two notes: Grants.gov's `sortBy` value `openDate|desc` (newest first, used only when there are no keywords) is taken from the API's own response format, not from a documented example. The Federal Register plain-text file is a link the API itself returns, and the site's robots.txt allows it.

**Not included:** state and utility incentive databases such as DSIRE. DSIRE's API is a paid subscription with a key, and we don't scrape around it. State programs appear only when a federal notice names the state.

### Data handling and politeness

- Only public government data is read. No login, no CAPTCHA, no bot-protection bypass.
- Requests are paced (about 3 a second at most per site), run at most 2 at a time, and back off on errors (Retry-After respected).
- **No personal data:** agency contact names and phone numbers are never output. `contactEmail` is filled only for **agency role mailboxes** (e.g. `grantsinfo@nih.gov`); personal-looking addresses are dropped. Opt-out requests for any address: open an issue.

### Limitations

- Federal programs only (plus SBA declarations that name a state). It doesn't cover state, county or utility rebate portals.
- Federal Register records have fewer fields: no award amounts, and eligibility is inferred from the notice text.
- The Federal Register search covers the last 120 days unless you set **Posted within N days**.
- With a **category** filter, Federal Register notices are skipped, because they have no categories.
- State detection uses state names in titles. A federal program limited to certain states in its fine print shows as `US`.

### FAQ

**How do I find federal grants for my small business?**

Set **Who can apply** to small business, add keywords for what you do (e.g. `manufacturing`, `energy efficiency`) and run. Results come from Grants.gov and the Federal Register, with deadlines and award sizes.

**How do I get an alert when a new grant is posted?**

Turn on **Only new** (`"onlyNew": true`), give the search a Monitor ID and schedule it weekly. Each run returns only opportunities that weren't there last time, plus forecasts that have opened.

**Which grants is my business actually a good fit for?**

Fill in the business profile (keywords, state, applicant type). Each result gets a 0–100 `matchScore` with `matchReasons`, sorted best first.

**Does it include state or local grants?**

It covers federal sources (Grants.gov and Federal Register notices). With a state set, it keeps programs that name that state plus nationwide federal programs.

### Feedback

Missing a source or field? Open an issue on the **Issues** tab.

# Actor input Schema

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

Search words or phrases, one per line, e.g. "small business", "energy efficiency", "manufacturing". Each one is searched separately and the results are merged. Leave empty to list everything that matches the other filters. Example: \["small business", "solar"].

## `eligibility` (type: `array`):

Keep opportunities open to these applicant types. Grants.gov filters by its coded eligibility; for Federal Register notices the notice text must name the type. Empty = any.

## `includeUnrestricted` (type: `boolean`):

With a "Who can apply" filter, also keep Grants.gov opportunities marked Unrestricted or Other (see eligibility text).

## `categories` (type: `array`):

Grants.gov funding activity categories. When set, Federal Register notices are skipped because they have no categories.

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

Agency codes, e.g. SBA, USDA, DOE, DOC, EPA, HHS, NSF, TREAS. Grants.gov sub-agency codes such as HHS-NIH11 also work there. Leave empty for all agencies. Example: \["SBA", "USDA"].

## `state` (type: `string`):

US state (two-letter code or name), e.g. TX. Keeps opportunities that name this state, plus nationwide federal programs unless you turn that off below. Example: "TX".

## `includeNationwide` (type: `boolean`):

With a state set, also keep federal programs that are open in every state (most of them).

## `excludeInternational` (type: `boolean`):

Skip Department of State and USAID opportunities (embassy programs and other work outside the US). Turn off to include them.

## `fundingTypes` (type: `array`):

Keep only these types. Empty = all.

## `statuses` (type: `array`):

Posted = open for applications now. Forecasted = announced ahead, not open yet (Grants.gov only).

## `closingWithinDays` (type: `integer`):

Only opportunities whose deadline is within this many days, soonest first. 0 = off (closed ones are always left out). Example: 60.

## `postedWithinDays` (type: `integer`):

Only opportunities posted in the last N days. 0 = off (Federal Register notices then cover the last 120 days). Example: 7.

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

Which public sources to search.

## `maxResults` (type: `integer`):

Maximum opportunities to output (you pay per opportunity). Example: 20.

## `includeDetails` (type: `boolean`):

Load each Grants.gov opportunity's details: eligibility text, applicant types, award floor and ceiling, category, description. Turn off for a faster list with fewer fields.

## `profileKeywords` (type: `array`):

What your business (or client) does, e.g. "solar", "manufacturing", "rural". Used to give each result a 0-100 matchScore with plain-language matchReasons.

## `profileState` (type: `string`):

Where the business is, e.g. TX. Programs that target this state score higher; programs for other states score lower.

## `profileApplicantType` (type: `string`):

What kind of applicant the business is. Opportunities that list it as eligible score higher.

## `minMatchScore` (type: `integer`):

With a business profile, leave out results scoring below this (0-100). 0 = keep all, sorted best first.

## `onlyNew` (type: `boolean`):

Output only opportunities that weren't in the results at the last run with the same Monitor ID, plus forecasts that have now opened. The first run is a baseline and outputs everything. Pair with a schedule for alerts.

## `monitorId` (type: `string`):

Name for this search's memory. Use a different ID for each saved search you monitor. Example: "tx-energy-grants".

## Actor input object example

```json
{
  "keywords": [
    "small business",
    "energy efficiency"
  ],
  "eligibility": [
    "small_business"
  ],
  "includeUnrestricted": true,
  "includeNationwide": true,
  "excludeInternational": true,
  "statuses": [
    "posted",
    "forecasted"
  ],
  "closingWithinDays": 0,
  "postedWithinDays": 0,
  "sources": [
    "grants.gov",
    "federalregister.gov"
  ],
  "maxResults": 40,
  "includeDetails": true,
  "profileKeywords": [
    "energy",
    "manufacturing"
  ],
  "profileState": "TX",
  "profileApplicantType": "small_business",
  "minMatchScore": 0,
  "onlyNew": false,
  "monitorId": "default"
}
```

# Actor output Schema

## `results` (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 = {
    "keywords": [
        "small business",
        "energy efficiency"
    ],
    "eligibility": [
        "small_business"
    ],
    "maxResults": 40,
    "profileKeywords": [
        "energy",
        "manufacturing"
    ],
    "profileState": "TX",
    "profileApplicantType": "small_business"
};

// Run the Actor and wait for it to finish
const run = await client.actor("signalloom/grants-incentives-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 = {
    "keywords": [
        "small business",
        "energy efficiency",
    ],
    "eligibility": ["small_business"],
    "maxResults": 40,
    "profileKeywords": [
        "energy",
        "manufacturing",
    ],
    "profileState": "TX",
    "profileApplicantType": "small_business",
}

# Run the Actor and wait for it to finish
run = client.actor("signalloom/grants-incentives-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 '{
  "keywords": [
    "small business",
    "energy efficiency"
  ],
  "eligibility": [
    "small_business"
  ],
  "maxResults": 40,
  "profileKeywords": [
    "energy",
    "manufacturing"
  ],
  "profileState": "TX",
  "profileApplicantType": "small_business"
}' |
apify call signalloom/grants-incentives-feed --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,signalloom/grants-incentives-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/EfGsysc3ad58EflVx/builds/yfX58bj5ch34DtMmc/openapi.json
