Every page on this site is also a JSON endpoint. No key, no sign-up, no
rate limit, and Access-Control-Allow-Origin: * on everything — so you
can call it straight from a browser. Rebuilt once a day from the EU Official Journal.
{
"id": "533447-2026",
"title": "Germany – Cleaning services – Unterhaltsreinigung",
"buyer": "Landkreis Marburg-Biedenkopf",
"country": "DEU",
"country_name": "Germany",
"cpv_divisions": ["90"],
"cpv_main": "90910000",
"cpv_main_label": "Cleaning services",
"contract_nature": "services",
"place_of_performance": "DE724",
"published": "2026-08-03",
"deadline": "2026-09-15T10:15:00+02:00",
"url": "…/n/533447-2026.html",
"ted_url": "https://ted.europa.eu/en/notice/-/detail/533447-2026"
}curl -s https://jaydemks.github.io/bidledger/api/sectors.json | jq '.[0]'
# every open construction tender in Italy
curl -s https://jaydemks.github.io/bidledger/api/c/ITA.json | jq '[.[] | select(.cpv_divisions[]=="45")] | length'It is a static site, so there is no query language: you fetch a whole collection and
filter it yourself. The largest file is /api/index.json, a few megabytes.
Everything is regenerated once a day, so cache it rather than polling.
Closed calls are dropped from the API the day their deadline passes, though their page is kept for 60 days as a record.
The data comes from TED and is re-used under the European Commission's open data policy; it stays free under the same terms. Attribution is appreciated but not required. There is no uptime guarantee and no support — it is a static file on GitHub Pages. If you build something with it, the code is here.
This API covers what is open. What was already won — 374,443 contract awards with the winning company and the value converted to euro — is published as a dataset on Hugging Face, free and re-usable.
Every sector and country page has an RSS feed, and the daily email lands in your inbox instead.
Daily alerts