# US Grant Opportunities: Federal + State (`tatonicventures/us-grant-opportunities`) Actor

Federal and state grant opportunities in one table: Grants.gov plus California Grants Portal and Illinois CSFA. Deadlines, award ranges, eligibility, links. Filter by keyword, applicant type, deadline, award size. No login or API key.

- **URL**: https://apify.com/tatonicventures/us-grant-opportunities.md
- **Developed by:** [Nels Tate](https://apify.com/tatonicventures) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 grant opportunities

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 Grant Opportunities: Grants.gov + State Grant Portals (California, Illinois)

**One clean, deduplicated table of open and upcoming grant opportunities from federal and state government portals.** Search Grants.gov together with the **California Grants Portal** and the **Illinois Catalog of State Financial Assistance (CSFA)**, with normalized deadlines, award ranges, eligibility and links.

Most grant scrapers stop at Grants.gov. State grant programs are often easier to win and less competitive, but they're scattered across separate state portals in different formats. This Actor puts them in the same schema as federal opportunities.

No login and no API key. Sources are official public government portals and open-data feeds.

### Who uses it

- **Nonprofits and grant writers** building a weekly pipeline of opportunities they qualify for.
- **Grant consultants** monitoring many funding streams for clients.
- **Local governments, schools and tribes** tracking state and federal funding.
- **Grant-alert newsletters, CRMs and AI agents** that need structured opportunity data on a schedule.

### What data you get

| Field | Notes |
|---|---|
| source, jurisdiction | `grants.gov` / `US-Federal`, `grants.ca.gov` / `US-CA`, `grants.illinois.gov (CSFA)` / `US-IL` |
| title, agency, opportunityNumber | |
| status | `open`, `forecasted`, `closed` (normalized across portals) |
| openDate, closeDate, daysUntilClose | ISO dates; days left computed for you |
| awardFloor, awardCeiling, estimatedTotalFunding, expectedAwards | where the portal publishes them |
| eligibleApplicants, eligibilityNotes | e.g. "Nonprofits having a 501(c)(3) status..." |
| categories, fundingInstrument, matchingFunds, geography | |
| description | synopsis / purpose text (up to 4,000 characters) |
| url, applicationUrl | official listing and application links |
| assistanceListings | federal ALN/CFDA numbers |

### How to use

1. Enter **keywords** (e.g. `youth`, `mentoring`, `broadband`, `wildfire`).
2. Choose **sources** and **statuses** (open and forecasted by default).
3. Optionally filter by **applicant type** (e.g. 501(c)(3) nonprofit), **closing within N days**, and **minimum award ceiling**.
4. Run on a schedule (e.g. every Monday) and send results to Google Sheets, Slack or email through Apify integrations.

#### Example input

```json
{
  "keywords": ["youth", "mentoring", "after-school"],
  "sources": ["grants.gov", "california", "illinois"],
  "statuses": ["open", "forecasted"],
  "applicantTypes": ["nonprofit501c3"],
  "closingWithinDays": 90
}
```

#### Example output

```json
{
  "source": "grants.ca.gov",
  "jurisdiction": "US-CA",
  "title": "2026 CalAgPlate Grant Program",
  "agency": "CA Department of Food and Agriculture",
  "status": "open",
  "openDate": "2026-10-06",
  "closeDate": "2026-11-02",
  "awardFloor": 2500,
  "awardCeiling": 195500,
  "estimatedTotalFunding": 230000,
  "eligibleApplicants": "Nonprofit; Public Agency; Tribal Government",
  "matchingFunds": "Not Required",
  "url": "https://www.grants.ca.gov/grants/..."
}
```

### Features

- **Federal + state in one schema**, sorted by soonest deadline.
- **Full federal details** (award floor/ceiling, number of awards, cost sharing, eligibility text) through the official Grants.gov API.
- **Strict keyword mode** keeps federal results relevant (Grants.gov's own search is very broad).
- **Privacy-friendly**: program officers' names and emails are omitted unless you turn on `includeContacts`.
- **More states coming**: the architecture makes each new state portal one small adapter.

### Pricing

Pay per opportunity returned (see the Pricing tab). No subscription. Filtering happens before you're charged.

### Limitations

- Illinois list pages don't publish eligibility or descriptions; you get title, agency, dates, award range and links.
- California award amounts are parsed from the portal's free-text "estimated amounts" field; the original text is kept in `estimatedAmountsText`.
- Always confirm details in the official notice of funding opportunity before applying.

### Legal

The Actor uses official public sources only: the Grants.gov public search and opportunity APIs, the California Grants Portal open-data feed on data.ca.gov (public domain), and the Illinois GATA/CSFA public opportunity list. It doesn't log in, bypass access controls or collect personal data by default.

# Actor input Schema

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

Match any of these words in title, description, categories or agency (e.g. youth, mentoring, food security, broadband). Leave empty for all opportunities.

## `strictKeywordMatch` (type: `boolean`):

Grants.gov's own keyword search is broad (it matches related terms and attachments). When on, federal results must also contain one of your keywords in the title, description, categories, agency or eligibility text. Requires full Grants.gov details.

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

Which official portals to search.

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

Opportunity statuses to include.

## `applicantTypes` (type: `array`):

Filter by who may apply. Applied natively on Grants.gov; on California, nonprofit types are matched against the portal's applicant-type field. Illinois list pages carry no eligibility data, so they are not filtered.

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

Only opportunities whose deadline is within this many days from today. 0 = no deadline filter (includes rolling / no-deadline opportunities).

## `minAwardCeiling` (type: `integer`):

Only opportunities whose maximum award is at least this amount. Opportunities with unknown award size are dropped when this is set.

## `includeFederalDetails` (type: `boolean`):

Adds award floor/ceiling, total funding, number of awards, eligibility, cost sharing and description for each federal opportunity (one extra API call each).

## `includeContacts` (type: `boolean`):

Adds the agency's published contact line (may include a program officer's name and work email).

## `maxResultsPerSource` (type: `integer`):

Upper limit of opportunities returned from each source (soonest deadline first).

## Actor input object example

```json
{
  "keywords": [
    "youth",
    "mentoring"
  ],
  "strictKeywordMatch": true,
  "sources": [
    "grants.gov",
    "california",
    "illinois"
  ],
  "statuses": [
    "open",
    "forecasted"
  ],
  "applicantTypes": [],
  "closingWithinDays": 0,
  "minAwardCeiling": 0,
  "includeFederalDetails": true,
  "includeContacts": false,
  "maxResultsPerSource": 200
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `results` (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": [
        "youth",
        "mentoring"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("tatonicventures/us-grant-opportunities").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": [
        "youth",
        "mentoring",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("tatonicventures/us-grant-opportunities").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": [
    "youth",
    "mentoring"
  ]
}' |
apify call tatonicventures/us-grant-opportunities --silent --output-dataset

```

## MCP server setup

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

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/zTQj3PrMof0vTLvIW/builds/kohTrbYreKyVZtUBR/openapi.json
