US Federal Grants (Grants.gov)
Pricing
$5.00 / 1,000 grant opportunities
US Federal Grants (Grants.gov)
US federal funding opportunities from the official Grants.gov API: forecasted, open, closed and archived grants with agency, deadlines, award amounts, eligibility and assistance listings. Filter by keyword, agency, applicant type, category and posting date.
US federal funding opportunities from the official Grants.gov API — forecasted, open, closed and archived grants and cooperative agreements, with agency, deadlines, award amounts, eligibility and assistance listing (CFDA) numbers. Filter by keyword, agency, applicant type, funding category, funding instrument and posting date.
This product uses the Grants.gov API but is not endorsed or certified by the U.S. Department of Health and Human Services.
The Actor calls the documented, keyless Grants.gov API and delivers one clean row per opportunity that you can download as JSON, CSV or Excel, or pull through the API. Titles, codes, dates, amounts and categories are the values the API serves, put into standard formats (ISO dates, amounts as numbers, HTML entities decoded). The one free-text field, the eligibility notes, is an edited extract: converted from the agency's HTML to plain text, with e-mail addresses and phone numbers removed. Every row links to the original opportunity on Grants.gov. HTTP-only, no browser, so runs are fast.
Who it is for: grant consultants and grant writers, nonprofit development teams, university research offices, and anyone building a grant-alert feed or tracking federal funding by agency or topic. Set Posted since to the date of your previous run to get only new opportunities (see Tips for running it on a schedule).
What data you get
For every funding opportunity the Actor returns:
| Field | Description |
|---|---|
url | The opportunity's public page on Grants.gov |
scrapedAt | ISO 8601 timestamp of the extraction |
opportunityId | Grants.gov's numeric id |
opportunityNumber | The funding opportunity number the agency assigned |
title | Opportunity title |
agencyCode, agencyName | The posting agency (e.g. HHS-NIH11, National Institutes of Health) |
topAgencyCode, topAgencyName | Its department (e.g. HHS, Department of Health and Human Services) |
status | forecasted, posted, closed or archived |
opportunityCategory | Discretionary, Mandatory, Continuation, Earmark or Other |
postingDate, closeDate, archiveDate | Dates as YYYY-MM-DD; closeDate is the application deadline |
estimatedPostingDate, estimatedCloseDate | Forecasts only: when the agency expects to post the opportunity and its deadline |
lastUpdatedDate | When the agency last changed the record (ISO 8601, US Eastern offset) |
awardCeiling, awardFloor | Largest and smallest single award, numbers in USD |
estimatedTotalFunding | Estimated total program funding, number in USD |
expectedNumberOfAwards | Expected number of awards |
currency | USD with full details; null when includeDetails is off |
costSharing | Whether cost sharing or matching is required |
fundingInstruments | Grant, Cooperative Agreement, Procurement Contract, Other |
fundingCategories | Categories of funding activity (Health, Education, Agriculture, …) |
eligibleApplicantTypes | Applicant types the opportunity is open to |
eligibilityDescription | Eligibility notes, edited: HTML → plain text, e-mails and phones removed; original at url |
assistanceListingNumbers | Assistance Listing numbers (formerly CFDA) |
additionalInfoUrl | The agency's link to the full announcement or program page |
A field the agency left empty is null. With includeDetails: false only the search fields are
filled (opportunityNumber, title, agencyCode, agencyName, status, postingDate, closeDate,
assistanceListingNumbers); the rest are null.
The opportunity's description is not included, because agencies often name their staff in it as
the contact for questions (see Data and compliance). Each row's url opens the opportunity on
Grants.gov, where the full description is, and additionalInfoUrl links to the agency's own
announcement when the agency gives one.
Input
| Option | Type | Default | Description |
|---|---|---|---|
keyword | string | - | Free-text search. Empty lists every opportunity matching the other filters, newest first. |
statuses | array | ["posted", "forecasted"] | Any of forecasted, posted, closed, archived |
postedSince | string | - | Only opportunities posted on or after this date, YYYY-MM-DD |
includeDetails | boolean | true | Fetch each opportunity's full record (one extra API call per result) |
maxItems | integer | 50 | Stop after this many results (max 10,000). Also your cost cap. |
agencies | array | - | Agency codes. A department code (HHS, USDA, DOD, …) includes all its sub-agencies; HHS-NIH11 narrows |
eligibilities | array | - | Grants.gov applicant-type codes, e.g. 12 nonprofits with 501(c)(3), 23 small businesses, 21 individuals |
fundingCategories | array | - | Category codes, e.g. HL Health, ED Education, ST Science and Technology, AG Agriculture |
fundingInstruments | array | - | G Grant, CA Cooperative Agreement, PC Procurement Contract, O Other |
maxRequestsPerCrawl | integer | derived from maxItems | Safety cap on API requests per run (search pages plus one detail call per result) |
proxyConfiguration | object | Apify datacenter | Proxy settings |
Large runs. With details on, the Actor fetches about one opportunity per 1.2 seconds (it stays polite to the API), roughly 1,000 per 20 minutes. For runs above a few thousand results, raise the run timeout in the run options.
The code lists for eligibilities, fundingCategories and fundingInstruments are Grants.gov's own,
taken from the API; the input form shows them by name. Values inside one filter are combined with OR,
different filters with AND. An empty input returns the 50 newest posted and forecasted opportunities.
Example input — open health grants for nonprofits posted since 1 September 2026:
{"statuses": ["posted"],"fundingCategories": ["HL"],"eligibilities": ["12", "13"],"fundingInstruments": ["G"],"postedSince": "2026-09-01","maxItems": 100}
Output example
A real row from a local run on 2026-09-27 (posted and forecasted opportunities; this one is a
forecast, so the estimated dates are filled and closeDate is null):
{"url": "https://www.grants.gov/search-results-detail/363963","scrapedAt": "2026-09-27T10:27:18.576Z","opportunityId": 363963,"opportunityNumber": "HHS-2027-ACL-NIDILRR-ARCP-0300","title": "Advanced Rehabilitation Research Training (ARRT) Program - Community Living and Participation","agencyCode": "HHS-ACL","agencyName": "Administration for Community Living","topAgencyCode": "HHS","topAgencyName": "Department of Health and Human Services","status": "forecasted","opportunityCategory": "Discretionary","postingDate": "2026-09-25","closeDate": null,"archiveDate": "2027-09-30","estimatedPostingDate": "2026-10-05","estimatedCloseDate": "2026-12-07","lastUpdatedDate": "2026-09-25T13:03:22-04:00","awardCeiling": 250000,"awardFloor": 245000,"estimatedTotalFunding": 250000,"expectedNumberOfAwards": 1,"currency": "USD","costSharing": false,"fundingInstruments": ["Grant"],"fundingCategories": ["Science and Technology and other Research and Development"],"eligibleApplicantTypes": ["Public and State controlled institutions of higher education","Private institutions of higher education"],"eligibilityDescription": "Public and State controlled institutions of higher education; Private institutions of higher education. Foreign entities are not eligible to compete for, or receive, awards made under this announcement.","assistanceListingNumbers": ["93.433"],"additionalInfoUrl": "https://acl.gov/grants/open-opportunities"}
A run summary (items pushed, items skipped by category, the number of matching opportunities
Grants.gov reported, API requests made, failed requests by category, stop reason) is stored in the
run's key-value store under the key OUTPUT.
Pricing
Pay per result. You are charged per result and nothing else: no platform usage, no compute units. Search pages, retries and failed requests are free. The current rate is on the Pricing tab of this Actor — that is the only place it is set, so no figure is repeated here.
maxItemscaps the number of results, and therefore the cost, of a run.- The run also stops when it reaches the maximum total charge you set for the run in Apify Console or through the API.
Tips
- Start with
maxItems: 20to check the fields before a large run. - To collect only new opportunities, set
postedSinceto the date of your previous run. Results come newest first and the run stops at the first opportunity older than that date. A schedule in Apify Console starts every run with the same input, so update the date before each run, or start each run through the API with the date in its input. - Turn
includeDetailsoff for a faster run with the search fields only (about 100 opportunities per API call instead of one call per opportunity). The price per result is the same either way.
Limitations
- Only what Grants.gov publishes. Opportunities an agency announces elsewhere, and awards already made, are not in this data.
statusis the status at run time; a forecast becomes a posted opportunity, and a posted one closes, on Grants.gov's schedule.- With details on, the Actor makes one API call per opportunity, at about one call per second, so a run of several thousand opportunities takes an hour or more.
- When many departments are combined with closed or archived statuses, the agency list is longer than one Grants.gov search accepts. The Actor then sends it as several searches and returns the results batch by batch, each newest first, rather than one list sorted across all of them.
- Attachments (full announcement PDFs, application packages) are not downloaded;
additionalInfoUrlandurllink to them.
Source caveats. What Grants.gov says about the data, and what we saw in it:
- The Grants.gov API is provided "as is" and "as available", with no warranty that it is error-free or uninterrupted (API terms of service).
- Amounts and dates are as each agency entered them. Agencies often leave award amounts empty, and
some enter
0where no figure applies; both are passed through as the source gives them (nullfor empty or "none",0for 0). - Deadlines are stored as dates; the time of day, when an agency gives one, is in the announcement.
Data and compliance
This Actor collects publicly available, non-personal data only:
- It uses the official, documented Grants.gov API, which needs no account or key, and does not bypass access controls.
- It does not collect names, e-mail addresses, phone numbers, addresses or any other field that identifies a person. Grants.gov records carry an agency contact block — the name, e-mail and phone of the government employee handling the opportunity. That block is never read, and neither is the record's free-text agency-name field, where agencies often type the contact person's name.
- The description text is not included. Agencies often name their own staff inside an
opportunity's description, as the contact for questions: in 156 opportunities checked on
2026-09-27, 7 descriptions (4.5 %) still named an agency employee after e-mail addresses and phone
numbers had been removed. Names in running text cannot be removed reliably, so the Actor does not
output the description at all. The
urlof each row leads to the full text on Grants.gov. eligibilityDescriptionis converted from the agency's HTML to plain text, and e-mail addresses and phone numbers are removed from it. It is therefore an edited extract, not the verbatim Grants.gov text; theurlof each row leads to the original. In 141 opportunities checked on 2026-09-27, no eligibility note named a person except inside an institution's name (for example a tribal college named after a historical figure).- It identifies itself with a plain User-Agent and sends no headers that imitate a browser.
- It sends at most two requests at a time, waits at least one second between requests, and stops instead of working around a block.
Program titles are kept as published, including programs named after a person (for example "John R. Justice Formula Grant Program").
How robots.txt is handled
This Actor talks to one host only: the Grants.gov API at api.grants.gov, through its two documented
endpoints (search2 and fetchOpportunity). That host is an API gateway and serves no robots.txt
(the address answers HTTP 403, as it does for any path the API does not define); the Grants.gov
website's own robots.txt allows all crawlers. The Actor therefore does not fetch robots.txt, and
the run summary shows robots.respected: false. The API's terms of service set no numeric limits on
calls; they reserve the right to impose them ("may be subject to certain limitations on access, calls,
or use as set forth within this Agreement or otherwise provided by HHS") and to block a user who tries
to exceed or circumvent them. The Actor keeps to the modest request rate above and records a block
instead of working around it.
Removal requests. If you believe this Actor exposes data it should not, open an issue on the Actor's Issues tab and state the URL(s) concerned. Requests are answered there, and the fields or pages in question are removed.
You are responsible for using the extracted data in line with the Grants.gov API terms of service — including its attribution notice, quoted at the top of this page — and the laws that apply to you.
Support
Report bugs and request fields on the Issues tab of this Actor. Include the run ID.