Opportunity Desk APIopportunitydesk.org ↗
Access grant listings from Opportunity Desk via API. Retrieve deadlines, eligible countries, applicant types, funding amounts, and application URLs for global grants.
What is the Opportunity Desk API?
The Opportunity Desk API provides two endpoints — list_grants and get_grant_details — that expose structured data on grant opportunities published at opportunitydesk.org. list_grants returns paginated summaries including title, publication date, slug, and excerpt, while get_grant_details returns up to nine structured fields per grant including deadline, eligible countries, eligible applicants, grant amount, and the external application URL.
curl -X GET 'https://api.parse.bot/scraper/b5531142-2817-47a6-8a5a-c9b0f6954a30/list_grants?search=climate&per_page=5&page=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 opportunitydesk-org-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: OpportunityDesk SDK — discover and inspect grant opportunities."""
from parse_apis.opportunitydesk_org_api import OpportunityDesk, GrantNotFound
client = OpportunityDesk()
# Search for climate-related grants, capped at 5 results.
for summary in client.grant_summaries.list(search="climate", per_page=5, limit=5):
print(summary.title, "|", summary.date)
# Drill into the first result's full details via summary→detail navigation.
first = client.grant_summaries.list(search="climate", limit=1).first()
if first is not None:
grant = first.details()
print(grant.title)
print("Deadline:", grant.deadline)
print("Amount:", grant.grant_amount)
print("Countries:", grant.eligible_countries)
print("Apply:", grant.application_url)
# Point lookup by slug obtained from the summary.
if first is not None:
try:
detail = client.grants.get(slug=first.slug)
print(detail.title, "—", detail.grant_amount)
except GrantNotFound:
print("Grant no longer available")
print("exercised: grant_summaries.list / details / grants.get")
List grant opportunities from Opportunity Desk with optional search filtering and pagination. Returns grant summaries including title, date, link, and excerpt. Pagination is controlled by page and per_page parameters.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| search | string | Free-text search query to filter grants by keyword. |
| per_page | integer | Number of results per page (1-100). |
{
"type": "object",
"fields": {
"page": "current page number",
"total": "total number of grants matching the query (may be null)",
"grants": "array of grant summary objects with id, slug, title, date, link, excerpt",
"per_page": "results per page",
"total_pages": "total pages available (may be null)"
},
"sample": {
"data": {
"page": 1,
"total": null,
"grants": [
{
"id": 177204,
"date": "2026-08-06T09:05:17",
"link": "https://opportunitydesk.org/2026/08/06/unep-mountains-adapt-small-grants-2026/",
"slug": "unep-mountains-adapt-small-grants-2026",
"title": "Call for Proposals: UNEP Mountains ADAPT Small Grants 2026 (up to $30,000)",
"excerpt": "Deadline: September 15, 2026 Proposals are invited for the UNEP Mountains ADAPT Small Grants 2026..."
}
],
"per_page": 5,
"total_pages": null
},
"status": "success"
}
}About the Opportunity Desk API
Browsing and Searching Grants
The list_grants endpoint returns paginated grant summaries from Opportunity Desk's grants category. Each result includes a numeric id, slug, title, date, link, and excerpt. You can control pagination with the page and per_page parameters (1–100 results per page), and narrow results using the search parameter for free-text keyword filtering. The total and total_pages fields in the response indicate how many grants match, though these may be null for some queries.
Detailed Grant Records
Once you have a grant's id or slug from list_grants, pass either to get_grant_details to retrieve the full structured record. The response includes the grant title, link, deadline (as a date string), grant_amount (with currency), and application_url pointing to the external submission form. Eligibility data is broken out into eligible_countries (an array of country names) and eligible_applicants (an array of applicant types such as Charities, NGOs, or Individuals). Where a grant specifies different funding amounts by sector or individual, those are returned in the grant_amount_details array.
Data Coverage and Freshness
All data reflects what is published under the grants category on Opportunity Desk. Structured fields like deadline, eligible_countries, and grant_amount are extracted from the grant post content, so values depend on how completely each opportunity is described by the source. Fields may return null when the information is not present in the original post.
The Opportunity Desk API is a managed, monitored endpoint for opportunitydesk.org — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when opportunitydesk.org 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 opportunitydesk.org 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 filters by
eligible_countriesfor region-specific funding searches - Alert users to upcoming deadlines by monitoring
deadlinefields across paginatedlist_grantsresults - Match organizations to grants by filtering
eligible_applicantsfor types like NGOs or Charities - Aggregate grant funding ranges by parsing
grant_amountandgrant_amount_detailsacross multiple records - Populate a curated grants database by syncing new entries using the
datefield fromlist_grants - Build a grant application tracker by storing
application_urllinks alongside deadline dates for follow-up reminders - Power a sector-specific funding newsletter by searching
list_grantswith relevant keywords via thesearchparameter
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Opportunity Desk have an official developer API?+
What does get_grant_details return beyond the list summary?+
Can I filter list_grants results by eligible country or applicant type?+
search parameter. Country and applicant-type filtering on structured fields is not available directly through that endpoint. You can fork this API on Parse and revise it to add a filtering endpoint that queries those structured fields from get_grant_details.