Grant discovery platforms are a quiet SaaS category with remarkable pricing: $179 to $459 a month for keyword alerts on grant opportunities. The primary source for US federal grants is grants.gov, and it has a public JSON API with no key, no registration, and no rate-limit drama. Here is the whole thing.
Search is one POST
POST https://api.grants.gov/v1/api/search2
Content-Type: application/json
{
"keyword": "rural health",
"oppStatuses": "posted|forecasted",
"eligibilities": "12",
"rows": 100,
"startRecordNum": 0
}
You get hitCount and an oppHits array: opportunity ID, number, title, agency code, open/close dates, status, and CFDA numbers. Filters compose with pipes: agencies (NSF, HHS, USDA...), fundingCategories (ED, ENV, HL...), eligibilities (12 = 501(c)(3) nonprofits, 20 = private universities, 22 = for-profits). Pagination is startRecordNum.
The status values matter more than they look. posted is open-now. forecasted is the interesting one: grants that are announced but not yet open — the window where a grant writer positions a client before the competition starts writing.
Details are one more POST
POST https://api.grants.gov/v1/api/fetchOpportunity
{"opportunityId": 103313}
The synopsis block carries what the alert platforms sell as premium fields: awardCeiling, awardFloor, estimatedFunding, expectedNumberOfAwards, applicantTypes, costSharing, the full description, and — the field that surprised me — agencyContactEmail, the actual program officer inbox. In my verification run, 22 of 25 opportunities had one.
The two gotchas
-
Relevance order lies. The default ordering happily surfaces a "posted" opportunity from 2012. Sort client-side by
openDatedescending and drop anything whosecloseDateis behind you, or your "new grants" feed opens with the Obama administration. -
Money fields are strings with moods.
awardCeilingcan be a number, an empty string, or the literal string"none". Normalize before you compare.
Alerts are dedupe plus a schedule
The product these platforms sell is "tell me only what is new for my profile." That is: store the opportunity IDs you have already returned (a named key-value store on Apify), run the search on a weekly schedule, and skip seen IDs. Twenty lines of code, and the output is rows you can pipe to Slack or a client tracker instead of a marketing email.
I packaged all of it as an Apify actor: Grant Opportunity Finder — keywords, agency, category, and eligibility filters, forecasted support, detail enrichment with contact emails, recency sorting, past-deadline filtering, and cross-run dedupe, at $0.01 per opportunity row with the first 2 rows of every run free. The 25-row verification run cost $0.00056 to produce, which tells you everything about the margin structure of the incumbents.
Public data with a subscription moat around it is the most common shape of the alert-tool economy. Sometimes the moat is real (hard scraping, entity resolution). Here, it is one POST request.
Top comments (0)