Public procurement data is late, noisy and constantly amended. None of that makes it unusable — but it makes one shortcut fatal: treating the date a contract was awarded as the date anyone could have known about it. Across 2.67 million EU contract awards, the median contract reached the public record 20 days after it was concluded. How honest dating, and honest nulls, turn a messy record into point-in-time data a quant can trust.
Ask a procurement dataset when a contract happened and you will usually get one date. Ask it when the market could first have known, and most datasets cannot answer — or, worse, answer with the same date. That gap is where look-ahead bias lives, and in public procurement it is not a rounding error. It is weeks for the typical contract, and months for a large share of them.
This article measures that gap on TED, the European Union's official publication platform for public contracts, explains why it matters to anyone building signals from procurement data, and sets out the approach that makes the data usable anyway. The short version: procurement data is messy, but mess is not the problem. Pretending to know things the record does not say is.
Three dates matter, and they are routinely collapsed into one:
Award (conclusion) date — the date the contract was concluded between buyer and supplier, as stated in the notice. It describes when the economic event happened. Publication date — the date the award notice appeared in the public record. It describes when the world could first see it. Knowable date — for point-in-time purposes, the earliest date a market participant could have acted on the record. For a published notice, that is the publication date, not the award date.
Look-ahead bias is what happens when a backtest uses the first date where it should use the third. Every contract whose notice was published later than its conclusion date enters the backtest early. The model is rewarded for knowing things nobody knew, and the live strategy cannot repeat the trick.
EU law does set a timetable. Under Article 50(1) of Directive 2014/24/EU, contracting authorities must send a contract award notice "not later than 30 days after the conclusion of a contract or of a framework agreement". The record shows how that plays out across millions of notices.
We measured the gap between the contract conclusion date stated in each TED award notice and the date the notice was published, for every award record in our corpus where both dates are present and differ, covering contracts concluded from 1 January 2015 to 31 December 2023.
2,666,865 award records across 179 buyer countries. 10th percentile 4 days · 25th percentile 8 days · median 20 days · 75th percentile 50 days · 90th percentile 230 days. 24.2% were published within a week; 62.9% within 30 days. 37.1% took longer than 30 days, 16.8% longer than 90 days, 11.4% longer than 180 days and 7.6% longer than a year.
| Published within / after | Share of awards |
|---|---|
| Within 7 days | 24.2% |
| Within 30 days | 62.9% |
| More than 30 days | 37.1% (988,247 awards) |
| More than 90 days | 16.8% (449,166 awards) |
| More than 180 days | 11.4% |
| More than 365 days | 7.6% |
The direction of travel is good. The median gap fell from 28 days for contracts concluded in 2015 to 15 days in 2023, and the share published more than 30 days after conclusion fell from 46.3% to 29.2%. Publication is getting faster — but in 2023 nearly three in ten awards still reached the record more than a month after the contract was concluded.
| Year | Awards | Median gap (days) | Published > 30 days |
|---|---|---|---|
| 2015 | 148,473 | 28 | 46.3% |
| 2016 | 158,370 | 28 | 46.3% |
| 2017 | 200,320 | 23 | 40.3% |
| 2018 | 241,370 | 21 | 39.1% |
| 2019 | 278,527 | 22 | 40.9% |
| 2020 | 315,321 | 23 | 42.1% |
| 2021 | 485,413 | 17 | 33.5% |
| 2022 | 440,860 | 17 | 33.0% |
| 2023 | 398,211 | 15 | 29.2% |
The intuition is that large contracts are scrutinised more closely and should surface sooner. The record says the opposite. Contracts stated at €10 million or more took roughly twice as long to reach the public record as contracts under €1 million.
| Stated value | Awards | Median gap (days) | Published > 90 days |
|---|---|---|---|
| Under €100,000 | 676,921 | 16 | 14.2% |
| €100,000 – €1 million | 1,152,591 | 18 | 13.5% |
| €1 million – €10 million | 494,868 | 22 | 18.9% |
| €10 million or more | 128,152 | 37 | 36.5% |
| Value not disclosed | 214,333 | 29 | 26.8% |
The contracts large enough to matter to a listed supplier's revenue are the ones whose notices arrive latest: a median 37 days after conclusion for €10M+ contracts, with 36.5% arriving more than three months later. An award-date-keyed backtest does not just leak a little future information — it leaks the most on exactly the records that carry the most weight. (Large stated values include framework agreements, whose stated value is a ceiling rather than committed spend.)
Yes, and materially. A cross-country model that assumes a uniform publication delay will be early in some markets and late in others.
| Buyer country | Awards | Median (days) | 90th pct (days) | > 30 days | > 90 days |
|---|---|---|---|---|---|
| United Kingdom | 105,210 | 11 | 127 | 33.7% | 14.1% |
| Bulgaria | 106,271 | 16 | 137 | 25.7% | 11.6% |
| Spain | 213,350 | 16 | 370 | 38.2% | 18.7% |
| Poland | 289,757 | 17 | 96 | 27.3% | 10.3% |
| Netherlands | 73,410 | 19 | 130 | 37.1% | 14.2% |
| Germany | 524,033 | 20 | 631 | 39.2% | 22.3% |
| France | 360,352 | 21 | 84 | 35.7% | 9.1% |
| Romania | 123,352 | 22 | 207 | 40.0% | 19.0% |
| Czechia | 156,699 | 24 | 911 | 44.2% | 31.5% |
| Italy | 91,912 | 25 | 142 | 42.8% | 16.2% |
| Sweden | 72,751 | 37 | 170 | 57.1% | 20.4% |
France is a useful contrast with Germany. Their medians are almost identical (21 and 20 days), but their tails are not: 9.1% of French awards arrived more than 90 days after conclusion, against 22.3% of German ones. A single average delay hides exactly the part of the distribution that does the damage.
Not because anyone is careless. Procurement records are produced by tens of thousands of buying authorities, under different national rules, through different publication systems, for purposes that have nothing to do with financial modelling. The record is built for transparency and legal compliance, not for backtests. Four features follow from that:
Late publication. As measured above: the record arrives after the event, by a variable and country-dependent margin.
Missing and ambiguous dates. Many feeds do not publish a separate publication date at all, and in others the publication date and the award date are identical — which may mean a genuine same-day publication, or may mean one field was copied into the other somewhere upstream. From the record alone, the two cannot be told apart.
Amendments. Contracts change after award — values rise, terms extend, lots are added — and publishers record those changes as new notices or new versions while the earlier ones remain public. Sum every version naively and the same contract is counted several times: in our corpus, that would have placed $39.90 trillion of phantom value on 14,292,691 superseded record versions as of 16 August 2026 (The $39.9 Trillion Mirage). Overwrite each version with the latest instead, and the history a point-in-time model needs is destroyed. Neither shortcut is honest.
Inconsistent identities. The same supplier appears under different spellings, legal forms and languages across buyers and countries. Matching them by "looks similar" produces confident errors that are hard to detect downstream; matching only on exact and rule-normalised identifiers is slower to build, but it does not invent relationships.
The fix is not to make the record cleaner than it is. It is to make every field say how much it knows. Our approach rests on four rules:
1. Every date carries its basis. A publication date is labelled by where it came from: published by the source; identical to the award date and therefore ambiguous; estimated from that source's measured publication delay; or unknown. A model can filter to source-published dates with a single condition, and anyone auditing it can see exactly which dates were observed and which were inferred.
2. Estimates are labelled, never disguised. Where a source does not publish a date but its typical delay has been measured, an estimated knowable date can be useful — but it lives in its own field, alongside the delay that produced it, and never overwrites a source value.
3. Unknown stays unknown. When the record does not say, the field is left empty and flagged. An honest null cannot be mistaken for a fact. A filled-in date — today's date, a default, a copy of another field — silently moves a record earlier or later in time, and the model cannot tell.
4. Amendments are history, not duplicates. Superseded versions of a contract are identified and kept, rather than summed as new money or overwritten by the latest version — because the sequence of changes is itself part of what a point-in-time model needs to see.
An honest null costs you a row. A confident wrong date costs you the backtest.
None of this removes the noise. It makes the noise visible — and visible noise can be modelled, filtered or priced. That is the difference between a dataset that looks complete and one that can be trusted on a specific date.
Key on the knowable date. Use the publication date where the source provides one. Where it does not, either drop the record from point-in-time tests or apply a lag measured for that source and country — and label the result as estimated.
Lag by country and size, not globally. A single assumed delay will be early for Sweden and Czechia, late for the United Kingdom, and wrong for large contracts everywhere.
Treat ambiguity as ambiguity. A publication date identical to the award date is not proof of same-day publication. Test with and without those records.
Ask your vendor where each date came from. If the answer is one date per contract with no basis, the backtest is carrying look-ahead bias of unknown size.
The measurements cover TED contract award notices for contracts concluded 1 January 2015 – 31 December 2023 that carry both a contract conclusion date and a notice publication date distinct from it. Records whose published date simply repeats the award date (482,522 in the window) are excluded: a repeated date carries no information about when the notice actually appeared, so it cannot be used to measure the gap. Records with a publication date before the conclusion date (339) or more than ten years after it (46) are excluded as implausible. Counts are award records; a notice covering several lots can contribute more than one.
Notices published under the eForms standard, phased in from late 2023, are outside the window pending field-level verification of their date semantics. The long tail (7.6% beyond a year) has not been decomposed; it is expected to include framework agreements and corrected or re-published notices, and should not be read as a measure of compliance with Article 50.
Stated values are as published in each notice and converted to EUR; for framework agreements they represent a ceiling, not committed spend. Country is the buyer's country. Figures are point-in-time as of 23 October 2026; figures cited from our earlier article are as of its publication date, 16 August 2026.
Procurement data will never be tidy. It is published late, by thousands of authorities, under rules written for transparency rather than trading — and it keeps changing after the fact. But messy is not the same as unusable. The median EU contract award reaches the record 20 days after the contract is concluded — faster than it was, but more than one in three still arrive more than a month later, and the largest contracts arrive latest of all. A dataset that knows this, labels it, and leaves blanks where the record is silent can support genuine point-in-time signals. A dataset that fills those blanks to look complete cannot. The honest route is slower to build and less impressive in a coverage table. It is also the only one whose backtests survive contact with live trading.
New research from Valan's procurement dataset, delivered as it publishes. No noise.