
Procurement as a graph: buyers, suppliers, awards and the classifications between them
Who wins what in public procurement is a question about relationships, and relationships are a graph. We are building one across sources and across classification systems. It is active work and it is not shipped; this note sets out the problem, our approach and what we do not yet know.
A market made of relationships
A single tender notice tells a bid team very little. What the team wants to know is who this buyer has bought from before, which suppliers keep winning under this kind of work, and whether a newcomer has ever taken an award here. None of those answers lives in one record. They live in the links between records: a buyer is linked to its notices, a notice to its award, an award to a supplier, and every notice to a code that says what is being bought.
That is a graph, and treating it as one is the idea behind this work. We should be plain about status first: this is active work. It is not shipped, it is not part of what Klarum offers today, and nothing here should be read as a description of a feature a customer can use.
Method
We are building the graph from published notices and awards across several national and supranational sources. Buyers, suppliers, notices and awards are the nodes. Edges record who issued, who bid where that is published, and who was awarded. The hope is that the shape of past awards carries a usable signal about future ones, for example that a buyer favours incumbents, splits work into lots that suit small firms, or reuses a narrow set of suppliers.
The first obstacle is identity. The same supplier appears under different spellings, legal forms and registration schemes, and the same buyer appears as a parent body in one source and a department in another. Merging two nodes wrongly invents a relationship; failing to merge them hides one. We treat entity resolution as the foundation, because every later claim inherits its errors.
Bridging two classification systems
The second obstacle is the one that interests us most. Sources describe what is bought using different classification systems. CPV is the common vocabulary on European notices[1]. The sector codelist used for development aid reporting[2] is a different vocabulary again. The Danish national scheme has its own structure too. They were designed for different purposes, by different bodies, and they do not nest neatly: one code in one system can correspond to part of several codes in another, and sometimes to none.
A naive bridge is a lookup table. It looks tidy and it quietly lies, because a many-to-many relationship forced into a one-to-one mapping drops the cases that do not fit. We are instead treating each mapping as a weighted edge between codes, learned from notices that carry both, and keeping the weight visible so a downstream question can ask how sure the bridge is.
| Situation | What a lookup table does | What we are trying instead |
|---|---|---|
| One code maps to several in the other system | Picks one and drops the rest | Keeps every edge with its own weight |
| Several codes collapse to one | Loses the distinction | Keeps the finer code as the source of truth |
| No clean equivalent exists | Forces a nearest guess | Leaves the gap and says so |
| A scheme is revised over time | Goes stale unnoticed | Ties each edge to the notices that support it |
Discussion
Limitations
We have not shown that the graph predicts who wins. That is the claim that matters and we are not entitled to make it yet. Award data is public but incomplete: many bidders never appear because only winners are published in some sources, so the graph sees outcomes far better than it sees competition. A model trained on winners alone will learn to describe incumbency, which is not the same as predicting a contest.
Coverage is uneven. Some countries publish rich structured data and others publish little, so the graph is dense where data is open and thin where it is not. A supplier in a thin region looks inactive when it may only look unobserved. We have no reliable way yet to tell those apart, and a user shown a sparse neighbourhood could easily mistake absence of data for absence of opportunity.
Bridging classifications introduces its own error, and it is not distributed evenly. The codes that map cleanly are usually the common, well-understood categories. The ones that map badly are specialist work, which is exactly where a small expert supplier lives. A poor bridge therefore hurts the firms with the most distinctive offer: they are filed under a neighbour category, shown to the wrong buyers, and missed by the right ones.
Who is hurt when it is done badly
Three groups carry the cost. Small suppliers are misfiled and never surface. Bid teams waste effort on opportunities the graph wrongly rated as a fit, or skip ones it wrongly rated as a miss. Buyers are the quiet third: if a graph overstates how closed a market is, suppliers stop bidding, and the market becomes as closed as the graph said it was.
Next steps
We want to measure the bridge before we trust it, by checking mappings against notices that carry both classifications and against review by people who know the sectors. We also want to find a principled way to represent unobserved competition so that thin coverage reads as unknown rather than as empty. We are not committing to an outcome or a timetable for any of this.
Conclusion
The procurement graph is a sound idea and an unfinished piece of work. Its value depends on two things we have not yet earned: resolving identities well enough to trust the nodes, and bridging classification systems without erasing the specialists. We would rather describe those honestly than present a result we do not have. Read this as a statement of the problem and of how we are approaching it, not as a description of a shipped capability.
References
- [1]Common Procurement Vocabulary. SIMAP, European Commission. The EU procurement classification. Its 45 divisions are the target vocabulary for derived sector codes.
- [2]IATI Sector codelist (OECD DAC 5-digit). IATI Standard. The development-finance sector taxonomy that the CPV bridge maps from.