GrantWatch APIgrantwatch.com ↗
Access GrantWatch grant listings, foundation funders, and categories via API. Search by keyword, recipient type, or browse new and trending grants.
What is the GrantWatch API?
The GrantWatch API provides 8 endpoints for discovering grant opportunities and grant-making foundations indexed on GrantWatch.com. Use search_grants to run keyword searches across thousands of listings and retrieve fields like title, deadline, amount, and description, or use get_grant_detail to pull structured metadata sections for a specific grant by its GrantWatch ID. Recipient-type filters are available for individuals, nonprofits, and small businesses.
curl -X GET 'https://api.parse.bot/scraper/d19795cb-310a-442d-9d61-df5b51c9c90c/search_grants?page=1&keyword=education&recipients=1' \ -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 grantwatch-com-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.
from parse_apis.grantwatch_api import GrantWatch, Grant, Category, Foundation, Recipient
gw = GrantWatch()
# Search for grants filtered to nonprofits using the Recipient enum
for grant in gw.grants.search(keyword="education", recipients=Recipient.NONPROFITS, limit=5):
print(grant.title, grant.deadline, grant.url)
# Refresh a grant to get full details (metadata, is_truncated)
full = grant.refresh()
print(full.title, full.is_truncated, full.metadata)
# List all categories
for category in gw.categories.list():
print(category.id, category.name, category.slug)
# Search foundations by name keyword
for foundation in gw.foundations.search(keyword="health", limit=10):
print(foundation.name, foundation.location, foundation.description)
Full-text search over grant listings with optional recipient-type filter. Returns paginated results with title, description, deadline, and amount. Pagination via page param (1-based). Each result includes a GrantWatch ID usable with get_grant_detail for full metadata.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| keyword | string | Search keyword to filter grants by title or description. |
| recipients | string | Comma-separated list of recipient IDs to filter by eligible recipient type. |
{
"type": "object",
"fields": {
"page": "string indicating the current page number",
"count": "integer total number of results on this page",
"results": "array of grant objects with id, title, url, description, deadline, amount"
},
"sample": {
"data": {
"page": "1",
"count": 100,
"results": [
{
"id": "229704",
"url": "https://www.grantwatch.com/grant/229704/prizes-for-usa-ihes-to-develop-nutrition-education-curriculum-for-medical-education-.html",
"title": "Prizes for USA IHEs to Develop Nutrition Education Curriculum for Medical Education",
"amount": null,
"deadline": "09/15/26",
"description": "Opportunity for USA nonprofit, private, and public academic institutions to compete for prizes..."
}
]
},
"status": "success"
}
}About the GrantWatch API
Grant Search and Discovery
The search_grants endpoint accepts a keyword string and an optional recipients parameter (comma-separated recipient type IDs) to filter the full grant index. Each result in the results array includes an id field, a title, a short description, a deadline, and an amount. Pagination is 1-based via the page parameter. The returned id is the GrantWatch numeric grant ID, which feeds directly into get_grant_detail for expanded data.
Grant Detail and Metadata
get_grant_detail takes a required grant_id (numeric string) and returns a structured details object keyed by section names (e.g. eligibility, purpose), a metadata object with labeled values including deadline and grantwatch_id, and an is_truncated boolean. When is_truncated is true, the full grant description and application links are only accessible to GrantWatch subscribers; the partial content still includes title and key metadata fields.
Recipient-Type and New Grant Feeds
Three pre-filtered endpoints — list_grants_for_individuals, list_grants_for_nonprofits, and list_grants_for_small_businesses — return paginated grant lists scoped to each recipient type, using the same response shape as search_grants. The list_new_grants endpoint returns a single non-paginated page of the most recently added or updated grants, useful for monitoring additions to the index.
Foundation Search and Categories
search_foundations accepts a keyword for funder name lookup and returns paginated results with name, url, location, and description (when available). get_grant_categories returns the full list of grant topic categories as an array of objects with id, slug, and name — these can be used to understand the taxonomy GrantWatch uses to organize listings.
The GrantWatch API is a managed, monitored endpoint for grantwatch.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when grantwatch.com 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 grantwatch.com 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?+
- Building a grant discovery tool that lets nonprofit staff search by keyword and filter by recipient type using search_grants
- Monitoring newly posted funding opportunities daily with list_new_grants to alert subscribers when relevant grants appear
- Pulling structured grant metadata (deadline, eligibility sections) via get_grant_detail to populate an internal funding database
- Filtering the full grant index to only small business-eligible grants using list_grants_for_small_businesses
- Mapping the GrantWatch category taxonomy with get_grant_categories to build a browsable topic directory
- Searching for grant-making foundations by funder name via search_foundations to build prospect lists for development teams
- Aggregating individual grants with list_grants_for_individuals to surface funding options for artists, researchers, or students
| 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 GrantWatch have an official developer API?+
What does get_grant_detail actually return, and when is content truncated?+
details object with named content sections (e.g. eligibility, grant purpose), a metadata object with fields like deadline and grantwatch_id, and the grant url. The is_truncated boolean is true when the full description and application links are behind a GrantWatch subscription — in that case you still receive the title and available metadata, but the detail sections will be incomplete.Can I filter search_grants by grant category or geographic region?+
search_grants endpoint supports filtering by keyword and by recipients (recipient type IDs). Filtering by category ID or geographic region is not currently exposed as a parameter. The API does include get_grant_categories to retrieve the category taxonomy. You can fork this API on Parse and revise it to add a category or location filter endpoint.Does the foundations endpoint return grant amounts or program areas for each foundation?+
search_foundations endpoint returns name, url, location, and description (when available). Grant amounts, program focus areas, or giving history per foundation are not currently included in the response. You can fork this API on Parse and revise it to add a foundation detail endpoint that surfaces those fields.How does pagination work across the listing endpoints?+
page integer parameter. The response includes a page string and a count integer reflecting the number of results on that page — not the total across all pages. list_new_grants does not support pagination and returns a single page of the most recent additions.