Grants.gov Scraper - Federal Grant Opportunities Feed avatar

Grants.gov Scraper - Federal Grant Opportunities Feed

Pricing

from $2.10 / 1,000 opportunities

Go to Apify Store
Grants.gov Scraper - Federal Grant Opportunities Feed

Grants.gov Scraper - Federal Grant Opportunities Feed

Scrape posted and forecasted federal grant opportunities from Grants.gov with award ceilings, floors, eligibility types, funding categories, Assistance Listings (CFDA), deadlines, and plain-text synopses.

Pricing

from $2.10 / 1,000 opportunities

Rating

0.0

(0)

Developer

Groundplane Labs

Groundplane Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Categories

Security

Limited permissions

Share

Extract posted, forecasted, closed, and archived federal grant opportunities from Grants.gov (api.grants.gov/v1/api/search2 and fetchOpportunity), complete with award ceilings and floors, total estimated program funding, expected award counts, cost-sharing flags, eligible applicant categories, funding activity categories, Assistance Listings (CFDA), deadlines, and clean plain-text synopses.

What it does

Federal agencies publish thousands of discretionary funding opportunities and pre-solicitation forecasts on Grants.gov every year. The standard search endpoint returns only summary headers, while funding amounts, expected award counts, eligibility rules, and full descriptions require separate detail lookups and HTML cleanup.

This Actor:

  • Searches POST https://api.grants.gov/v1/api/search2 sorted newest first (openDate|desc) with your keyword, opportunity status, applicant eligibility, funding category, agency, and posting-window filters.
  • Optionally hydrates each matching opportunity via POST https://api.grants.gov/v1/api/fetchOpportunity (rate-limited to at most 3 requests/second with automatic retry and exponential backoff).
  • Normalizes MM/DD/YYYY and timestamp dates to ISO YYYY-MM-DD, strips HTML tags and entities from synopsis/forecast descriptions (capped at 5,000 characters), and extracts structured Assistance Listing (CFDA) numbers and titles.
  • Keeps federal staff point-of-contact fields (agencyContactName, agencyContactEmail, agencyContactPhone) turned off by default (includeAgencyContact: false) and omits those keys unless explicitly enabled.

Who it's for

  • Nonprofits, universities, and research institutes monitoring newly posted and forecasted federal grants across health, education, energy, and science.
  • SBIR/STTR and small-business grant consultants filtering opportunities open to small businesses ("23") or for-profit organizations ("22").
  • Municipal, county, tribal, and state grant writers tracking infrastructure, community development, and environmental funding feeds.
  • GovTech and grant-intelligence platforms ingesting structured daily or weekly Grants.gov feeds into CRM or alerting pipelines.

Input

All filters have sensible defaults that return posted and forecasted federal grant opportunities from the last 30 days in under 2 minutes.

  • keyword (string): Optional keyword or phrase filter. Default: "".
  • oppStatuses (array of strings): Any combination of "posted", "forecasted", "closed", "archived". Default: ["posted", "forecasted"].
  • eligibilities (array of strings): Optional 2-digit Grants.gov applicant eligibility codes (see code table below). Default: [] (all applicant types).
  • fundingCategories (array of strings): Optional Grants.gov funding activity category codes (see code table below). Default: [] (all categories).
  • agencies (array of strings): Optional agency codes or prefixes (e.g. ["HHS", "DOE", "NSF", "DOD"]). Each entry is matched as a prefix of the Grants.gov sub-agency code, so "HHS" matches HHS-NIH11, HHS-CDC, and every other HHS sub-agency; use a full sub-agency code such as "HHS-NIH11" to narrow to one office. If no opportunity matches an entry, the run status says there was no exact agency code match and suggests sub-agency codes like HHS-NIH11. Default: [].
  • postedWithinDays (integer): Keep only opportunities posted within the last N days (0 disables the date filter). Default: 30.
  • minAwardCeilingUsd (integer): Minimum single-award ceiling in USD. Default: 0.
  • includeDetails (boolean): Fetch full opportunity details (fetchOpportunity) for each result up to maxItems. Default: true.
  • includeAgencyContact (boolean): Include grantor staff contact fields (agencyContactName, agencyContactEmail, agencyContactPhone). Defaults to false for privacy compliance.
  • maxItems (integer): Maximum number of opportunities to return. Default: 200.

