Gramscii-IT/european-public-funding
European public funding A map of where public bodies in Italy, and the European Union, publish their calls for grants and funding to businesses (in Italian, bandi; procurement tenders are left out on purpose): which body, on which interface, at which listing, and what the last verification of that interface answered. It holds no calls. Gramscii's Bandi collector reads the calls from these places into its own catalogue; this dataset is the map it reads them by. Every file is… See the full description on the dataset page: https://huggingface.co/datasets/Gramscii-IT/european-public-funding.
European public funding
A map of where public bodies in Italy, and the European Union, publish their calls for grants and funding to businesses (in Italian, bandi; procurement tenders are left out on purpose): which body, on which interface, at which listing, and what the last verification of that interface answered. It holds no calls. Gramscii's Bandi collector reads the calls from these places into its own catalogue; this dataset is the map it reads them by. Every file is written by the collector's own export command and named in manifest.json with its SHA-256 and size.
Files
checks.json and sources.json are tables of uniform rows; the Hub's viewer browses each as its own config (checks, sources). registry.yaml is YAML, and manifest.json is one small header object, not a list of records: read them as files.
Where each body publishes its calls
Every active body, its licence, a link to its own listing (open in a browser: a sitemap, a feed, a WordPress REST endpoint, a listing page, or the site itself for a source read through a search API) and the page of one current call as a live example. Pulled from sources.json; the example is empty for a body with no call open or upcoming on the exporting deployment.
The receipts of 2026-09-16
One receipt per active body: 88 asked, 88 answered on their interface, 0 failed. The 10 still- candidate bodies are read by no source yet, so verify does not check them; the 62 excluded bodies are not asked either — their reason (no readable interface, a JavaScript-only site, a captcha, a login, a refusal, a mirror of another host already read) is in registry.yaml, next to the date it was verified. Newest receipt: 2026-09-16T17:46:39.790694+02:00.
One receipt per body, not summed here: the full 88 rows are in checks.json, browsable as the checks config on the Hub.
observed is what the interface itself declared, with no filter for a call's status: documents of a Solr index, records of a portal, rows of a datastore, posts of a WordPress type, URLs a sitemap lists. A sitemap lists every page a site still serves, closed calls from years ago included, since a sitemap carries no status; the ministry's Solr index counts every call it still indexes, open and closed alike, until it retires one. `observed` is never a count of calls that are open or about to open: this dataset says where calls are listed, not which calls there are.
What is not here, by design
The calls themselves. The collector reads them from 88 sources (listed above: the ministry's catalogue, the EU Funding & Tenders portal, 2 regional bandi portals, 11 regions, 19 regional development agencies (including the special companies some chambers of commerce keep for a sector or run as a distinct legal entity) and 54 chambers of commerce) into its own catalogue, where each call's opening and closing day, budget, labels and regions are read and kept up to date. They are not published here, and no release of this dataset will carry them.
What the dataset is for
- Knowing where to look. Every public body known to publish calls for business grants in Italy, with the exact listing a program can read and the interface it answers on: a sitemap, an RSS or Atom feed, a WordPress or Plone API, a Solr index, a Socrata datastore, a site's own search API, or a listing page.
- Knowing what not to try. Every body left out, with the reason and the day it was verified: no readable interface, a JavaScript-only site, a captcha, a login, a robots.txt refusal, a mirror of a host already read.
- Research on how public funding is published. Which bodies publish where, on which interface, and how those interfaces answer over time.
When it is updated
A release is one commit of this dataset, dated by exported_at in manifest.json. The collector re-checks each active body on its interface after every refresh; a release follows when the map changes: a body added, left out, or verified again. Between releases, this dataset does not change.
Licence
registry.yaml, checks.json, sources.json and manifest.json are the collector's own compilation of facts about public interfaces, published under CC BY 4.0, attribution "Gramscii". The licence column of sources.json states each body's own terms for its pages, which this dataset does not reproduce.
How it is made
The registry is data of the collector, every row verified on the date it carries, one request per second per host, robots.txt honoured. After every refresh the collector re-checks each active body on its interface and keeps a receipt; the export writes the registry as shipped, the newest receipt per body and the manifest.
