[{"data":1,"prerenderedAt":30},["ShallowReactive",2],{"nr-en-ki-vergabe-zuschlaege-ohne-auftragnehmer":3},{"slug":4,"title":5,"dek":6,"date":7,"time":8,"publishedAt":9,"updated":10,"updatedAt":10,"dateFmt":11,"updatedFmt":10,"kind":12,"tier":13,"author":14,"authorName":15,"topics":16,"tracker":22,"trackerLabel":23,"headlineStat":24,"image":25,"ogImage":25,"imageAlt":5,"csv":26,"minutes":27,"words":28,"html":29},"ki-vergabe-zuschlaege-ohne-auftragnehmer","293 of 316 German AI contract awards name no supplier","We set out to build supplier pages and re-processed twelve months of official German procurement data to do it. The pages don't exist — because the official dataset names nobody in 93 percent of awards. What follows from that, and what doesn't.","2026-07-26","11:20","2026-07-26T11:20:00+02:00","","July 26, 2026","daten","flagship","ideal-syka","Ideal Syka",[17,18,19,20,21],"Procurement","Public spending","Transparency","OCDS","AI procurement","\u002Fki-vergabe","German & EU AI Procurement","293 of 316 awards carry no supplier reference (survey 07\u002F2025–06\u002F2026)","\u002Fog-nr\u002Fki-vergabe-zuschlaege-ohne-auftragnehmer.en.png","\u002Fnewsroom\u002Fdata\u002Fki-vergabe-zuschlag-ohne-auftragnehmer-2026-07-26.csv",5,1033,"\u003Cp>We wanted to answer a simple question: who actually earns money when German public bodies buy AI? You only need two things for that — an award, and the supplier who received it. Both are in the official procurement dataset. So we assumed.\u003C\u002Fp>\n\u003Cp>So we re-processed twelve monthly exports from the German Public Procurement Data Service, July 2025 through June 2026, roughly 295,000 notice versions in total. The result is not the page we set out to build. It is a count of what is not in that data.\u003C\u002Fp>\n\u003Ch2>The number\u003C\u002Fh2>\n\u003Cp>The survey holds \u003Cstrong>935 procurement procedures\u003C\u002Fstrong>, \u003Cstrong>583 of them in the AI cohort\u003C\u002Fstrong> — procedures where an official field explicitly names AI. 227 of those have an outcome: an award, a contract, a modification or a completion.\u003C\u002Fp>\n\u003Cp>Those 227 procedures contain \u003Cstrong>316 non-cancelled awards\u003C\u002Fstrong> between them. Of those, \u003Cstrong>23 reference a supplier. 293 reference nobody.\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>This is not a matching problem on our end. The award is there, it is valid, it is officially published — and the field that points to the party which received it is empty.\u003C\u002Fp>\n\u003Cp>At procedure level: 206 of the 227 procedures report a supplier by name at all. In 126 of them that supplier carries an exact official identifier — a VAT identification number or a national register number, something that identifies a company beyond doubt. And in \u003Cstrong>9 of those 126 procedures\u003C\u002Fstrong> an award actually references that supplier.\u003C\u002Fp>\n\u003Cp>That leaves \u003Cstrong>118 procedures\u003C\u002Fstrong> in which an unambiguously identifiable company appears in the procedure and not one award names it.\u003C\u002Fp>\n\u003Ch2>Why we&#39;re confident it isn&#39;t us\u003C\u002Fh2>\n\u003Cp>That gap can have four causes, and three of them would be ours. We counted all four rather than picking the most convenient one:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>The source doesn&#39;t publish the relation.\u003C\u002Fstrong> The award carries no supplier field.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>We destroyed it while merging.\u003C\u002Fstrong> A later version of the same notice overwrites an earlier one that still carried the reference.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>We rejected the identifier.\u003C\u002Fstrong> The award references a party whose identifier fails our validation.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>We quarantined the supplier.\u003C\u002Fstrong> The identifier carries conflicting names and is held back.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>The result across all 118 procedures:\u003C\u002Fp>\n\u003Cdiv class=\"tbl-scroll\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Cause\u003C\u002Fth>\n\u003Cth align=\"right\">Procedures\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>Source publishes no relation\u003C\u002Ftd>\n\u003Ctd align=\"right\">\u003Cstrong>118\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Overwritten while merging\u003C\u002Ftd>\n\u003Ctd align=\"right\">0\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Identifier rejected\u003C\u002Ftd>\n\u003Ctd align=\"right\">0\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Supplier quarantined\u003C\u002Ftd>\n\u003Ctd align=\"right\">0\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>unattributed\u003C\u002Ftd>\n\u003Ctd align=\"right\">0\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Cp>All 118. Not one identifier was rejected for its shape. Not one reference was lost in merging. And not one of the 118 procedures went unattributed — the check aborts if even a single procedure matches none of the four causes, because an incomplete cause model would aim the next fix at the wrong target.\u003C\u002Fp>\n\u003Cp>This was explicitly not the result we expected. The second cause would have been our own bug and an hour&#39;s work to fix. It is exactly zero.\u003C\u002Fp>\n\u003Ch2>What that means concretely\u003C\u002Fh2>\n\u003Cp>The public supplier index that comes out of this survey contains \u003Cstrong>nine companies\u003C\u002Fstrong>. Nine, from 935 procedures over thirteen months.\u003C\u002Fp>\n\u003Cp>Among the 118 procedures with no named supplier are an AI assistance system for basic income support, AI-assisted road condition surveying, a GPU cluster for generative AI in systems engineering, and several framework agreements. One single procedure carries 56 awards — and names the recipient of not one of them.\u003C\u002Fp>\n\u003Cp>The full list of all 118 procedures, with procedure identifier, title and award count, is available as a CSV above. You don&#39;t have to take our word for it; the procedure identifiers are official and can be looked up individually.\u003C\u002Fp>\n\u003Ch2>What does not follow\u003C\u002Fh2>\n\u003Cp>This is not fine print. It is the condition on which the numbers above can be used at all.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Not published does not mean secret.\u003C\u002Fstrong> Who won an award is usually known — it just isn&#39;t in the machine-readable field meant to carry it. It can often be obtained from the contracting authority, through a press enquiry or a freedom-of-information request. Our statement is about the dataset, not about reality.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>We have not yet excluded one possible explanation.\u003C\u002Fstrong> The data service also serves notices as eForms XML. Our own source audit records that the OCDS conversion is not a lossless relationship graph. So the reference may be present in the XML and lost in conversion. That is what we check next. Until then the claim is: \u003Cstrong>it is not in the OCDS form\u003C\u002Fstrong> — not: it exists nowhere.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>This is a twelve-month survey, not everything.\u003C\u002Fstrong> It covers procedures with publications between 21 May 2025 and 28 June 2026. Older and newer procedures are not included.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>We rate nobody.\u003C\u002Fstrong> This page carries no transparency score, no ranking and no assessment of individual contracting authorities. 293 missing references support no statement about whether any authority is meeting its obligations. Which fields are legally mandatory depends on procedure type and threshold, and that is a legal question, not a counting question.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>We don&#39;t guess.\u003C\u002Fstrong> It would have been easy to match the 118 procedures by company name and build supplier pages from that. They would have looked complete. We link exclusively through exact official identifiers, because a wrongly attributed company is worse than a missing one — and that is why those pages do not exist.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>How to check this yourself\u003C\u002Fh2>\n\u003Cp>The source is open and you don&#39;t need us for it:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Pull a monthly export: \u003Ccode>https:\u002F\u002Fwww.oeffentlichevergabe.de\u002Fapi\u002Fnotice-exports?pubMonth=2026-06&amp;format=ocds.zip\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>In the unpacked OCDS release, inspect each \u003Ccode>awards[]\u003C\u002Fcode> object and check whether it carries a populated \u003Ccode>suppliers[]\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>Cross-check against the procedure identifiers in our CSV.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>The running state is in the \u003Ca href=\"\u002Fen\u002Fki-vergabe\">AI Procurement Monitor\u003C\u002Fa>. One thing to note: that live dataset has been accumulating daily since July 2026 and does not yet contain the history analysed here — the figures in this article come from the twelve monthly exports. The authoritative current value is always in the dataset, never in this text.\u003C\u002Fp>\n\u003Ch2>Sources\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.oeffentlichevergabe.de\u002Fapi\u002Fnotice-exports\">German Public Procurement Data Service — notice exports (OCDS)\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fstandard.open-contracting.org\u002Flatest\u002Fen\u002Fschema\u002Freference\u002F#award\">Open Contracting Data Standard — award object\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"\u002Fen\u002Fki-vergabe\">German &amp; EU AI Procurement — running monitor\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"\u002Fen\u002Ftools\u002Fdata\u002F\">Open data and citation\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cem>Editorially owned by \u003Ca href=\"\u002Fen\u002Fautor\u002Fideal-syka\">Ideal Syka\u003C\u002Fa>. Sources and method: \u003Ca href=\"\u002Fen\u002Fredaktion\">Newsroom &amp; method\u003C\u002Fa>. Tips and corrections: \u003Ca href=\"mailto:ai@i6eal.de\">ai@i6eal.de\u003C\u002Fa>.\u003C\u002Fem>\u003C\u002Fp>\n",1785061466133]