Grants.gov Data Extractor avatar

Grants.gov Data Extractor

Pricing

from $9.00 / 1,000 results

Go to Apify Store
Grants.gov Data Extractor

Grants.gov Data Extractor

Crawl the Grants.gov search interface to extract structured grant notices. Isolate untouched federal funding records with built-in stateful snapshot tracking.

Pricing

from $9.00 / 1,000 results

Rating

0.0

(0)

Developer

太郎 山田

太郎 山田

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Grants.gov Funding Digest | Opportunity Watch & Signal Digest

Build a reliable daily pipeline of federal funding notices with this advanced Grants.gov data extractor. Acting as an automated signal digest, this web scraper continuously monitors the government's primary grant database, capturing critical updates without requiring manual searches. Built for data engineers, legal analysts, and enterprise business development teams, the tool allows you to extract structured data from Grants.gov based on exact, highly targeted criteria. Simply configure scheduled runs to automate your opportunity watch and integrate federal data directly into your workflows.

Operating exactly like a human researcher, the crawler navigates the Grants.gov search pages to filter the latest results by specific agencies, funding instruments, or custom keywords. It instantly extracts highly accurate details, outputting structured fields such as the agency name, post date, docket number, document type, and the direct URL to the official posting. A core technical advantage of this scraper is its built-in stateful tracking ability. By configuring a snapshot key, the system retains the memory of historical scrape results to isolate completely untouched notices. These fresh records are explicitly marked with an isNew=true flag, eliminating duplicate reviews and preventing redundant data processing. Streamline your federal grant monitoring, ensure compliance tracking, and feed pristine, deduplicated government data directly into your internal dashboards.

Store Quickstart

  1. Pick a template from the Store — start with DOE Energy Grants Quickstart (key-free).
  2. The first run fetches open opportunities from the configured lookback window and marks all as new.
  3. Re-run with the same snapshotKey — only truly new opportunities (not seen in the previous run) are flagged isNew=true.
  4. Add watchTerms (topic keywords or org names) to get watch_term_hit signal tags in each digest.

Key Features

  • 🏛️ Government-sourced — Pulls directly from official agency feeds — no third-party aggregators
  • ⏱️ Timely digests — Daily/weekly rollups of new filings, rulings, or actions
  • 🔍 Keyword watchlists — Flag items matching your compliance/legal watch terms
  • 📊 Structured metadata — Agency, date, docket, document type, link — all dataset-ready
  • 📡 Webhook alerts — Push to legal/compliance teams the moment new items match watchlist

Use Cases

WhoWhy
DevelopersAutomate recurring data fetches without building custom scrapers
Data teamsPipe structured output into analytics warehouses
Ops teamsMonitor changes via webhook alerts
Product managersTrack competitor/market signals without engineering time

Input

