Methodology

How this works, and what it does not do

Public funding information is public. The problem is fragmentation: thousands of portals, PDFs and registries in 24 languages. freegrant centralises the records, keeps every version, and links back to the official text. That is all we do with the data. Applications always go through the funder.

1. Sources

Every record comes from an official publisher through an open API or an open data dump. We record the publisher's license on each record. Nothing is scraped from a source that forbids reuse.

SourceLicenseRecordsOpenLast checked
US Grants.govUS Government work, public domain79,39891328 Sept 2026
Spain BDNSBDNS legal notice (infosubvenciones.es)33,0982,24328 Sept 2026
EU Funding & Tenders PortalEuropean Commission reuse policy (Decision 2011/833/EU)10,9505528 Sept 2026
France aides-entreprises.frLicence Ouverte 2.0 (Etalab)2,4582,45828 Sept 2026

Next: Germany Förderdatenbank, Netherlands RVO, Italy incentivi.gov.it, UK Find a Grant, and award histories (CORDIS, BDNS concessions, 360Giving, USAspending).

2. One schema for every country

Each opportunity is normalised into one record: funder and level (EU, national, regional, local), country and regions, funding type (grant, loan, guarantee, tax credit, voucher, equity, prize, procurement), beneficiary types, sectors (NACE codes when the source gives them), amounts, opening and closing dates, status, documents, and the official URL. The schema is published as JSON Schema in the repository and the normalised data is CC0.

3. Nothing is deleted, everything is versioned

Crawls run nightly. A call that disappears from a source is kept and marked by its last-seen date. When the content of a record changes, the previous snapshot is stored, so you can see when a deadline moved or a budget changed. Raw source payloads are archived as received.

4. The fit check: rules, not a model

You fill six fields: country, region, entity type, size, age, sectors (NACE divisions), plus the instruments you want and optional keywords. Every open or forthcoming call in your country and EU-wide is then screened by fixed rules:

A rule returns match, mismatch, or unknown. Fit means no mismatch and at least three matches. Not yet means one or two mismatches, or conditions we could not check: they are listed so you can verify them in the call. Filtered means three or more mismatches. The score is a sum of the rules, nothing else. Same input, same output, every time.

5. Where a model is used, and where it is not

Two places, both optional, both outside the request path of the screening.

Model calls go through Cloudflare AI Gateway, so every call is logged with its cost. No model ever decides a verdict.

6. Privacy

Fit-check inputs (URL, uploaded file, text) and results are stored privately to produce your result page and to improve the screening. They are never published, never indexed, and never sold. The result page is reachable only by its random link.

7. What we do not do

8. Open source

Code is MIT. Normalised data is CC0. Source material keeps its publisher's license. Adding a country is one adapter file. Corrections and new sources are welcome as pull requests.