Grants APIsimpler.grants.gov ↗
Search and retrieve federal funding opportunities from Simpler.Grants.gov. Filter by status, eligibility, and category. Get full grant details via 2 endpoints.
What is the Grants API?
The Simpler Grants.gov API provides access to the full catalog of federal funding opportunities through 2 endpoints. Use search_opportunities to run free-text queries across grant and cooperative agreement listings with filters for status, eligibility type, funding instrument, and category, then call get_opportunity with a UUID to retrieve the complete record including description, award details, documents, and contact information.
curl -X GET 'https://api.parse.bot/scraper/b95e14f8-5674-44f3-9eb6-406ba5a4b74d/search_opportunities?page=1&query=health&status=posted%2Cforecasted&sort_by=relevancy' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace simpler-grants-gov-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: simpler_grants_gov_api SDK — bounded, re-runnable; every call capped."""
from parse_apis.Simpler_Grants_gov_API import GrantsGov, SortBy, OpportunityNotFound
client = GrantsGov()
# Search for health-related posted opportunities, sorted by soonest close date.
for opp in client.opportunities.search(query="health", status="posted", sort_by=SortBy.CLOSE_DATE_ASC, limit=3):
print(opp.title, opp.close_date, opp.agency)
# Drill-down: take one result and fetch full details.
hit = client.opportunities.search(query="education", limit=1).first()
if hit:
full = hit.details()
print(full.title, full.description, full.funding_opportunity_number)
for doc in (full.documents or []):
print(doc.file_name, doc.url, doc.last_updated)
# Typed error: attempt to fetch a non-existent opportunity.
try:
client.opportunities.get(opportunity_id="00000000-0000-0000-0000-000000000000")
except OpportunityNotFound as e:
print("not found:", e.opportunity_id)
print("exercised: opportunities.search / details / opportunities.get")
Full-text search across all federal funding opportunities. Supports filtering by status, funding instrument, eligibility, and category. Results are paginated with 25 items per page and sortable by relevance, dates, title, or award amounts. Each result includes summary fields; use get_opportunity with the returned opportunity_id for full details.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number (1-based). Each page returns up to 25 results. |
| query | string | Free-text search query matching opportunity titles and descriptions. |
| status | string | Comma-separated opportunity statuses to include. Valid values: posted, forecasted, closed, archived. |
| sort_by | string | Sort order for results. |
| category | string | Filter by funding activity category (e.g. health, education, environment). Omit for all. |
| eligibility | string | Filter by eligible applicant type (e.g. state_governments, individuals, small_businesses). Omit for all. |
| funding_instrument | string | Filter by funding instrument type. Valid values: grant, cooperative_agreement, procurement_contract, other. Omit for all. |
{
"type": "object",
"fields": {
"page": "current page number",
"total": "total number of matching opportunities across all pages",
"opportunities": "array of opportunity summaries with title, opportunity_id, opportunity_number, close_date, status, agency, posted_date, expected_awards, award_min, award_max"
},
"sample": {
"data": {
"page": 1,
"total": 1173,
"opportunities": [
{
"title": "Preventive Health and Health Services Block Grant – 2026",
"agency": "Centers for Disease Control-PHIC",
"status": "Open",
"award_max": "$--",
"award_min": "$--",
"close_date": "Jul 17, 2026",
"posted_date": "May 27, 2026",
"opportunity_id": "d614a1b3-2eac-450b-a92c-40ed880aa4c5",
"expected_awards": 61,
"opportunity_number": "CDC-RFA-PW-26-2600"
}
]
},
"status": "success"
}
}About the Grants API
Search Federal Funding Opportunities
The search_opportunities endpoint accepts a query string matched against opportunity titles and descriptions. Results are paginated at 25 items per page using a 1-based page parameter, and the total field tells you how many records exist across all pages. You can narrow results with the status filter (comma-separated values: posted, forecasted, closed, archived), the funding_instrument filter (grant, cooperative_agreement, procurement_contract, other), and the eligibility filter targeting applicant types such as state_governments, individuals, or small_businesses. Results sort by relevance, dates, title, or award amounts via the sort_by parameter. Each item in the opportunities array includes title, opportunity_id, opportunity_number, agency, status, posted_date, and close_date.
Full Opportunity Details
The get_opportunity endpoint takes the UUID from a search result and returns the complete listing. Response fields include the narrative description, eligibility requirements, cost_sharing flag, archive_date, last_updated, and a documents array where each entry has file_name, description, and last_updated. The version field reflects the listing revision number, which is useful for detecting updates over time.
Coverage and Data Freshness
The API reflects the opportunity data published on Simpler.Grants.gov, which consolidates listings from federal agencies across all major funding categories including health, education, environment, and agriculture. Opportunities move through the forecasted → posted → closed → archived lifecycle, and the status filter lets you target any stage. The close_date and posted_date fields in both endpoints support deadline-aware queries without needing the full detail record.
The Grants API is a managed, monitored endpoint for simpler.grants.gov — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when simpler.grants.gov changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official simpler.grants.gov API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a grant discovery tool that lets nonprofits filter opportunities by
eligibilitytype andcategory - Monitor newly posted federal grants by polling
search_opportunitieswithstatus=postedand sorting byposted_date - Alert researchers when a specific opportunity's
close_dateis approaching by tracking UUIDs from search results - Aggregate
documentsmetadata fromget_opportunityto surface downloadable application materials - Compare
expected_awardamounts across agencies by paginating throughsearch_opportunitiesresults - Track the
versionfield onget_opportunityto detect when a listing has been revised by a sponsoring agency - Index
forecastedopportunities so applicants can prepare before a grant officially opens
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Simpler.Grants.gov have an official developer API?+
search_opportunities and get_opportunity endpoints described here.What does `search_opportunities` return for each result, and how does it differ from `get_opportunity`?+
title, opportunity_id, opportunity_number, agency, status, close_date, and posted_date. The get_opportunity endpoint returns the full record — description, cost_sharing, archive_date, documents array, version, and last_updated — fields that are absent from search result items.Can I filter by a specific federal agency?+
search_opportunities endpoint does not currently expose an agency filter parameter; agency name appears in search results but cannot be used as a query filter directly. You can filter by category, eligibility, funding_instrument, and status. You can fork this API on Parse and revise it to add an agency filter if the underlying data supports that parameter.Is there a limit to how many results I can retrieve?+
total field in the response tells you how many total matching opportunities exist, so you can calculate the number of pages needed and paginate through them using the page parameter.Does the API expose applicant contact information or agency program officer details?+
get_opportunity endpoint includes a contact information field in its documented return set, but granular program officer details such as direct phone numbers or email addresses are not guaranteed across all listings — coverage depends on what the sponsoring agency provides. If you need structured contact extraction beyond what the current endpoint returns, you can fork this API on Parse and revise it to surface those fields.