Files
- data.json: every programme, call and fact with its source, quote and checked date.
- data.schema.json: the JSON Schema of data.json, with the field descriptions below.
- data.csv: one row per call, plus one row for each programme with no call, for spreadsheets.
- feed.xml: an Atom feed of the calls of listed programmes, up to the 100 most recently updated; a call that opens, closes or changes its deadline date shows up as a new entry.
- health.json: the latest run of the checking job: when it ran, and how many funder pages were due, unchanged, changed or could not be read.
- llms.txt: an index for AI agents, with a Markdown copy of every page; llms-full.txt is all of them in one file.
The files are built from the main branch of the public repository each time the site is deployed. No key or sign-up is needed.
How to read a fact
- A fact the funder states has an evidence object: the page it was read from, the exact words that state it, and the day we read them.
- For a fact the funder states (amount, geography, who can apply, co-funding, a call’s opens and deadline),
nullmeans the pages we read don’t say. It never means “no” or “none”. Two exceptions: a rolling programme’s deadline is null because the funder says there is none, and a date the funder gives without a year or an exact day stays null and is written in the call’srecurringorexpectedinstead. - Who can apply and where are our categories, from the funder’s words; read the quote before deciding you qualify. The approaches are our own classification and have no quote.
- A deadline is filled in only when the funder gives the date with its year. We never work one out from “every March” or last year’s round.
- data.json keeps each call’s status from its last check, with the day in its evidence. The finder and the Markdown pages also show a call as closed once its deadline date has passed. Check the funder’s page before you apply.
- The finder flags a listing checked over 30 days ago and hides one checked over 90 days ago; data.json still includes it, with its date.
- Quotes are the funders’ words and are not covered by our licence. Keep them short and link the source.
Stable links
We don’t change a programme’s id, so https://naturefunding.org/p/{id}/ stays a working link. Each fact on that page has its own anchor for citing: #amount, #geography, #applicant_types, and for a call #call-{call id}-deadline. Adding .md in place of the last slash gives the page as Markdown.
Example
The names of the programmes whose stored call status is “open”, rolling programmes included. That is the last check, not the finder’s “open now” list:
curl -s https://naturefunding.org/data.json | jq -r '
.programmes[]
| select(any(.calls[]; .status == "open"))
| .name'Fields
The JSON Schema has the types; the schema in the repository’s src/data/schema.ts is the full contract, with the rules that tie fields together.
The file
In the top level of data.json.
name- Title of the dataset.
url- The site.
license- SPDX licence of the data. Quotes are the funders’ words and are not covered.
attribution- How to credit the data.
source- The repository the data is built from.
generated_on- The day this file was built (YYYY-MM-DD). Statuses are as of the evidence dates, not this day.
note- How to read the evidence.
programmes- Every programme, including ones hidden from the finder after 90 days without a check.
Programme
In each item of programmes.
id- Stable identifier and URL slug: the listing is /p/{id}/. Facts change; the id does not.
name- The programme’s name, as the funder writes it.
funder- The organisation that provides the money.
administered_by- The organisation that runs the call for the funder (for example a UNDP country office), or null.
parent- The id of the umbrella programme this one belongs to (a country programme’s global programme), or null.
url- The funder’s main page for the programme.
summary- One or two sentences in naturefunding.org’s own words. Not a quote.
kind- “partnership” for paid work under contract (planting partners), which is not a grant. Missing means grant.
approaches- naturefunding.org’s classification of the work it supports, from the funder’s description.
applicant_types- Who can apply, in our categories from the funder’s words (the quote is in evidence), or null when the pages we read don’t say.
geography- Where projects can be, in our categories from the funder’s words (the quote is in evidence), or null when the pages we read don’t say.
access- How an applicant reaches the money: direct (apply to an open call), intermediary (apply to a partner, not the funder), invitation_only (no unsolicited proposals), unspecified.
window- fixed (rounds with deadlines), rolling (apply any time) or unspecified.
amount- Grant size in the funder’s currency, or null when not stated.
co_finance_required- true or false when the funder says whether co-funding is required; null when it doesn’t.
reporting- What the funder asks grantees to report, in our words, or null.
calls- The rounds of applications we found. Intermediary and invitation-only programmes list none.
evidence- For each stated programme-level fact, where it was read: the field name maps to an evidence object.
checked_at- The oldest evidence date: every fact in this programme was read on or after this day (YYYY-MM-DD).
Call
In each item of a programme’s calls.
id- Identifier of the call, unique within its programme.
label- The call’s name, as the funder writes it.
url- The funder’s page for this call.
status- upcoming, open, closed, suspended or unknown, as of evidence.status.checked_at. A call closed because its stated deadline passed carries its deadline evidence there instead.
opens- The date the call opens (YYYY-MM-DD), only when the funder states a firm date with its year; else null.
deadline- The deadline, only when the funder states it with its year; else null. Never inferred.
evidence- Where status, opens, deadline and recurring were read.
expected- When the funder expects an upcoming call to open, in its own words (“June 2027”). Firm dates go in opens.
recurring- Dates the funder gives without a year, repeating each year, in our words.
note- A condition the funder puts on the call, in our words (“Subject to funding approval”).
Evidence
In each value of an evidence object.
source_url- The page the fact was read from: the funder’s, or the organisation running the programme.
quote- The exact words on that page that state the fact. The funder’s words, not covered by our licence.
checked_at- The last day we read that page and found these words (YYYY-MM-DD).
method- How it was read: page (read from the web page), api (a funder’s API) or human (a person re-read the page by hand).
Amount
In a programme’s amount.
currency- ISO 4217 currency code.
min- The smallest grant, when stated.
max- The largest grant, when stated.
typical- true when the funder gives a usual range (“typically”), not hard limits.
max_exclusive- true when the funder says “less than” the max, not “up to”.
per- “year” when the amount is per year, not per grant.
note- A qualifier from the same quote, in our words.
Geography
In a programme’s geography.
scope- global (anywhere), countries (a list) or regions (a group the funder names, such as “ODA-eligible countries”).
countries- ISO 3166-1 alpha-2 country codes.
regions- Broad regions the group covers.
label- The funder’s own name for the area or group.
Deadline
In a call’s deadline.
date- The deadline day (YYYY-MM-DD).
time- The cutoff time (HH:MM), when the funder states one.
timezone- The time zone of the cutoff time, when the funder states one: an IANA name where we could map it, otherwise the funder’s abbreviation or offset (“CEST”, “EDT (UTC-4)”).
text- The deadline as the funder wrote it.
Organisation
In funder and administered_by.
name- The organisation’s name.
url- The organisation’s website.
Licence
The data is licensed CC BY 4.0: you can reuse it, including commercially, if you credit “naturefunding.org (Restoration Scope)”, link to https://naturefunding.org and the licence, and say if you changed the data. Quotes are the funders’ words and are not covered. The code is MIT-licensed.