Two governments, one shipment, two different numbers
Across 976 critical mineral trade flows, importer and exporter accounts differ by a median of 23 percent. Chile and China differ by 2.3x on lithium.
There is a sentence that appears in almost every report on critical minerals: Europe imports X per cent of its cobalt, or lithium, or rare earths, from country Y. The number is always sourced to trade statistics, and it is always given without an error bar.
I wanted to know what that error bar would be if anyone drew it. So I pulled bilateral trade in eight critical raw material commodities from UN Comtrade for 2023, in both reporting directions, and checked the data against itself before doing anything else with it.
The answer is that the median flow is reported 23 per cent differently by the two governments involved. Over a quarter of flows differ by more than half. On the single most watched lithium relationship in the world, Chile and China differ by a factor of 2.3.
Every shipment is counted twice
When a cargo of lithium carbonate leaves Chile for China, two states record it. Chile logs an export. China logs an import. One physical shipment, two independent statistics, produced by different agencies under different rules, and they are supposed to describe the same thing.
Comparing them is a standard technique called mirror statistics, and economists use the gap as an indicator of smuggling, misinvoicing and administrative failure.
One correction has to come first, and skipping it would invalidate everything after. Imports are conventionally valued CIF, including the cost of freight and insurance to the destination. Exports are valued FOB, at the seller’s border. So the importer’s number ought to be larger by the cost of carriage, of order five to ten per cent, even when both parties are perfectly accurate. Score the raw difference and you manufacture a discrepancy on every pair in the dataset.
Correcting for that, and keeping only pairs where both sides reported and both exceeded a million dollars, leaves 976 flows.
| median gap beyond freight | 23.0% |
| pairs differing by more than 50% | 27.3% |
| pairs differing by more than 2x | 8.1% |
| total absolute discrepancy | $23.6bn on $80.6bn of matched trade |
Nickel is worst, at a median 33.7 per cent. Rare earth metals follow at 32.0, cobalt at 30.3.
The largest individual discrepancies are not obscure corners of the data:
| flow | exporter says | importer says | ratio |
|---|---|---|---|
| Chile to China, lithium carbonate | $2,550m | $5,777m | 2.27 |
| USA to China, rare earth compounds | $319m | $9m | 0.03 |
| Malaysia to China, refined copper | $61m | $840m | 13.85 |
Chile to China in lithium carbonate is one of the most closely tracked trade relationships in the energy transition. The two governments’ accounts of it differ by 3.2 billion dollars.
Some of this has innocent explanations. Shipments crossing a year boundary land in different reporting years. Goods routed through a third country can be attributed to the transit point instead of the origin. Chile’s figure may exclude value added in transit that China’s includes. None of it is evidence of fraud.
But it does mean that a supply chain model built on trade statistics inherits roughly 23 per cent median uncertainty in its inputs, and I have not often seen that acknowledged in the outputs.
Size is not the same as criticality
With the data characterised, the second question is what the network actually looks like.
Building a directed graph of who supplies whom gives 225 countries and 3,671 trade links. China’s betweenness centrality, a measure of how often a country lies on the path between two others, is 0.561. It sits on the majority of shortest paths in this network. The United States is next at 0.213, Germany at 0.185.
More useful than centrality is a direct question: if one country stopped exporting, how much demand would go unmet? That depends entirely on whether anyone else can expand, so rather than bury an assumption, I made it a dial. Remaining suppliers can lift output by some fraction of their current exports, and whatever they cannot cover is the shortfall.
| removed | lost, no substitution | shortfall if others expand 20% | absorbed |
|---|---|---|---|
| Chile | $28.8bn | $11.9bn | 59% |
| China | $18.7bn | $10.9bn | 42% |
| DR Congo | $12.7bn | $2.0bn | 84% |
| Myanmar | $1.5bn | $1.2bn | 21% |
| Russia | $7.3bn | $0.0bn | 100% |
| Japan | $8.0bn | $0.0bn | 100% |
Russia and Japan each take billions of dollars of trade out of the system and cause no unmet demand at all. They are large and replaceable. Myanmar is the smallest supplier in that table and the hardest to replace: 79 per cent of what it ships cannot be covered by anyone else expanding.
Rank countries by trade volume and Myanmar does not appear. Rank them by what breaks without them and it is fourth. No concentration metric produces that ordering, because it is a property of the network and of substitutability, not of any single trade relationship.
The part where I was wrong
I built this to test a specific idea. Supply risk is normally assessed by looking at what consuming countries import and measuring how concentrated the sources are. My hypothesis was that this looks one link too far downstream, and that the processing stage in the middle faces much tighter supply than the consumers do.
Splitting importers into China and everyone else, it looked strongly true. Concentration on the processing side ran 2.1 times higher across eight commodities, and for cobalt it was eleven times higher.
Then I replaced the assumption with something derived from the data. Instead of declaring China the processor, I computed each country’s role in each chain from its own balance of exports and imports: mostly outward is a source, mostly inward is a sink, both directions is a processor.
The effect disappeared. Processors face tighter supply in four of eight commodities, with a median ratio of 0.65. There is no general pattern.
The reason turned out to be worth more than the hypothesis. Within cobalt’s commodity code, China is a net importer, so the model classifies it as a consumer, and it is right to. China imports cobalt mattes and exports cobalt chemicals, and those carry different codes. The transformation that makes China a processor happens across a code boundary, and is therefore invisible to any analysis working inside a single code.
Supply chain position is defined by the transformation. Transformations cross commodity codes. So a country’s stage in a chain cannot be read off one code, and my first version produced a clean result by assuming precisely the thing it should have measured.
What survives is narrower and checkable:
| China’s cobalt matte imports | 97% from DR Congo |
| China’s rare earth compound imports | 66% from Myanmar |
| China’s lithium carbonate imports | 87% from Chile |
Those are real single-source dependencies, and they are invisible in European or American import statistics because they sit one link away. Europe’s exposure in rare earths is not really to China. It is to Myanmar, through China. What does not survive is the general law I wanted to build on top of that.
Two traps in the data
Worth recording, because both would have quietly produced wrong numbers.
Comtrade returns rows disaggregated by transport mode and customs procedure, and the public endpoint caps a response at 500 rows. Request German rare earth imports naively and you get exactly 500 rows: a truncated slice, with nothing in the response to tell you it is truncated. Asking for pre-aggregated rows returns the same query complete, in 24 records.
Comtrade also mixes aggregate areas into the same field as real countries. “World”, “Other Asia, nes”, regional groupings. Dropping them removed 131.1 billion dollars against a 130.4 billion dollar bilateral total, which is the size of the double count avoided. Left in, every figure in this article would be roughly twice what it should be.
What this does not do
One year of data, and 2023 was not a normal year for lithium prices. Thirty-three reporting countries, so states that report nothing appear only through their trading partners. The disruption model is a short-run bound that knows nothing about stockpiles, price response, or the decade it takes to open a mine. And betweenness remains distorted by entrepot trade, since Rotterdam and Singapore are ports rather than sources; the re-export hubs are flagged in the code but not removed, because whether transit counts as dependency is a judgement the reader should make rather than one the code should make silently.
The code, the cached data and every figure are at github.com/ibtisamkhan96/crm-trade-network. Trade data is from UN Comtrade.
Found a mistake? Good, tell me. This publication flags its own suspect values. Reach me on LinkedIn.