FieldTypeDefaultDescription
feedsarrayrequiredOne entry per watch target. Each feed produces one digest row. At minimum, set id, name, and at least one filter (agenci
watchTermsstringTerms to flag in opportunity titles and synopses. Any opportunity matching a watch term receives a watch_term_hit signal
lookbackDaysinteger14Include opportunities opened within this many days. Keep short (14–30) for recurring runs; widen for initial discovery.
maxOpportunitiesPerFeedinteger50Upper bound on opportunities fetched per feed per run.
minAwardCeilingnumber0Skip opportunities with award ceiling below this value. Applied globally unless overridden per feed. Set 0 to include al
closingSoonDaysinteger14Opportunities closing within this many days receive a closing_soon signal tag.
highValueThresholdnumber1000000Opportunities with awardCeiling >= this value receive a high_value signal tag.
deliverystring"dataset"dataset stores results in the Apify dataset. webhook posts the digest JSON to webhookUrl.

Input Example

{
"lookbackDays": 14,
"maxOpportunitiesPerFeed": 50,
"minAwardCeiling": 0,
"closingSoonDays": 14,
"highValueThreshold": 1000000,
"delivery": "dataset",
"datasetMode": "all",
"snapshotKey": "grants-funding-digest-state",
"grantsGovApiUrl": "https://api.grants.gov/v1/api/search2",
"requestTimeoutSeconds": 30,
"notifyOnNoNew": true,
"dryRun": false
}

Input Examples

Example: Single-target audit

{
"targets": [
"example-target-1"
],
"maxResultsPerTarget": 30
}

Example: Bulk portfolio

{
"targets": [
"target-1",
"target-2",
"target-3"
],
"maxResultsPerTarget": 50,
"snapshotKey": "grants-gov-funding-digest-state"
}

Example: Recurring delta watch

{
"targets": [
"target-1"
],
"snapshotKey": "grants-gov-funding-digest-state",
"emitChangedOnly": true
}

Output

FieldTypeDescription
metaobject
errorsarray
digestsarray
digests[].feedIdstring
digests[].feedNamestring
digests[].sourcestring
digests[].checkedAttimestamp
digests[].statusstring
digests[].newOpportunityCountnumber
digests[].totalOpportunityCountnumber
digests[].closingSoonCountnumber
digests[].highValueCountnumber
digests[].changedSinceLastRunboolean
digests[].actionNeededboolean
digests[].recommendedActionstring
digests[].topAgenciesarray
digests[].watchTermHitsarray
digests[].signalTagsarray
digests[].opportunitiesarray
digests[].errornull

Output Example

{
"meta": {
"generatedAt": "2026-04-15T09:00:00.000Z",
"now": "2026-04-15T09:00:00.000Z",
"lookbackDays": 14,
"feedCount": 2,
"totalOpportunities": 7,
"newOpportunities": 5,
"closingSoonCount": 2,
"watchTermHitCount": 2,
"actionNeededCount": 1,
"snapshot": {
"key": "grants-digest-sample",
"loadedFrom": "local",
"savedTo": "local"
},
"warnings": [],
"executiveSummary": {
"overallStatus": "action_needed",
"brief": "1 feed(s) have watch-term hits or closing-soon signals requiring review.",
"topAgencies": [
{
"name": "Department of Energy",
"opportunityCount": 4,
"isWatchTermHit": false
},
{
"name": "National Institutes of Health",
"opportunityCount": 3,
"isWatchTermHit": true
}
],
"watchTermHits": [
{
"term": "cancer",
"opportunityId": "grants-456789",
"title": "Cancer Research Precision Medicine Initiative",
"agencyName": "National Institutes of Health",
"awardCeiling": 3000000,
"closeDate": "2026-04-25T00:00:00.000Z"

API Usage

Run this actor programmatically using the Apify API. Replace YOUR_API_TOKEN with your token from Apify Console → Settings → Integrations.

cURL

curl -X POST "https://api.apify.com/v2/acts/taroyamada~grants-gov-funding-digest/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "lookbackDays": 14, "maxOpportunitiesPerFeed": 50, "minAwardCeiling": 0, "closingSoonDays": 14, "highValueThreshold": 1000000, "delivery": "dataset", "datasetMode": "all", "snapshotKey": "grants-funding-digest-state", "grantsGovApiUrl": "https://api.grants.gov/v1/api/search2", "requestTimeoutSeconds": 30, "notifyOnNoNew": true, "dryRun": false }'

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("taroyamada/grants-gov-funding-digest").call(run_input={
"lookbackDays": 14,
"maxOpportunitiesPerFeed": 50,
"minAwardCeiling": 0,
"closingSoonDays": 14,
"highValueThreshold": 1000000,
"delivery": "dataset",
"datasetMode": "all",
"snapshotKey": "grants-funding-digest-state",
"grantsGovApiUrl": "https://api.grants.gov/v1/api/search2",
"requestTimeoutSeconds": 30,
"notifyOnNoNew": true,
"dryRun": false
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

JavaScript / Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('taroyamada/grants-gov-funding-digest').call({
"lookbackDays": 14,
"maxOpportunitiesPerFeed": 50,
"minAwardCeiling": 0,
"closingSoonDays": 14,
"highValueThreshold": 1000000,
"delivery": "dataset",
"datasetMode": "all",
"snapshotKey": "grants-funding-digest-state",
"grantsGovApiUrl": "https://api.grants.gov/v1/api/search2",
"requestTimeoutSeconds": 30,
"notifyOnNoNew": true,
"dryRun": false
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Tips & Limitations

  • Run daily for active watchlists; weekly for passive monitoring.
  • Webhook delivery works well for compliance team Slack channels — include docket URL for 1-click access.
  • Use watchKeywords generously — false positives are cheap to triage, false negatives miss filings.
  • Pair with regulatory-change-monitor for cross-agency coverage.
  • Archive Dataset rows weekly for long-term compliance evidence retention.

FAQ

How far back does history go?

This actor monitors forward-only — new items since first run. For historical data, use the agency's own search tool.

What timezones are used?

All timestamps are UTC. Use your downstream pipeline to convert to agency-local time if needed.

Does it translate non-English content?

No — original language is preserved. Use downstream translation services if needed.

Is the data official?

Yes — sourced directly from official government websites and feeds. Not a third-party aggregator.

Can I use this for legal research?

For alerting and monitoring, yes. For litigation research, cross-verify with primary sources (agency websites) — this actor is a monitoring tool, not a legal database.

Government & Regulatory cluster — explore related Apify tools:

Cost

Pay Per Event:

  • actor-start: $0.01 (flat fee per run)
  • dataset-item: $0.003 per output item

Example: 1,000 items = $0.01 + (1,000 × $0.003) = $3.01

No subscription required — you only pay for what you use.

⭐ Was this helpful?

If this actor saved you time, please leave a ★ rating on Apify Store. It takes 10 seconds, helps other developers discover it, and keeps updates free.

Bug report or feature request? Open an issue on the Issues tab of this actor.