Aanbestedingsradar: wie krijgt de overheidsopdrachten?
Zie per kwartaal welke bedrijven Nederlandse overheidsopdrachten winnen, in welke sector en voor welk bedrag, met hun KvK-nummer, LEI en moedermaatschappij.
geef_project("aanbestedingsradar")geef_bron("ted-aanbestedingen")geef_bron("tenderned")geef_bron("gleif-lei")
Ik heb het project, de geteste aanroepen en de valkuilen. Ik bouw een dashboard met TED, Europese aanbestedingen, TenderNed aanbestedingen en GLEIF, wereldwijd register van LEI-codes. Zo kan het eruitzien:
Dit bouw je zelf. Kopieer de prompt naar Claude, ChatGPT of Cursor, met de MCP-server aan, of volg de stappen hieronder.
Per sector CPV · aantal · waarde
79Zakelijke diensten431€ 4,9 mld77Groen en tuinbouw174€ 160 mln45Bouwwerkzaamheden168€ 4,7 mld72IT-diensten145€ 1,4 mld71Architecten en ingenieurs134€ 312 mln90Afval, riool en milieu124€ 441 mln
Vaakst gekozen # = aankondigingen
| KvK | Leverancier | # | Waarde* | LEI |
|---|---|---|---|---|
| 06073970 | Cloudwisevooral onderwijsinkoop | 24 | € 2,1 mln | — |
| 05086034 | Poelsema Landschapsonderhoud en HandelStaatsbosbeheer, symbolisch € 1 | 23 | € 0 | — |
| 56515154 | Haskoning Nederland B.V.LEI 724500JGY5BCHI34ZY08↳ moeder: Koninklijke Haskoning Groep B.V. | 15 | € 11,5 mln | ✓ |
| 06042440 | Heutink B.V. | 14 | € 6,2 mln | — |
| 29021830 | Antea Nederland B.V. | 11 | € 1,6 mln | — |
| 34045532 | Canon Nederland N.V. | 10 | € 15,2 mln | ✓ |
Dit is een mockup, geen werkende versie, met de cijfers uit onze proefdraai van 16 oktober 2026 (TED en TenderNed voor juli tot en met september 2026, GLEIF van die dag). De MCP-server zet je aan met het adres op Voor AI.
Voor wie
Onderzoeksjournalisten die geldstromen volgen, ondernemers die de concurrentie willen kennen, inkopers die marktonderzoek doen, en onderzoekers naar overheidsinkoop.
Wat je krijgt
Een dashboard met per kwartaal de gunningen van Nederlandse aanbesteders: aantal en bedrag per sector (CPV-hoofdgroep), de leveranciers die het vaakst winnen, en per leverancier het KvK-nummer, de LEI en de moedermaatschappij. Daarnaast het totaal aantal publicaties in TenderNed, ook onder de Europese drempels.
Proefdraai op 16 oktober 2026 voor juli tot en met september 2026: 2.243 gunningsaankondigingen in TED van Nederlandse aanbesteders, 2.000 met een winnaar, samen 15.941 miljoen euro aan opgegeven waarde (raamovereenkomsten tellen met hun maximum). Zakelijke diensten (CPV 79) had de meeste aankondigingen (431, 4.928 miljoen), gevolgd door groen en tuinbouw (174) en bouw (168, 4.728 miljoen). Vaakst gekozen: Cloudwise (24 keer, vooral via onderwijsinkoop), Poelsema Landschapsonderhoud (23, allemaal voor Staatsbosbeheer, met een symbolisch bedrag van 1 euro) en Haskoning Nederland (15). Haskoning en Canon Nederland hebben een LEI (moeders: Koninklijke Haskoning Groep en キヤノン株式会社, Canon Inc.), de andere vier niet. TenderNed telde in hetzelfde kwartaal 6.790 publicaties.
Aankondigingen op TED van Nederlandse aanbesteders: 22.755 aankondigingen in 2025, 68% meer dan in 2017
Aankondigingen op TED van Nederlandse aanbesteders, 2017 – 2025, in aankondigingen. Dat is het hoogste punt in de reeks.
Zo zou je kunnen starten6 stappen
- 1
Haal de gunningen op uit TED
TED (Tenders Electronic Daily) is de Europese aanbestedingskrant: alles boven de Europese drempels. De zoek-API is POST, zonder sleutel. form-type=result zijn de gunningen; buyer-country=NLD de Nederlandse aanbesteders. In fields kies je de velden: winner-identifier (meestal het KvK-nummer), organisation-name-tenderer (de namen, per taal), total-value en main-classification-proc (CPV-code). Niet elke gunning heeft een winnaar: de eerste hieronder niet.
curl -X POST "https://api.ted.europa.eu/v3/notices/search" \ -H 'Content-Type: application/json' -d '{"query":"buyer-country=NLD AND form-type=result AND publication-date>=20260701 AND publication-date<=20260930","fields":["publication-number","publication-date","buyer-name","winner-identifier","organisation-name-tenderer","total-value","total-value-cur","main-classification-proc"],"limit":2,"page":1,"paginationMode":"PAGE_NUMBER"}'{"notices":[ {"publication-number":"449383-2026","publication-date":"2026-07-01+02:00","buyer-name":{"nld":["LOGOS, Stichting voor Protestants Christelijk Onderwijs"]},"main-classification-proc":["39100000"], "links":{…}}, {"winner-identifier":["17239940"],"publication-number":"449418-2026","publication-date":"2026-07-01+02:00","buyer-name":{"nld":["Stichting Fioretti Teylingen"]}, "total-value-cur":["EUR"],"main-classification-proc":["30200000"],"organisation-name-tenderer":{"nld":["Bechtle B.V."]},"total-value":3300000, "links":{…}}], "totalNoticeCount":2243,"iterationNextToken":null,"timedOut":false} - 2
Pagineer, en lees nummers en namen in dezelfde volgorde
limit hoogstens 250, page × limit hoogstens 15.000; 2.243 gunningen zijn 9 pagina's. Bij een raamovereenkomst met meer winnaars is winner-identifier een lijst en staan de namen in organisation-name-tenderer in dezelfde volgorde (in ons kwartaal klopte dat bij 1.998 van de 2.000). winner-name geeft dan maar één naam: gebruik dat veld niet. Bijna altijd is het nummer een KvK-nummer van 8 cijfers (2.731 keer), soms een btw-nummer of buitenlands nummer (268 keer).
curl -X POST "https://api.ted.europa.eu/v3/notices/search" \ -H 'Content-Type: application/json' -d '{"query":"buyer-country=NLD AND form-type=result AND publication-date>=20261001","fields":["publication-number","total-value","total-value-cur","winner-identifier","winner-name","organisation-identifier-tenderer","organisation-name-tenderer"],"limit":2,"paginationMode":"PAGE_NUMBER"}'{"notices":[{"winner-identifier":["39050726","88307085","34346504"], "organisation-identifier-tenderer":["39050726","88307085","34346504"], "publication-number":"674647-2026","total-value-cur":["EUR"], "organisation-name-tenderer":{"nld":["International Security Partners B.V.","Otentica B.V.","Validata Group B.V."]}, "links":{…},"winner-name":{"nld":["International Security Partners B.V."]},"total-value":3900000}, {"publication-number":"674737-2026","total-value-cur":["EUR"],"links":{…},"total-value":512000}], "totalNoticeCount":350,"iterationNextToken":null,"timedOut":false} - 3
Kijk naar alle aanbestedingen in TenderNed
TenderNed heeft ook de nationale aanbestedingen. De publicatie-webservice geeft met size=1 het totaal in totalElements; typeOpdracht kiest leveringen (L), diensten (D) of werken (W). In juli tot en met september 2026: 6.790 publicaties, waarvan 866 werken. Andere filters (typePublicatie, europees) worden stil genegeerd, en vóór 2022 is de webservice onvolledig.
https://www.tenderned.nl/papi/tenderned-rs-tns/v2/publicaties?page=0&size=1&publicatieDatumVanaf=2026-07-01&publicatieDatumTot=2026-09-30&typeOpdracht=W
{"content":[{"publicatieId":"442341","publicatieDatum":"2026-09-30","typePublicatie":{"code":"MAC","omschrijving":"Marktconsultatie"}, "aanbestedingNaam":"Nieuwe energiecentrale in Den Helder","opdrachtgeverNaam":"Rijksvastgoedbedrijf", … "typeOpdracht":{"code":"W","omschrijving":"Werken"},"digitaal":true,"europees":false, …}], "first":true,"last":false,"totalElements":866,"totalPages":866,"size":1,"numberOfElements":1,"number":0} - 4
TenderNed noemt de winnaar niet
Ook een gunningspublicatie (AGO, formType result) heeft in de webservice alleen isGegund, de CPV-codes en de opdrachtgever, geen opdrachtnemer of bedrag. Voor winnaars gebruik je TED (boven de drempels) of de jaarbestanden van TenderNed (OCDS-JSON, 58 tot 116 MB per jaar, met awards en suppliers; let op de persoonsgegevens van contactpersonen).
https://www.tenderned.nl/papi/tenderned-rs-tns/v2/publicaties/444576
{"publicatieId":444576,"kenmerk":618608,"aanbestedingNaam":"Point of Sale, Banqueting en App eten & drinken HvA-UvA", "opdrachtgeverNaam":"Universiteit van Amsterdam", … "typePublicatie":"Aankondiging gegunde opdracht - algemene richtlijn, standaardregeling", "publicatieCode":"EF29", … "cpvCodes":[…,{"isHoofdOpdracht":true,"code":"48110000-2","omschrijving":"Software voor verkooppunten"}], … "isGegund":true, … "aankondigingCode":{"code":"AGO","omschrijving":"Aankondiging gegunde opdracht"}, … "formType":"result", …} - 5
Van KvK-nummer naar LEI
GLEIF (CC0, geen sleutel) zoekt op entity.registeredAs, het KvK-nummer; registratie-autoriteit RA000463 is de Kamer van Koophandel. Voorloopnullen horen erbij ('05086034'). Veel mkb-bedrijven hebben geen LEI; vaak heeft alleen de holding er een. Zet curl op -g vanwege de blokhaken.
https://api.gleif.org/api/v1/lei-records?filter[entity.registeredAs]=56515154&filter[entity.legalAddress.country]=NL
{"meta":{"goldenCopy":{"publishDate":"2026-10-16T08:00:00Z"},"pagination":{"currentPage":1,"perPage":15,"from":1,"to":1,"total":1,"lastPage":1}}, "links":{…},"data":[{"type":"lei-records","id":"724500JGY5BCHI34ZY08","attributes":{"lei":"724500JGY5BCHI34ZY08", "entity":{"legalName":{"name":"Haskoning Nederland B.V.","language":"nl"}, "otherNames":[{"name":"HaskoningDHV Nederland B.V.","language":"nl","type":"PREVIOUS_LEGAL_NAME"}], … "registeredAt":{"id":"RA000463","other":null},"registeredAs":"56515154","jurisdiction":"NL", …}, "registration":{… "status":"ISSUED", …}}, …}]} - 6
Volg het concern naar boven
ultimate-parent geeft de top van het concern, als die zelf een LEI heeft en de relatie gemeld is. Zo zie je dat Canon Nederland onder Canon Inc. in Japan valt (naam in het Japans) en Haskoning Nederland onder Koninklijke Haskoning Groep.
https://api.gleif.org/api/v1/lei-records/724500JGY5BCHI34ZY08/ultimate-parent
{"meta":{"goldenCopy":{"publishDate":"2026-10-16T08:00:00Z"}},"data":{"type":"lei-records","id":"724500HYZARZBIG4VP03", "attributes":{"lei":"724500HYZARZBIG4VP03","entity":{"legalName":{"name":"Koninklijke Haskoning Groep B.V.","language":"nl"}, "otherNames":[{"name":"Koninklijke HaskoningDHV Groep B.V.","language":"nl","type":"PREVIOUS_LEGAL_NAME"}], … "legalAddress":{… "city":"Amersfoort", … "country":"NL","postalCode":"3818EX"}, …
Hoe de bronnen samenkomen
- TED, Europese aanbestedingenGLEIF, wereldwijd register van LEI-codesvia
winner-identifier (KvK-nummer, 8 cijfers) = entity.registeredAsTED geeft bij Nederlandse winnaars bijna altijd het KvK-nummer. Dat is in GLEIF het veld registeredAs (registratie-autoriteit RA000463). Zo krijg je de officiële naam, de status van de LEI en de moedermaatschappij. Btw-nummers (NL…B01) en buitenlandse nummers koppel je zo niet.
- TED, Europese aanbestedingenTenderNed aanbestedingenvia
geen gedeelde sleutel; opdrachtgever, titel en datumEuropese aanbestedingen staan in beide (TenderNed stuurt ze door naar TED). TenderNed heeft ook de nationale, maar zonder winnaar in de webservice. Gebruik TED voor de winnaars en TenderNed voor het totale volume per soort opdracht.
Laat AI het bouwen
Plak deze prompt in Claude, ChatGPT, Cursor of Lovable. Hij noemt de echte endpoints, de koppelsleutels en de valkuilen, zodat de assistent meteen werkende code schrijft. Controleer de uitkomst altijd met de bron zelf.
Bouw een dashboard (Python met pandas en Streamlit, of Next.js) dat per kwartaal laat zien welke bedrijven Nederlandse overheidsopdrachten winnen, in welke sector en voor hoeveel.
Bron 1, TED (geen sleutel): POST https://api.ted.europa.eu/v3/notices/search met JSON
{"query":"buyer-country=NLD AND form-type=result AND publication-date>=20260701 AND publication-date<=20260930","fields":["publication-number","publication-date","buyer-name","winner-identifier","organisation-name-tenderer","total-value","total-value-cur","main-classification-proc"],"limit":250,"page":1,"paginationMode":"PAGE_NUMBER"}
- limit hoogstens 250, page × limit hoogstens 15.000. Meer nodig: paginationMode ITERATION met iterationNextToken. Het totaal staat in totalNoticeCount.
- Datums als JJJJMMDD in de query. De zoekindex begint in oktober 2016; sinds eind 2023 zijn het eForms (andere velden dan daarvoor).
- winner-identifier is een lijst (raamovereenkomst = meer winnaars), meestal KvK-nummers van 8 cijfers. organisation-name-tenderer is een object per taal ({"nld":[…]}) met de namen in dezelfde volgorde. Gebruik winner-name niet: dat geeft één naam, ook bij drie winnaars.
- total-value is het bedrag van de hele aankondiging, bij raamovereenkomsten vaak het maximum. Verdeel het niet over winnaars; toon "bedrag als enige winnaar" apart.
- Veel aanbesteders vullen 1 euro in als het bedrag vertrouwelijk is (Staatsbosbeheer, Gasunie, Defensie): tel bedragen onder 1.000 euro als onbekend. Alleen EUR optellen.
- Gunningen zonder winner-identifier zijn niet gegund of de winnaar is niet gepubliceerd.
- Sector: de eerste twee cijfers van main-classification-proc (CPV-hoofdgroep), bijvoorbeeld 45 bouw, 72 IT-diensten, 79 zakelijke diensten.
Bron 2, GLEIF (CC0, geen sleutel): https://api.gleif.org/api/v1/lei-records?filter[entity.registeredAs]=<KvK>&filter[entity.legalAddress.country]=NL en /lei-records/<LEI>/ultimate-parent
- Voorloopnullen horen bij het KvK-nummer. Veel bedrijven hebben geen LEI (vaak alleen de holding): toon dan "geen LEI", niet een fout.
- Rustig aan: één verzoek tegelijk, cache de antwoorden.
Bron 3, TenderNed (geen sleutel): https://www.tenderned.nl/papi/tenderned-rs-tns/v2/publicaties?page=0&size=1&publicatieDatumVanaf=2026-07-01&publicatieDatumTot=2026-09-30&typeOpdracht=W
- totalElements is het aantal. typeOpdracht L, D of W. Onbekende filters worden genegeerd. Geen winnaars in deze webservice.
Uitkomst: kies een kwartaal; kaarten met aantal gunningen, aantal met winnaar en opgegeven waarde; een staafgrafiek per CPV-hoofdgroep; een tabel van leveranciers (KvK, naam, aantal gewonnen, bedrag als enige winnaar, LEI, moeder) met een zoekveld; en naast TED het TenderNed-totaal per soort opdracht. Zet bij elk bedrag "opgegeven waarde, raamovereenkomsten met hun maximum".
Probeer het zelf
De kern van het project in een klein script. Nodig: Node 20 of nieuwer (ingebouwde fetch); draai met: node aanbestedingsradar.mjs (ruim een halve minuut). Getest op 2026-10-16; hieronder de echte uitvoer van die proefdraai.
// Aanbestedingsradar: wie wint Nederlandse overheidsopdrachten, in welke sector, voor hoeveel?
// Bronnen: TED (EU-aanbestedingen, POST-zoek-API), TenderNed (publicatie-webservice) en GLEIF (LEI-register). Geen sleutels. Node 20+.
const UA = { "User-Agent": "mijn-project/1.0 (+jij@voorbeeld.nl)" };
const VAN = "2026-07-01", TOT = "2026-09-30";
const CPV = { "03": "Landbouwproducten", "09": "Brandstof en energie", 15: "Voeding", 22: "Drukwerk", 30: "Kantoor- en computeruitrusting",
31: "Elektrische apparatuur", 32: "Telecomapparatuur", 33: "Medische apparatuur en medicijnen", 34: "Vervoermiddelen", 35: "Veiligheid en defensie",
38: "Laboratoriumapparatuur", 39: "Meubilair en schoonmaak", 42: "Industriële machines", 44: "Bouwmaterialen", 45: "Bouwwerkzaamheden",
48: "Software", 50: "Reparatie en onderhoud", 51: "Installatie", 55: "Horeca", 60: "Vervoer", 63: "Ondersteunend vervoer", 64: "Post en telecom",
65: "Nutsvoorzieningen", 66: "Financiële diensten", 70: "Vastgoed", 71: "Architecten en ingenieurs", 72: "IT-diensten", 73: "Onderzoek",
75: "Overheidsdiensten", 77: "Groen en tuinbouw", 79: "Zakelijke diensten", 80: "Onderwijs", 85: "Zorg en welzijn", 90: "Afval, riool en milieu",
92: "Recreatie en cultuur", 98: "Overige diensten" };
// 1. TED: alle gunningen (form-type=result) van Nederlandse aanbesteders. Max 250 per pagina, page x limit max 15.000.
const ted = [];
for (let page = 1; ; page++) {
const r = await fetch("https://api.ted.europa.eu/v3/notices/search", { method: "POST", headers: { ...UA, "Content-Type": "application/json" },
body: JSON.stringify({ query: `buyer-country=NLD AND form-type=result AND publication-date>=${VAN.replaceAll("-", "")} AND publication-date<=${TOT.replaceAll("-", "")}`,
fields: ["publication-number", "total-value", "total-value-cur", "winner-identifier", "organisation-name-tenderer", "main-classification-proc"],
limit: 250, page, paginationMode: "PAGE_NUMBER" }) });
const j = await r.json();
ted.push(...j.notices);
if (j.notices.length < 250) break;
}
// winner-identifier is meestal het KvK-nummer (8 cijfers), soms een btw-nummer. Namen staan per taal in organisation-name-tenderer,
// in dezelfde volgorde als de nummers. Bij meer winnaars (raamovereenkomst) is total-value het bedrag van de hele aankondiging.
const winnaar = {}, sector = {};
let metWinnaar = 0, waarde = 0, zonderBedrag = 0;
for (const n of ted) {
const ids = n["winner-identifier"] ?? [];
// Bedrag: alleen EUR. Veel aanbesteders vullen 1 euro in als het bedrag vertrouwelijk is (Staatsbosbeheer 106 keer):
// tel alles onder 1.000 euro als 'geen bedrag'.
const eur = n["total-value-cur"]?.[0] === "EUR" && n["total-value"] >= 1000 ? n["total-value"] : 0;
if (!eur) zonderBedrag++;
const cpv = (n["main-classification-proc"]?.[0] ?? "??").slice(0, 2);
(sector[cpv] ??= { n: 0, eur: 0 }).n++; sector[cpv].eur += eur;
if (!ids.length) continue; // geen winnaar: niet gegund of geheim
metWinnaar++; waarde += eur;
const namen = Object.values(n["organisation-name-tenderer"] ?? {})[0] ?? [];
ids.forEach((id, i) => { const w = (winnaar[id] ??= { naam: namen[i] ?? "?", n: 0, eur: 0, alleen: 0 }); w.n++; w.eur += eur; if (ids.length === 1) w.alleen += eur; });
}
const mln = (x) => (x / 1e6).toLocaleString("nl-NL", { maximumFractionDigits: 1 });
console.log(`TED, ${VAN} t/m ${TOT}: ${ted.length} gunningsaankondigingen van Nederlandse aanbesteders, ${metWinnaar} met winnaar, samen ${mln(waarde)} mln euro`);
console.log(` (${zonderBedrag} aankondigingen zonder bruikbaar bedrag: leeg, andere munt of symbolisch 1 euro)`);
console.log("\nSectoren (CPV-hoofdgroep), meeste aankondigingen:");
for (const [c, s] of Object.entries(sector).sort((a, b) => b[1].n - a[1].n).slice(0, 6))
console.log(` ${c} ${(CPV[c] ?? "?").padEnd(28)} ${String(s.n).padStart(4)} ${mln(s.eur).padStart(7)} mln`);
const top = Object.entries(winnaar).sort((a, b) => b[1].n - a[1].n).slice(0, 6);
console.log("\nVaakst gekozen leveranciers (aantal aankondigingen; bedrag als enige winnaar):");
for (const [id, w] of top) console.log(` ${id.padEnd(9)} ${w.naam.slice(0, 38).padEnd(38)} ${String(w.n).padStart(3)} ${mln(w.alleen).padStart(6)} mln`);
// 2. GLEIF: KvK-nummer -> LEI, officiële naam en moedermaatschappij (alleen als het bedrijf een LEI heeft).
console.log("\nIn het LEI-register (GLEIF):");
for (const [id] of top.filter(([id]) => /^\d{8}$/.test(id))) {
const q = new URLSearchParams({ "filter[entity.registeredAs]": id, "filter[entity.legalAddress.country]": "NL" });
const g = await (await fetch(`https://api.gleif.org/api/v1/lei-records?${q}`, { headers: UA })).json();
const rec = g.data[0];
if (!rec) { console.log(` ${id} geen LEI`); continue; }
const p = await fetch(`https://api.gleif.org/api/v1/lei-records/${rec.id}/ultimate-parent`, { headers: UA });
const moeder = p.ok ? (await p.json()).data?.attributes.entity.legalName.name : null;
console.log(` ${id} ${rec.id} ${rec.attributes.entity.legalName.name} (${rec.attributes.registration.status})${moeder ? `, moeder: ${moeder}` : ""}`);
}
// 3. TenderNed: alle publicaties in dezelfde periode, ook onder de Europese drempels. size=1: alleen het totaal.
const tn = async (extra) => (await (await fetch("https://www.tenderned.nl/papi/tenderned-rs-tns/v2/publicaties?" + new URLSearchParams({
page: 0, size: 1, publicatieDatumVanaf: VAN, publicatieDatumTot: TOT, ...extra }), { headers: UA })).json()).totalElements;
const [alles, L, D, W] = await Promise.all([tn({}), tn({ typeOpdracht: "L" }), tn({ typeOpdracht: "D" }), tn({ typeOpdracht: "W" })]);
console.log(`\nTenderNed, zelfde periode: ${alles} publicaties (leveringen ${L}, diensten ${D}, werken ${W}), van vooraankondiging tot gunning`);
TED, 2026-07-01 t/m 2026-09-30: 2243 gunningsaankondigingen van Nederlandse aanbesteders, 2000 met winnaar, samen 15.941,2 mln euro (496 aankondigingen zonder bruikbaar bedrag: leeg, andere munt of symbolisch 1 euro) Sectoren (CPV-hoofdgroep), meeste aankondigingen: 79 Zakelijke diensten 431 4.928,3 mln 77 Groen en tuinbouw 174 160,1 mln 45 Bouwwerkzaamheden 168 4.727,5 mln 72 IT-diensten 145 1.396,6 mln 71 Architecten en ingenieurs 134 311,6 mln 90 Afval, riool en milieu 124 441,1 mln Vaakst gekozen leveranciers (aantal aankondigingen; bedrag als enige winnaar): 06073970 Cloudwise 24 2,1 mln 05086034 Poelsema Landschapsonderhoud en Handel 23 0 mln 56515154 Haskoning Nederland B.V. 15 11,5 mln 06042440 Heutink B.V. 14 6,2 mln 29021830 Antea Nederland B.V. 11 1,6 mln 34045532 Canon Nederland N.V. 10 15,2 mln In het LEI-register (GLEIF): 06073970 geen LEI 05086034 geen LEI 56515154 724500JGY5BCHI34ZY08 Haskoning Nederland B.V. (ISSUED), moeder: Koninklijke Haskoning Groep B.V. 06042440 geen LEI 29021830 geen LEI 34045532 89450091HV57JX3WQE27 Canon Nederland N.V. (ISSUED), moeder: キヤノン株式会社 TenderNed, zelfde periode: 6790 publicaties (leveringen 1828, diensten 4127, werken 866), van vooraankondiging tot gunning
Waar het misgaat
- Een symbolisch bedrag is geen bedrag: 321 van de 2.243 gunningen in het derde kwartaal van 2026 hadden een total-value van 1 euro of minder (Staatsbosbeheer 106 keer, Gemeente Rotterdam 17, Gasunie 14). Tel bedragen onder 1.000 euro als onbekend, anders lijkt een leverancier met 23 opdrachten niets te verdienen.
- total-value hoort bij de hele aankondiging. Bij een raamovereenkomst met drie winnaars weet je niet wie wat krijgt, en vaak is het een maximum dat nooit wordt gehaald. Tel het bedrag niet bij elke winnaar op; laat 'als enige winnaar' en 'samen met anderen' apart zien.
- winner-name geeft één naam, ook als winner-identifier drie nummers heeft. Gebruik organisation-name-tenderer: die namen staan in dezelfde volgorde als de nummers. En het is een object per taal ({"nld": […]} of {"eng": […]}).
- TED heeft alleen opdrachten boven de Europese drempels. De webservice van TenderNed heeft ook de kleinere, maar geen winnaars: voor wie de nationale opdrachten wint, heb je de jaarbestanden van TenderNed nodig (OCDS, tot 116 MB per jaar, met persoonsgegevens van contactpersonen).
- Geen LEI betekent niet dat het bedrijf niet bestaat. Van de zes vaakst gekozen leveranciers hadden er vier geen LEI; bij Heutink en Poelsema heeft alleen een holding er een (onder een ander KvK-nummer). Zoek op naam alleen als controle, nooit als automatische koppeling.
- Eén aanbesteding levert meer berichten op (vooraankondiging, aankondiging, gunning, wijziging). Wie gunningen telt, filtert op form-type=result; wie aanbestedingen telt, moet berichten van dezelfde procedure samenvoegen.
Verder bouwen
- Volg één aanbesteder: zet buyer-name of de aanbesteder in de query en laat zien bij welke leveranciers een gemeente of ministerie het meeste inkoopt, per jaar sinds 2024.
- Maak een concernoverzicht: groepeer winnaars op hun ultimate-parent uit GLEIF en zie welke internationale groepen via Nederlandse dochters opdrachten winnen.
- Lees een jaarbestand van TenderNed in (streaming, OCDS) en tel ook de nationale gunningen per leverancier. Vergelijk met TED om te zien hoeveel inkoop onder de drempels blijft.
- Stuur een melding bij nieuwe gunningen in jouw sector: draai elke dag de TED-zoekvraag met main-classification-proc en publication-date van gisteren.
Meer met deze data
Publicaties op TenderNed per soort opdracht: het meest diensten (15.390 publicaties), dan leveringen en werken
Publicaties op TenderNed per soort opdracht, 2025, in publicaties. Totaal: 25.797; de grootste 3 van 3 categorieën staan in de grafiek. Diensten is 60% van het totaal. Een publicatie kan bij meer soorten horen: samen 25.935, tegen 25.797 publicaties.
De bronnen3

TED, Europese aanbestedingen
TED (Tenders Electronic Daily) is het aanbestedingsblad van de EU. Elke overheid die boven de Europese drempels inkoopt, moet het hier melden: vooraankondiging, aankondiging, gunning en wijziging, met CPV-code, aanbestedende dienst en vaak de winnaar en het bedrag. De zoek-API werkt zonder sleutel. In 2025 verschenen er 22.755 aankondigingen van Nederlandse aanbesteders, sinds oktober 2016 ruim 183.000.

TenderNed aanbestedingen
TenderNed is het aanbestedingsplatform van de overheid. Elke publicatie (aankondiging, gunning, rectificatie, marktconsultatie …) staat erin met aanbesteder, soort opdracht, procedure en CPV-code. Open zijn de jaarbestanden (JSON in de Open Contracting-standaard, CC0) en een publicatie-webservice; in die webservice stonden op 16 oktober 2026 146.513 publicaties, waarvan 25.797 uit 2025.

GLEIF, wereldwijd register van LEI-codes
Een LEI (Legal Entity Identifier) is een code van twintig tekens die elke rechtspersoon nodig heeft die handelt op de financiële markten. De Global LEI Foundation (GLEIF) publiceert het hele register open: naam, adres, rechtsvorm, KvK-nummer, status en wie de directe en uiteindelijke moedermaatschappij is. Op 16 oktober 2026 hadden 198.915 LEI's een juridisch adres in Nederland, van de ruim 3,4 miljoen wereldwijd.
Gemeentebegroting-verkenner: waar geeft mijn gemeente geld aan uit?
Monitor voor inflatie, hypotheekrente en spaarrente
Nederland naast Europa: een vergelijker voor elke indicator
Zorgkosten-vergelijker per gemeente