Grants.gov Applicant Eligibility Codes (eligibilities)

CodeApplicant Type
"00"State governments
"01"County governments
"02"City or township governments
"04"Special district governments
"05"Independent school districts
"06"Public and State controlled institutions of higher education
"07"Native American tribal governments (Federally recognized)
"08"Public housing authorities / Indian housing authorities
"11"Native American tribal organizations (other than Federally recognized tribal governments)
"12"Nonprofits having a 501(c)(3) status with the IRS, other than institutions of higher education
"13"Nonprofits that do not have a 501(c)(3) status with the IRS, other than institutions of higher education
"20"Private institutions of higher education
"21"Individuals
"22"For-profit organizations other than small businesses
"23"Small businesses
"25"Others (see Additional Information on Eligibility)
"99"Unrestricted (open to any type of entity above)

Grants.gov Funding Category Codes (fundingCategories)

CodeCategoryCodeCategory
"AG"Agriculture"HO"Housing
"AR"Arts"HU"Humanities
"BC"Business and Commerce"IIJ"Infrastructure Investment and Jobs Act (IIJA)
"CD"Community Development"ISS"Income Security and Social Services
"CP"Consumer Protection"LJL"Law, Justice and Legal Services
"DPR"Disaster Prevention and Relief"NR"Natural Resources
"ED"Education"OZ"Opportunity Zone Benefits
"ELT"Employment, Labor and Training"RT"Recreation and Tourism
"EN"Energy"ST"Science and Technology and other R&D
"ENV"Environment"T"Transportation
"FN"Food and Nutrition"O"Other
"HL"Health

Example input JSON

{
"keyword": "",
"oppStatuses": ["posted", "forecasted"],
"eligibilities": [],
"fundingCategories": [],
"agencies": [],
"postedWithinDays": 30,
"minAwardCeilingUsd": 0,
"includeDetails": true,
"includeAgencyContact": false,
"maxItems": 200
}

Example run options (default max charge $50)

When starting a run via the Apify API or Console, set a default maximum charge of $50 ("maxTotalChargeUsd": 50) in your run options:

{
"maxTotalChargeUsd": 50,
"memoryMbytes": 256,
"timeoutSecs": 300
}

Output

Results are deduplicated by opportunityId and sorted newest first by postedDate descending.

