Grants.gov Scraper - Federal Grants
Pricing
from $1.40 / 1,000 opportunities
Grants.gov Scraper - Federal Grants
Grants.gov search returns a title, an agency and a date. Award size, whether you must match funds, and who may actually apply live on a second endpoint that nothing on the store joins up. This does, and its deadline radar correctly excludes forecasts, which have no closing date yet by design.
Grants.gov Scraper — Federal Grant Opportunities
Scrape every US federal grant opportunity from Grants.gov, joined to the detail endpoint the search results hide.
The search gives you a title, an agency and a closing date. Everything that decides whether an application is worth two weeks of work — how large the award is, whether you must put up matching funds, who is actually eligible — lives on a second endpoint, one request per opportunity. Nothing on the store joins the two.
What you get that a search wrapper cannot give you
The award range. awardCeiling and awardFloor: the largest and smallest
single award the agency will make. This is the size signal — but coverage
varies sharply by agency, so read the honest numbers below before relying on
it.
The cost-share flag. requiresCostSharing — you must supply matching funds.
The most reliably published field on the detail endpoint, and for a small
nonprofit it single-handedly decides whether a programme is reachable. It is
not in the search results at all.
Decoded eligibility. The search filter takes numeric codes (25, 12,
20). The output gives you plain English — "Private institutions of higher
education", "County governments" — plus the agency's own eligibility narrative,
which usually narrows things further than the codes suggest.
A closing-soon radar that understands forecasts. A forecasted opportunity
has an empty close date, because the deadline does not exist yet. Treating
that as a date puts every forecast at the top of a deadline list. Here they are
flagged hasNoDeadlineYet and kept off the radar — while still being returned,
because a forecast is early warning a competitor watching only posted
opportunities will miss.
The programme contact. Name and email of the person to ask before you write anything.
An honest note on award size
An earlier version of this actor led on average award — estimated funding divided by expected number of awards. Then it got measured:
| Field | Spread across 39 agencies | Default run (NIH-heavy) |
|---|---|---|
costSharing | 100% | 92% |
awardCeiling | 80% | 30% |
awardFloor | 76% | 13% |
estimatedFunding | 38% | — |
expectedNumberOfAwards | 0% | 0% |
Both measured 2026-08-16: 66 opportunities sampled across 39 agencies, and 100 enriched on a default run.
Two things follow, and neither is hidden here:
expectedNumberOfAwardsis populated on nothing, so an average award is not computable. The field is still returned and will populate if agencies start filing it, but it is null today. UseawardCeilingandawardFloor.- Ceiling coverage depends heavily on which agencies you pull. A broad
sweep across 39 agencies publishes ceilings 80% of the time; an NIH-dominated
default run only 30%. NIH rarely publishes them. If award size matters to
you, filter by agency and check
opportunitiesWithAwardRangein the summary before drawing conclusions.
Who uses this
- Nonprofits and universities — building a deadline pipeline instead of checking a website.
- Small businesses chasing SBIR/STTR — filtering to programmes they can actually win, at a size worth the effort.
- Grant consultants — watching named agencies for new programmes.
- Anyone already using our USAspending actor — this is money going out;
that one is money already spent.
cfdaNumbersjoins them.
Input
| Field | Type | Default | Notes |
|---|---|---|---|
keyword | string | "" | Free text across titles and descriptions |
statuses | array | ["posted","forecasted"] | Open now, plus announced-but-not-open |
closingWindowDays | integer | 30 | What counts as closing soon |
closingSoonOnly | boolean | false | Drop rows outside the window |
agencies | array | [] | Agency codes, e.g. HHS-NIH, USDA-NIFA |
eligibilities | array | [] | Applicant-type codes, e.g. 25, 12 |
fundingCategories | array | [] | e.g. HL health, ED education |
minAwardCeiling | integer | 0 | Drops rows with no published ceiling |
excludeCostSharing | boolean | false | Drop programmes needing matching funds |
enrich | boolean | true | The second request. Off = titles only |
maxEnriched | integer | 100 | Runs deadline-first, so a capped run enriches what matters |
Agency summaries are always built from everything collected, even with a filter on — otherwise the funding totals would describe your filter rather than the agency.
Output
opportunity — title, agency, status, closeDate, daysUntilClose,
isForecast, awardCeiling, awardFloor, estimatedTotalFunding,
requiresCostSharing, applicantTypes, eligibilitySummary,
agencyContactEmail, cfdaNumbers, opportunityUrl.
closing_soon — the deadline-driven subset, soonest first.
agency_summary — opportunities, forecasts, closingSoon,
soonestCloseDate, totalFundingAdvertised, medianAwardCeiling,
largestAwardCeiling, opportunitiesWithAwardRange,
opportunitiesRequiringCostShare, topApplicantTypes.
Reliability
awardCeilingarrives as the literal string"none"when absent.Number("none")isNaNandif (awardCeiling)passes on it, so a naive parse silently emits NaN. Resolved tonullhere.- Dates are
MM/DD/YYYY, converted to ISO. isEnrichedtells you whether the detail fields are absent because the cap was reached or because the agency did not publish them. Those are different.- One opportunity failing to enrich never costs the run.
Pricing
Pay per event. $0.002 per opportunity, $0.01 per closing-soon row, $0.05 per agency summary.