Grants.gov API Scraper: Federal Grants Search, Deadline Monitor
Pricing
from $3.50 / 1,000 grant opportunity returneds
Grants.gov API Scraper: Federal Grants Search, Deadline Monitor
For grant writers, nonprofits and funding research: federal grants from the Grants.gov API, one row per opportunity with title, number, agency, posted and close dates, status, ALN, award ceiling and floor, eligibility. Monitoring returns only new grants and changed deadlines. No API key.
Pricing
from $3.50 / 1,000 grant opportunity returneds
Rating
0.0
(0)
Developer
NeverEmpty
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
US federal grants from Grants.gov, one row per funding opportunity: title, opportunity number, agency, posted date, close date, status (forecasted, posted, closed, archived), Assistance Listing numbers (ALN / CFDA), the Grants.gov page, and with details on: description, award ceiling and floor, estimated total funding, expected number of awards, cost sharing, funding instrument, category and eligible applicants.
- Search by keyword, agency, eligible applicant type, funding category, funding instrument, ALN, status and posted date.
- Monitoring mode remembers a search between runs and returns only the opportunities that are new and the ones whose close date or status changed, with the previous close date and status in the same row.
- Reads the official Grants.gov API (
search2andfetchOpportunity). No API key, no login, no proxy, no browser.
This product uses the Grants.gov API but is not endorsed or certified by the U.S. Department of Health and Human Services.
What one row looks like
A real row from 2026-10-05 (search: keyword climate, status posted):
| Field | Value |
|---|---|
title | Climate Program Office (CPO) FY2026 Earth System Science and Services Partnership |
opportunityNumber | NOAA-OAR-CPO-2026-33326 |
agencyCode / agencyName | DOC-DOCNOAAERA / DOC NOAA - ERA Production |
topAgencyCode / topAgencyName | DOC / Department of Commerce |
opportunityStatus | posted |
postedDate / closeDate | 2026-09-11 / 2026-10-26 |
alnNumbers | ["11.431"] |
awardCeiling / awardFloor | 10000000 / 1 |
expectedNumberOfAwards | 1 |
fundingInstruments | ["Cooperative Agreement"] |
eligibleApplicants | ["Others (see text field entitled \"Additional Information on Eligibility\" for clarification)"] |
eligibilityNotes | Eligible applicants must be academic institutions of higher learning which offer doctoral degrees in NOAA-related sciences; ... |
url | https://www.grants.gov/search-results-detail/363852 |
What this Actor checks for you (measured on the live API on 2026-10-05)
1. A department code is searched as all of its agencies
The Grants.gov API matches agency codes exactly. Opportunities carry the code of the agency that owns them (HHS-NIH11, HHS-FDA, DOD-AMC), so a search for HHS on its own returned 0 posted opportunities, while the 11 HHS agencies together had 402. This Actor first asks Grants.gov which agencies have opportunities for your search, turns each department code into the codes of its agencies, and sends those. A code that belongs to no opportunity of the search is named in the log and in the result, not silently dropped.
2. A filter the API did not take is reported, not sold as a result
The API ignores an argument it does not know and returns the unfiltered list with HTTP 200. Its own documentation names the Assistance Listing argument aln; sent that way on 2026-10-05, the API returned all 859 posted opportunities instead of the 101 under ALN 93.866 (the argument it reads is cfda). Unknown values behave the other way: an unknown status, sort or category returns 0 with HTTP 200.
So every value is checked against the list of codes before it is sent, and after every answer the Actor compares the search that Grants.gov reports back with the search it sent. If one filter is missing, or a returned opportunity has a status that was not asked for, the run returns a source-unreadable row that says which filter was not taken, and charges nothing.
3. Monitoring returns changes, not a date window
Running a "posted in the last 7 days" search every day returns the same opportunities several times and never tells you that a deadline moved. Monitoring mode keeps, per search, the close date and status of every matching opportunity and compares them at the next run. See "Monitoring mode" below.
4. Amounts and dates are not invented
awardCeiling,awardFloor,estimatedTotalFundingandexpectedNumberOfAwardsare the numbers the agency typed. When the field is empty or not a number, the value isnull, never0. Agencies do type placeholders: anawardFloorof0or1is common and is returned as written.closeDateisnullwhen the opportunity has none (forecasts, and opportunities that stay open). For forecasts,estimatedPostDate,estimatedCloseDate,estimatedAwardDateandestimatedProjectStartDatehold the agency's estimates.- A row whose details could not be read has
detailsIncluded: falseandnullin the detail columns, and adetails-not-readrow says how many.
Input
| Field | What it does |
|---|---|
keyword | Words as in the Grants.gov search box. Several words match any of them; a phrase in double quotes matches exactly (rural health matched 434 posted opportunities, "rural health" matched 2). |
statuses | forecasted, posted, closed, archived. Nothing chosen = forecasted and posted. On 2026-10-05: 610 forecasted, 859 posted, 8,692 closed, 73,359 archived. |
agencies | Department codes (HHS, DOD, USDA, NSF ...) or agency codes (HHS-NIH11, USDA-NIFA ...). |
eligibilities | Applicant types (state governments, nonprofits with 501(c)(3), small businesses, individuals ...). |
fundingCategories | Category of funding activity (Health, Education, Environment, Science and Technology ...). |
fundingInstruments | Grant, cooperative agreement, procurement contract, other. |
aln | One Assistance Listing number, for example 93.866. |
opportunityNumber | A funding opportunity number, for example PAR-25-283. |
postedWithinDays | Posted date within the last N days, as counted by Grants.gov. |
sortBy | Newest posted (default), oldest posted, closing soonest, closing latest. |
maxItems | Maximum rows (default 100). Not used in monitoring mode. |
includeDetails | On by default. One more request per opportunity. |
includeAgencyContact | Off by default. Adds the grantor contact (name, email, phone) published on the opportunity. |
monitoringMode, resetMonitoringState | See below. |
Every row has searchedFor, the search exactly as it was sent, so you can see what a row is an answer to.
Monitoring mode
- First run with a set of filters: every matching opportunity is remembered with its close date and status. No opportunity row is returned and nothing is charged. The result is one
baseline-savedrow. - Later runs with the same filters read every matching opportunity again and return:
change: new-opportunity- not in the search before;change: close-date-changed,status-changedorclose-date-and-status-changed- withpreviousCloseDate,previousStatusandchangedFields.
- A run that finds nothing new and nothing changed returns one
no-new-or-changed-opportunitiesrow and is charged one monitoring check.
What to know:
- An opportunity that moves out of your search is not reported. With
statusesset to posted only, an opportunity that closes simply stops matching. To be told about it, includeclosedinstatuses: the move from posted to closed is then astatus-changedrow. A forecast that becomes posted is reported with the default statuses. - Only the close date and the status are compared. A changed description or amount alone is not reported.
- Only what was delivered is remembered. If the maximum total charge of a run stops it early, the rest still counts as new or changed at the next run.
- One monitoring run compares up to 10,000 opportunities. A broader search returns a
search-too-broadrow and remembers nothing. - Opportunities are remembered per set of filters (sort and
maxItemsdo not matter). Two runs with the same filters at the same moment can return the same opportunity twice. - Grants.gov posts new opportunities on working days. Once a day is enough for most uses.
What is charged
grant-returned: each opportunity row. The price per row is the same with or without details.search-checked: one per monitoring run that compared the search and found nothing new or changed.- Not charged: the first monitoring run, rows that explain an empty or stopped run (
no-opportunities,baseline-saved,limit-reached,budget-reached,source-unreadable,source-blocked,invalid-input,details-not-read,not-read,search-too-broad), and there is no start fee.
How it reads
- One request at a time, with more than one second between requests. A search page holds up to 1,000 opportunities; details are one request per returned opportunity (about 1.3 seconds each: 100 rows take about 2.5 minutes, 1,000 about 22 minutes). Turn
includeDetailsoff for a list in seconds. - A failed connection or a 5xx answer is retried once. A 403 or 429 is not retried and not worked around: the run stops reading and says so.
- If the detail endpoint fails three times in a row, the rest of the run is returned without details instead of asking again and again.
Limits
- The data is what agencies entered on Grants.gov. Titles, amounts and eligibility are not corrected.
- With
includeAgencyContactoff, email addresses and US phone numbers written in the usual formats are removed fromdescription,eligibilityNotesandcloseDateNote. A phone number typed as ten digits without separators is not recognised. - Attachments are counted (
attachmentCount), not downloaded. - The Grants.gov API terms set no published request limit and allow Grants.gov to limit or block use. If that happens, runs return
source-blockedrows and charge nothing. - Grants.gov lists federal funding opportunities. State, local and foundation grants are not in it.
Related Actors
- EU Tenders API - TED Public Procurement Notices - public procurement notices of the European Union.
- UK Tenders Scraper - Contracts Finder & Find a Tender - UK public sector tenders and awards.
Thanks for using this Actor
We build these tools for people who run them every day, and we improve them from what users tell us.
- Missing a field, or need another filter? Tell us in the Issues tab. If the data is there, we add it.
- Found a bug or a wrong value? Post the run ID in the Issues tab. Wrong data is the thing we fix first.
If this Actor saved you time, a short review helps other people find it.