FieldTypeDescription
opportunityIdstringUnique numeric Grants.gov opportunity ID.
opportunityNumberstring | nullFunding Opportunity Number (FON).
titlestring | nullOpportunity title.
agencyCodestring | nullSub-agency or department code (e.g. "DOI-USGS1", "HHS-NIH11").
agencyNamestring | nullFederal agency or office name.
statusstring | nullOpportunity status ("posted", "forecasted", "closed", "archived").
postedDatestring | nullPosted / open date (YYYY-MM-DD).
closeDatestring | nullApplication closing date or estimated response date (YYYY-MM-DD).
archiveDatestring | nullArchive date (YYYY-MM-DD), if set.
awardCeilingUsdnumber | nullMaximum individual award amount in USD.
awardFloorUsdnumber | nullMinimum individual award amount in USD.
estimatedFundingUsdnumber | nullTotal estimated program funding in USD.
expectedAwardsinteger | nullExpected number of awards.
costSharingboolean | nullWhether cost sharing or matching is required.
eligibilitiesarray<string> | nullEligible applicant categories ("<id>: <description>").
fundingCategoriesarray<string> | nullFunding activity categories ("<id>: <description>").
assistanceListingsarray<string> | nullAssistance Listing (CFDA) numbers and titles.
synopsisstring | nullPlain-text synopsis or forecast description (HTML stripped, max 5,000 chars).
grantsGovUrlstringDirect URL (https://www.grants.gov/search-results-detail/<opportunityId>).
agencyContactNamestring | nullGrantor point-of-contact name (present only when includeAgencyContact: true).
agencyContactEmailstring | nullGrantor point-of-contact email (present only when includeAgencyContact: true).
agencyContactPhonestring | nullGrantor point-of-contact phone (present only when includeAgencyContact: true).

Sample output row (synthetic example)

{
"opportunityId": "999901",
"opportunityNumber": "EX-RD-26-001",
"title": "Example Clean Energy Grid Resilience Demonstration Program",
"agencyCode": "DOE-GDO",
"agencyName": "Grid Deployment Office",
"status": "posted",
"postedDate": "2026-10-28",
"closeDate": "2027-01-15",
"archiveDate": "2027-02-14",
"awardCeilingUsd": 2500000,
"awardFloorUsd": 250000,
"estimatedFundingUsd": 25000000,
"expectedAwards": 10,
"costSharing": true,
"eligibilities": [
"12: Nonprofits having a 501(c)(3) status with the IRS, other than institutions of higher education",
"23: Small businesses"
],
"fundingCategories": [
"EN: Energy",
"ST: Science and Technology and other Research and Development"
],
"assistanceListings": [
"81.999 - Example Grid Modernization Assistance Program"
],
"synopsis": "The Example Grid Deployment Office invites applications for demonstration projects that improve distribution-level grid reliability and clean energy integration across rural and suburban service territories.",
"grantsGovUrl": "https://www.grants.gov/search-results-detail/999901"
}

How pricing works

Pay per result: $3.00 per 1,000 results ($0.003 per row). You only pay for rows returned. The Actor checks your run's maximum spending limit before every dataset push (recommended default: "maxTotalChargeUsd": 50) and stops cleanly if that limit is reached.

Compliance

When includeAgencyContact is set to true, the output may include names, email addresses, and telephone numbers of federal grantor points of contact as published on Grants.gov. By default, includeAgencyContact is false.

  • When includeAgencyContact is false (the default), email addresses and phone numbers embedded in the free-text synopsis are also redacted, so contact details do not leak through the description text.
  • All contact details originate from public U.S. government grant notices published on Grants.gov for applicant inquiries.
  • Buyers and users are solely responsible for complying with the Telephone Consumer Protection Act (TCPA), the National Do-Not-Call (DNC) Registry, the CAN-SPAM Act, the EU GDPR where it applies, and all applicable federal and state privacy and anti-solicitation laws before initiating any outreach.
  • Do not use this data for consumer or individual targeting or unsolicited commercial marketing.

Data source and terms

  • Official source: Grants.gov Search & Opportunity REST APIs (api.grants.gov/v1/api/search2 and fetchOpportunity).
  • API terms and policy: This Actor uses the Grants.gov API under the Grants.gov API Terms and Conditions. Grants.gov data is U.S. federal government data published for public reuse subject to those terms; this product uses the Grants.gov API but is not endorsed or certified by the U.S. Department of Health and Human Services.
  • Update frequency: Federal agencies post and update grant synopses and forecasts continuously throughout each business day on Grants.gov.
  • Disclaimer: This Actor is an independent tool and is not affiliated with or endorsed by Grants.gov, the U.S. Department of Health and Human Services (HHS), or any U.S. federal agency.

Limits and FAQ

  • Why are awardCeilingUsd or awardFloorUsd null on some rows? Many federal grant notices do not specify a fixed dollar ceiling or floor in the structured synopsis fields, and forecasted opportunities have no structured award ceiling or floor in the Grants.gov source at all (their detail record carries estimated total funding only). When Grants.gov leaves those fields blank or "none", the Actor outputs null. Known null rates from a recent default run: awardCeilingUsd is null on about 20 percent of rows and awardFloorUsd on about 29 percent of rows (rates vary with the posting mix).
  • How fast is detail hydration? When includeDetails: true (default), the Actor fetches each opportunity's detail record at up to 3 requests/second (~60 seconds for 180 opportunities). Set includeDetails: false if you only need summary headers (opportunityId, opportunityNumber, title, agencyCode, agencyName, status, postedDate, closeDate, assistanceListings, grantsGovUrl).

Troubleshooting

  • Status Complete: means every matched row was emitted and the counts in the status message are the counts that were actually scanned, matched, and pushed. A run that matches nothing ends Complete: 0 rows matched your filters with a note on which filters to widen; zero matches is a successful run, not an error.
  • Status PARTIAL: means some matched data could not be delivered, and the message names the reason: for example a Grants.gov detail lookup failing for some opportunities (those rows are emitted with summary fields only), rows skipped because the source response shape changed, the detail hydration time budget being reached, or your run's charge limit stopping the push early. A PARTIAL caused only by your own limits (max items or charge cap) is reported without the issue line below.
  • Canary input: { "keyword": "", "oppStatuses": ["posted"], "eligibilities": [], "fundingCategories": [], "agencies": [], "postedWithinDays": 30, "minAwardCeilingUsd": 0, "includeDetails": true, "includeAgencyContact": false, "maxItems": 5 } returns at least 1 row in well under 30 seconds on a healthy Grants.gov.
  • Found a problem or need a field? Open an issue on the Issues tab; we respond quickly.

Changelog

v0.1.4 (2026-11-01)

  • Grok Red Team fix round. High fixed: the agencies filter no longer passes codes verbatim to search2 (which matches exactly, so "HHS" returned 0 rows against hundreds open). Agencies are now omitted from the search2 call and matched client-side as prefixes of agencyCode while paging, and a zero-match agency run says so in the status and suggests sub-agency codes like HHS-NIH11. Medium fixed: synopsis contact redaction now runs before truncation and the 5,000 character cap is re-applied after redacting, so redaction can no longer push a valid row past the cap and drop it as false schema drift. Medium fixed: retries are now 6 attempts with jittered backoff from 2 to 32 seconds capped at 120 seconds, Retry-After is honored as seconds or as an HTTP-date, and requests use a 30 second timeout with a 10 second connect timeout. Lows: defaultRunOptions gains memoryMbytes and timeoutSecs and an exampleRunInput was added; the pricing section states the per-1,000-results price; known null rates for the award ceiling and floor are documented; a Grants.gov API terms link was added; the store description now starts with "Scrape".

v0.1.3 (2026-10-31)

  • Final-GO round returned NO-GO on two residuals, both fixed here. The end-of-hydration awardCeiling drift check is no longer gated on minAwardCeilingUsd: awardCeilingUsd is a headline output on every hydrated row, so if the field is absent from every detail response the run reports schema drift as a source-caused PARTIAL whether or not a ceiling filter was set. The synopsis phone redaction pattern was rebuilt: the old pattern opened with a word boundary that can never match before a parenthesis, so parenthesized area codes such as (202)555-0123 and (202) 555-0123 (including extension forms) were never redacted; the new pattern anchors on a non-digit lookbehind and consumes attached extensions, and every named format was re-tested against the shipped pattern.

v0.1.2 (2026-10-31)

  • Red Team correction round. Blocker fixed: with minAwardCeilingUsd set, the scan no longer stops at a small candidate pool and calls the result Complete. It now examines up to 600 candidates (the detail scan budget); if the budget stops the scan with search hits still unexamined, the run ends PARTIAL saying so, never Complete. High fixed: the detail payload now has its own sentinel (the money fields awardCeiling, awardFloor, estimatedFunding, numberOfAwards are checked on the first detail response, and a run where awardCeiling is absent from every detail response reports schema drift instead of silently nulling every ceiling). Medium fixed: status counts now report hits actually examined and candidates that passed the search-level filters, and the zero-after-detail-filtering status carries the same counts. Lows: retries honor Retry-After with jittered backoff; the synopsis redaction also catches phone formats like (202)555-0123, contiguous 10-digit numbers, and extensions; GDPR added to the Compliance section.

  • v0.1.1 (2026-10-31): Status messages now follow the Complete/PARTIAL contract (zero matches is a successful Complete: 0 run); per-row validation and a core-field schema sentinel added; a failed detail lookup no longer loses the whole run; synopsis text is redacted for emails and phone numbers when agency contact output is off; store category corrected to Business only.

  • v0.1 (2026-10-31): Initial release with search2 pagination, fetchOpportunity detail hydration, HTML synopsis stripping, date normalization, and opt-in agency contact fields.