In 17 of 32 materials, the top exporter is not the top miner. In 4 of 32, a country that mines under 5% of world supply nonetheless exports more than a quarter of it — a near-pure refiner or trans-shipment effect.
Read this precisely. The origin gap is a measurement gap between two public datasets — reconciled bilateral trade vs USGS mine production — not a fully traced physical supply chain. Part of any gap is legitimate: a refiner genuinely exports a different product than the mined ore (cobalt chemicals are not cobalt ore). And customs data cannot separate a true refiner from a re-export hub. The claim is that import-origin statistics misidentify where supply is concentrated — not that any single country secretly mined the material.
Is it just a unit effect? We tested it. The table below compares export share by value (dollars) against mine share by tonnage — two different rulers, so a fair objection is that some of the gap is mechanically guaranteed by comparing dollars with tonnes. It is not. Re-measuring both sides in the same unit — trade tonnes (BACI quantity) against mine tonnes (USGS) — the gap holds for all 17 materials; measured this way it is in fact 18 of 32, because in tonnes the top shipper of platinum is a Gulf entrepôt, not South African mine output. So the divergence between where a material is dug and where it is shipped survives when the units are made identical — it is a real gap, not an artifact of the ruler.
Is it just re-export transshipment? No. The other obvious objection is that the “top exporter” is really a customs entrepôt — a Netherlands, Singapore or Dubai that ships material it never processed. We checked: across all 17 gap materials, the top exporter is a genuine producer or refiner in every single case (Chile lithium, Kazakhstan beryllium, Norway nickel, Japan titanium, Germany strontium, Qatar helium…) — zero route through a known re-export hub. So the gap is a mine-to-refinery divergence, not a shipping artefact. (Both tests reproducible: python build_origin_gap_units.py.)
And is the leader a real refiner, or just a product-code change? Where we can trace it, a refiner. For the materials that carry both an ore-stage and a refined-stage trade series, we compared the ore-export leader with the refined-export leader. In 5 of the 6 traceable cases the refined leader is a different country that imported the ore and exported the processed metal — antimony (Myanmar → Tajikistan), bauxite → alumina (Guinea → Russia), nickel (Philippines → Indonesia), tantalum (Rwanda → China), titanium (Mozambique → Japan) — the definition of a real processing chokepoint. And the full trace no longer stops at 6. Earlier this cross-check was the only per-material evidence, so the other gap materials were flagged “data-limited.” That flank is now closed: below is every gap material traced to its origin the truer way — to the mine (production), not to an ore-trade series that is itself re-exportable. (Reproducible: python build_origin_ledger.py and build_origin_gap_products.py.)
The origin gap, enumerated — who mines it vs who exports it
For each material where a different country leads the mine and the export, the hand-off, 2024. The trace runs to the mine (World Mining Data) for all of them; the marked rows also carry a separate ore-HS trade series that confirms the hand-off directly.
| Material | Mines the most | Exports the most | Ore-trade cross-check |
|---|---|---|---|
| Fluorspar, >97% CaF2 | China 68% | Mexico 38% | — |
| Ferro-vanadium | China 68% | Austria 20% | — |
| Nickel, unwrought | Indonesia 62% | Norway 17% | ✓ ore-trade |
| Beryllium, unwrought | United States 59% | Kazakhstan 89% | — |
| Arsenic | Peru 51% | China 33% | — |
| Coking coal | China 49% | Australia 41% | — |
| Phosphate rock | China 44% | Jordan 24% | — |
| Phosphorus | China 44% | Vietnam 49% | — |
| Palladium, unwrought | Russia 41% | South Africa 25% | — |
| Tantalum, unwrought | Congo, D.R. 41% | United States 21% | ✓ ore-trade |
| Lithium carbonate | Australia 38% | Chile 75% | — |
| Titanium, unwrought | China 36% | Japan 34% | ✓ ore-trade |
| Antimony, unwrought | China 33% | Tajikistan 31% | ✓ ore-trade |
| Refined copper cathodes | Chile 24% | Congo [DRC] 22% | — |
| Baryte | China 22% | India 18% | — |
Read a row as the origin gap in one line: Nickel — Indonesia digs 62% of it, Norway leads the exports of the unwrought metal. The customs ledger would file this dependence under Norway; the mine is in Indonesia. Four rows carry a separate ore-stage trade series that confirms the ore→refined hand-off directly (nickel, tantalum, titanium, antimony); for the rest, the mine-production trace stands — and it is the truer origin, because ore itself is re-exported. So the origin gap is no longer part-traced: for every material where a different country leads the mine and the export (15 on this clean split, the core of the “17 of 32” headline), the mine is named. The remaining headline cases are materials where the exporter mines a little of it — a softer gap, not a hidden one.
Is 17 of 32 more than chance? Yes — but read the test carefully. A permutation (randomisation) test — the standard non-parametric way to ask “is this more than chance?” without distributional assumptions (Fisher 1935; Good, Permutation, Parametric and Bootstrap Tests, 2005) — 10,000 draws with the top exporter drawn independently of the miner from each material’s own export shares puts the chance number at ~24 of 32, not fewer — because with dozens of exporters per material, a random top exporter rarely coincides with the top miner. We observe 17, which is 3.3 standard deviations below the independence expectation (p ≈ 0.001). So the honest reading is not “mismatch is surprisingly common” — the significant, non-random fact is the opposite, that mining and exporting are correlated (a miner usually does export its own material). The 17 gaps are the real, identifiable minority where that correlation breaks because processing relocated — not a chance artefact, and not an inflated count. (Reproducible: python build_origin_gap_null.py.)
This is the single number behind the atlas's thesis: the refiner is not the source. An apparent dependence on the country that ships a material is, one layer upstream, a dependence on whoever mined the ore it was made from. Customs rules assign "origin" at the point of last substantial transformation, so the trade record stops at the refinery — and the real geography of supply disappears.
The measure
For each material, in the same year, we compare two public measures: where it is exported from (reconciled bilateral trade, CEPII BACI) and where it is mined (USGS production shares).
A large positive gap means a country sells far more than it digs out of the ground — it is processing or trans-shipping someone else's ore.
Where the gap is largest (2024)
| Material | Top exporter | exports | it mines | gap | Actual lead miner |
|---|---|---|---|---|---|
| Beryllium, unwrought | 🇰🇿 Kazakhstan | 89% | 0% | +89 | 🇺🇸 United States (58%) |
| Strontium carbonate | 🇩🇪 Germany | 60% | 0% | +60 | 🇮🇷 Iran (38%) |
| Lithium carbonate | 🇨🇱 Chile | 75% | 24% | +51 | 🇦🇺 Australia (48%) |
| Aluminium ores / bauxite | 🇬🇳 Guinea | 72% | 24% | +48 | 🇦🇺 Australia (24%) |
| Phosphorus | 🇻🇳 Vietnam | 47% | 1% | +46 | 🇨🇳 China (41%) |
| Cobalt oxides & hydroxides | 🇫🇮 Finland | 29% | 0% | +29 | 🇨🇩 DR Congo (74%) |
| Fluorspar (>97% CaF₂) | 🇲🇽 Mexico | 38% | 11% | +27 | 🇨🇳 China (65%) |
| Hafnium, unwrought | 🇨🇳 China | 32% | 9% | +23 | 🇦🇺 Australia (31%) |
| Tantalum, unwrought | 🇺🇸 United States | 22% | 0% | +22 | 🇨🇩 DR Congo (41%) |
| Ferro-vanadium | 🇦🇹 Austria | 21% | 0% | +21 | 🇨🇳 China (68%) |
| Phosphate rock | 🇯🇴 Jordan | 24% | 5% | +19 | 🇨🇳 China (41%) |
| Nickel, unwrought | 🇳🇴 Norway | 18% | 0% | +18 | 🇮🇩 Indonesia (50%) |
| Titanium, unwrought | 🇯🇵 Japan | 34% | 18% | +16 | 🇨🇳 China (67%) |
| Refined copper cathodes | 🇨🇩 DR Congo | 24% | 11% | +13 | 🇨🇱 Chile (23%) |
The 14 largest gaps among the 17 materials where exporter ≠ miner. ⛓ gallium and germanium share one HS6 code (811292) and cannot be separated in trade (hafnium is kept separate).
The twist: the illusion is not only China's
The intuitive story is "China hides behind refineries." The data only half-supports it. For many materials China is both the lead miner and the lead exporter — its chokehold is largely genuine, not an accounting artefact. The materials where exporter and miner diverge are instead fronted by industrial refiners and entrepôts: Finland for Congolese cobalt, Japan for largely Chinese-mined titanium sponge, Germany for Iranian strontium, Norway for Indonesian nickel, the United States for Congolese tantalum.
So the corrective cuts two ways. It deflates apparent dependence on refiner countries — a German strontium "supply" is Iranian rock. And it reveals that a genuinely concentrated upstream — DR Congo cobalt, Indonesian nickel, Chinese rare earths — is more concentrated than the diversified-looking trade ledger suggests, because the ore is laundered through several different refiners before it ships.
What this is — and isn't
- It is a like-for-like comparison of two public measures (CEPII-BACI reconciled trade shares; USGS mine-production shares), per material, every year 2018–2024.
- It isn't a claim that the refiner adds no value, nor that the traded form equals the mined form: some gap is legitimate — Finland really does export refined cobalt chemicals, which sit under a different product than mined cobalt. The gap measures where customs would mislead you about origin, not fraud.
Why it matters
Supply-risk and friend-shoring policy is often written off import-origin tables. This finding says those tables, taken at face value, misidentify the chokepoint in a majority of critical materials — sometimes flattering a refiner, sometimes hiding how concentrated the real mine base is. The fix is cheap: reconcile the bilateral trade, then subtract the mine layer. That is what this atlas does.
This finding across the atlas: follow the ore past the refiner in the origin trace; watch the gap widen over two decades on the trends page; check which rising-concentration trends survive an autocorrelation-robust test under robustness; and see where the refiner sits as a network chokepoint.
Sort the live table by the origin gap, or open any country's import-dependency profile.
Reproduce: findings.py → results/findings.json. Full method and validation in the method note.