For each material the tool answers three questions with real data: where is it mined, where is it refined, and who actually trades it with whom — globally, in both directions. Pick any material and any country. The European Union is available as one option among others — an aggregation you can look at, with a dedicated correction built for it (below) — but the tool is not EU-specific.
The layers
- Reserves / potential — world reserve shares by country, from USGS Mineral Commodity Summaries (approximate): where a material could come from, exploited or not — it lights up under-developed holders such as Bolivia (lithium), Vietnam and Guinea. Conservative, though: USGS reserves are proven and economic, so frontier deposits still classed as "resources" (e.g. Greenland's rare earths) stay dim, and byproduct or abundant materials (gallium, germanium, hafnium, silicon, arsenic, and a few others USGS leaves blank) carry no figure.
- Mined — world mine-production shares by country, from USGS Mineral Commodity Summaries (approximate).
- Refined / processed — where the ore is turned into usable metal. Sourced best-per-material: for the metals it reports, BGS World Mineral Statistics gives annual refined/smelter production by country (copper, cobalt, nickel, alumina, magnesium, germanium, arsenic — 2019–2024, with a year slider); otherwise the IEA Critical Minerals Outlook 2026, EU CRM 2023 (JRC/SCRREEN2), or USGS, whichever is the strongest published figure. Each profile shows the actual source it used.
- Traded — complete bilateral trade between every country pair, both directions, for each year 2018–2024 (selectable with the year slider): primary source UN Comtrade, in its reconciled, mirror-harmonised form CEPII BACI. The map, globe and flow view draw this directly; arrows are coloured by what is shipped — raw ore vs refined product. 2024 is the newest complete year (BACI release V202601, Jan 2026). The slider also offers a provisional 2025 and a directional 2026 built from our own Comtrade reconciliation for the years BACI hasn't released (see Validation & failure cases below). The mine and refine layers are undated reference, not yearly.
Why the refiner is not the source
Under customs rules, refining counts as "origin": when a country imports an ore, refines it and re-exports, the metal takes the refiner's nationality and the trade record stops there. One layer deeper, the picture changes — the apparent origin is often just the chokepoint, not the mine:
| Material | Refined origin (traded) | Actually mined — USGS |
|---|---|---|
| Cobalt | China 62% | DR Congo 76%, Indonesia 10% |
| Nickel | Norway 33% | Indonesia 60%, Philippines 11% |
| Tantalum | China 37% | DR Congo 40%, Rwanda 30% |
| Lithium | Chile 75% | Australia 52%, Chile 22% |
So an apparent China dependence on cobalt is, upstream, a Congo mining dependence funnelled through a Chinese refinery — China is the chokepoint, not the source. This mine-vs-refiner gap is well established in IEA and USGS supply-chain work; what this tool adds is to overlay all three layers — mine, refinery and customs trade — in one material-level interface, where mainstream dashboards (OEC, Resource Trade Earth, Comtrade) typically expose just one. It draws the implied mine → refiner → buyer chain, while being explicit (see Limitations) about what is measured versus referenced.
A method note: correcting the EU's import statistics
The same materials drive a classic correction specific to the European Union — the analysis this
project grew out of, documented here (the live tool itself is global and country-agnostic). For
extra-EU imports, the Eurostat
Comext partner field is the country of origin. That single fact
separates two views of the same data:
- Naive — by importing member state. Ranks dependence by which EU country clears the goods. Distorted by the Rotterdam/Antwerp effect: imports are customs-cleared in NL/BE ports (or refined in hubs such as Umicore in Belgium) but bound elsewhere. This measures logistics geography, not dependence. It is the trap.
- Corrected — EU as one entity, by country of origin. Aggregates the 27 member states into a single importer and ranks by true origin. This is the answer.
Across the thirty-two materials the naive and corrected panels disagree on the single most important fact — who the bloc depends on — and only the corrected one is true. China is the real origin for ten, far from a majority; the two sharpest dependencies are not China at all (beryllium is 100% United States, boron 98% Turkey), and the rest span South Africa, Brazil, Japan, Vietnam, Guinea, Gabon, Russia, Chile, Algeria/Qatar, Norway, Mexico, Kazakhstan and Tajikistan — almost none visible in the member-state view. A sample:
| Material (CN8) | Naive top — member state | Corrected top — origin | HHI |
|---|---|---|---|
| Rare-earth magnets (8505 11 10) | Germany / Poland / NL spread | China 93%, PH 3%, VN 2% | 0.86 |
| Magnesium (8104 11 00) | Netherlands 44%, DE 18% | China 92%, IL 7% | 0.85 |
| Beryllium, unwrought (8112 12 00) | Spain 63%, FR 28% | United States 100% | 1.00 |
| Boron, natural borates (2528 00 00) | scattered (none > 20%) | Turkey 98%, BO 1% | 0.96 |
| Ferro-niobium (7202 93 00) | Netherlands 49%, DE 15% | Brazil 84%, CA 16% | 0.73 |
| Cobalt oxides (2822 00 00) | Belgium 43%, DE 18% | China 62%, GB 28%, BR 8% | 0.47 |
| Lithium carbonate (2836 91 00) | Netherlands 39%, DE 34% | Chile 75%, US 13%, AR 6% | 0.58 |
| Antimony (8110 10 00) | France 37%, Belgium 37% | Tajikistan 69%, VN 10%, CN 6% | 0.49 |
| Manganese ore (2602 00 00) | France 42%, ES 26% | Gabon 51%, ZA 41% | 0.43 |
| Bauxite (2606 00 00) | Ireland 35%, DE 18% | Guinea 59%, BR 18% | 0.39 |
Why the EU correction can't be faked from the raw download
EU, EA, EU27_2020, WORLD) alongside the 27 member
states. Summing without dropping them inflates origin totals ~4.6× — yet leaves the shares
unchanged, so the error is invisible to anyone who validates on percentages alone.8505 11 10 exists only from 2023). Series breaks must be respected, not stitched blindly.QUANTITY_IN_100KG and need conversion.Because some codes (gallium, germanium) carry 15 years of data, dependency is a trajectory, not a snapshot: gallium's China-origin share runs 96.8% (2022) → 85% (2023) → 68% (2024) as Canada and Russia step in — China's July-2023 export controls visible directly in the customs record.
Limitations — what is measured vs referenced
This is an overlay of three different measures, not one observed supply chain. Read each row as three lenses laid over each other, not a single flow:
- Three concepts, three vintages. Mine production (USGS, physical, approximate), refining (IEA, processing, approximate) and trade (BACI, customs value, 2018–2024) measure different things; the EU lens uses Comext 2024. A row juxtaposes them — it does not reconcile them into one measured chain.
- HS6 resolution. A few materials share a six-digit code: gallium, germanium and hafnium all fall
under
811292, so their flows are identical (hafnium got its own HS2022 code, but the time series uses one nomenclature — HS2017 — for consistency, where it is still grouped). Treat those three as one "minor specialty metals" line, not three independent series. - Re-exports. Customs trade cannot separate a true refiner from a re-export hub. Hong Kong, Singapore, the Netherlands and Switzerland can surface as top "exporters/refiners" of a material they merely trans-ship. The map's role colours are trade exposure, not proof of physical processing.
- Raw vs refined HS codes. A material's ore and its refined form sit under different HS codes. The map derives miners from the ore code where it is traded, and falls back to USGS/IEA reference shares where it is not — so the data source behind a role can change from one material to the next.
- The flow chart's upstream links are structural. mine → refiner links are drawn from reference shares, not observed flows; only refiner → buyer links are real trade.
- Value, not tonnage. BACI is in US dollars; the top exporter by value can differ from the top by quantity (price and grade effects). Value-vs-tonnage divergences are shown per material in the detail panel.
- Colour intensity is sqrt(volume) for visibility, so a dominant supplier reads as strong but not overwhelmingly so; treat the choropleth as ordinal, not a precise linear scale.
- The satellite layer names where, not which. The Maus mine polygons are all-commodity — no per-mineral label — so the footprint is a physical cross-check, never a material-level source. We quantified how far open data can close that gap: overlaying a single peer-reviewed mine-facility database (Jasansky et al. 2023) labels only ~17% of the footprint and barely 4% ties to a tracked critical material — but stacking thirteen open registers lifts that to 63%, and grouping neighbouring polygons into mining districts reaches ~73%, matching the published state of the art (Maus et al. 2026 / Mine the Gap). What does not improve is the per-mineral resolution: even fully labelled, the open taxonomy resolves ~11 broad commodity classes and rarely names lithium, cobalt, rare earths or tungsten as a primary product, and a census of the unlabelled remainder shows it is ~81% coal and construction minerals, not hidden criticals. This is why material identity here comes from USGS/IEA production shares and trade, not imagery.
Provisional 2025 — a self-built nowcast
BACI lags ~1.5 years, so for 2025 (flagged 2025* on the slider) the atlas does not wait
for CEPII — it uses a nowcast built here from raw UN Comtrade. A small Python pipeline
(reconcile/) replicates BACI's method: it pulls both mirror reports of every flow (exporter
FOB, importer CIF), estimates CIF/FOB markups, weights each reporter by a variance-components
reliability model (E[discrepancy²] = vari + varj), and reconciles by
inverse-variance averaging on logs. Validated against CEPII's official 2024
on what this atlas shows — exporter shares and concentration, not just a global correlation: the
top exporter matches for 25 of 30 materials, exporter shares are within ~3.5% on average
(median 3.2%), and the concentration ranking (HHI) correlates 0.92 (underlying flow structure:
0.975 log-value correlation across 21.7k flows). Absolute levels
run ~1.8× higher (current Comtrade has absorbed revisions and late filers since BACI's early-2025 snapshot), so
2025 is calibrated to BACI's 2024 scale per material. A by-product finding: CIF/FOB rates are
not identifiable on a 31-product slice (R²≈0.01) — BACI's gravity estimation needs the full
~5,000-product universe — so we fall back to a robust per-product median markup.
Caveat — partial coverage. Only about half of countries have filed 2025 annual data so far, so 2025 is genuinely provisional: stable monopolies (niobium, gallium) hold, but a material that leans on a country which has not yet reported (e.g. bauxite, whose dominant Guinea→China flow China has not filed) is distorted. Treat 2025 as indicative, not measured. Every earlier year (2018–2024) is reconciled CEPII BACI, untouched by this.
2026 (flagged 2026**) goes one step further — a directional scenario. The year is barely underway, so there is no annual data at all; only ~one quarter of monthly trade exists. Rather than invent a structure, it carries 2025's reconciled bilateral structure forward and scales each material by its Q1-2026 vs Q1-2025 export momentum (reporter-matched, from monthly Comtrade) blended with the change in its commodity price (World Bank Pink Sheet, for the ~7 base metals it covers). One quarter cannot credibly predict who-trades-with-whom, so shares are held at 2025 and only levels tilt: platinum rises (corroborated by a ~2× price move), antimony and graphite fall (export-control pressure). It is a trend signal — where each material is heading as of mid-2026 — not a measurement.
Validation & failure cases
The reconciliation engine (comtrade-reconcile, open + reproducible) is validated against official CEPII BACI on what this atlas shows — exporter shares and concentration, not a global level correlation.
| Validation vs BACI | top-1 exporter | top-3 overlap | share MAE | HHI corr | level ratio |
|---|---|---|---|---|---|
| 2024 (newest BACI year) | 25/30 | 2.57/3 | 3.5% | 0.92 | ~1.8× |
| 2022 (settled year) | 22/30 | 2.43/3 | 3.9% | 0.89 | ~1.5× |
The figures above are for exporters; importers validate similarly (2024: top-1 22/30, share MAE 4.2%, HHI corr 0.97) — both sides of the bilateral matrix hold. The validation is reproducible in CI from committed data (no API key) — see the engine repo.
Where it is weakest — surfaced, not hidden (2024):
- Top-1 exporter misses (5/30): fluorspar, graphite, arsenic, phosphate, tantalum — close second-place races on diffuse codes.
- Largest share errors: fluorspar 9%, graphite 7%, beryllium 5%.
- Concentration (HHI) misses: beryllium (0.53 vs 0.80), tungsten (0.28 vs 0.40), manganese (0.44 vs 0.33).
Full per-material 2024 result (red rows = top-1 miss):
| Material | Top exporter (ours vs BACI) | share MAE | HHI ours | HHI BACI |
|---|---|---|---|---|
| fluorspar | ZAF vs MEX | 9.0% | 0.25 | 0.25 |
| graphite | TZA vs CHN | 6.7% | 0.14 | 0.21 |
| arsenic | JPN vs CHN | 4.5% | 0.18 | 0.18 |
| phosphate | MAR vs JOR | 4.0% | 0.16 | 0.15 |
| tantalum | CHN vs USA | 3.5% | 0.14 | 0.16 |
| beryllium | KAZ ✓ | 5.5% | 0.53 | 0.80 |
| cobalt | COD ✓ | 5.2% | 0.22 | 0.17 |
| vanadium | AUT ✓ | 4.7% | 0.16 | 0.13 |
| tungsten | CHN ✓ | 4.7% | 0.28 | 0.40 |
| titanium | JPN ✓ | 4.3% | 0.13 | 0.18 |
| manganese | ZAF ✓ | 4.2% | 0.44 | 0.33 |
| baryte | IND ✓ | 3.8% | 0.09 | 0.11 |
| silicon | CHN ✓ | 3.5% | 0.14 | 0.20 |
| strontium | DEU ✓ | 3.4% | 0.43 | 0.44 |
| feldspar | TUR ✓ | 3.4% | 0.32 | 0.21 |
| Ga/Ge/Hf | CHN ✓ | 2.9% | 0.13 | 0.14 |
| boron | TUR ✓ | 2.8% | 0.47 | 0.38 |
| helium | QAT ✓ | 2.8% | 0.17 | 0.16 |
| antimony | TJK ✓ | 2.7% | 0.19 | 0.17 |
| cokingcoal | AUS ✓ | 2.6% | 0.21 | 0.22 |
| palladium | ZAF ✓ | 2.6% | 0.18 | 0.14 |
| magnets | CHN ✓ | 2.3% | 0.38 | 0.41 |
| nickel | NOR ✓ | 2.3% | 0.11 | 0.09 |
| niobium | BRA ✓ | 2.2% | 0.54 | 0.59 |
| bauxite | GIN ✓ | 2.1% | 0.45 | 0.55 |
| copper | COD ✓ | 2.0% | 0.08 | 0.11 |
| lithium | CHL ✓ | 1.9% | 0.50 | 0.59 |
| magnesium | CHN ✓ | 1.9% | 0.48 | 0.54 |
| platinum | ZAF ✓ | 1.4% | 0.18 | 0.16 |
| phosphorus | VNM ✓ | 1.1% | 0.37 | 0.35 |
What it is and isn't valid for. Valid: shares, ranks, top exporters, and concentration (above). Not valid: absolute dollar levels — there is a known, near-constant ~1.5–1.8× offset (current Comtrade runs above BACI's published values; diagnosed above), so arc and Sankey widths are relative, not dollar-precise. 2025* is provisional (partial reporting, level-calibrated to BACI; not independently validated until BACI 2025 is released). 2026** is a directional scenario (Q1 momentum, shares held at 2025) — a trend signal, not a measurement.
Analytical layers & trend analysis
On top of the mine→refine→trade→reserves core, the atlas adds several screening lenses — each documented and caveated on its own page, and, with full citations, in the technical note:
- Trade-network chokepoints — directed-network betweenness / PageRank plus a node-removal fragility test (read as trade-routing centrality, since betweenness also reflects import size).
- Governance-weighted criticality — an EU/SCRREEN-shaped supply-risk proxy weighting concentration by World Bank governance scores, plus a Graedel-style axis; a proxy on public approximations, not the official scores.
- Concentration in tonnes (GeoPolRisk) — the atlas headlines concentration on trade value; this recomputes the Herfindahl on physical production tonnes (World Mining Data), weighted by WGI governance, aligned to the GeoPolRisk indicator (Gemechu et al. 2016; Cimprich/Helbig/Sonnemann 2017–2024) and EU CRM. It sets value, volume and production HHI side by side — trade value understates gallium (0.50 vs 0.97) and overstates boron (0.96 vs 0.28) — putting the concentration claim on the field’s standard physical footing.
- Economic complexity — Balassa revealed comparative advantage over the 32-material export matrix (specialization within critical materials), with ubiquity and relatedness.
- Origin trace — a first-order re-attribution of refiner-fronted imports to the dominant mine (an upper bound on single-origin concentration).
- Case studies — the atlas audited against five chains experts know cold (USGS / IEA).
- Scorecard uncertainty (Monte-Carlo) — propagates explicit input uncertainty through the five-axis hardest-cases scorecard (20,000 draws/material) to report P(hardest) as a gradient rather than a binary cutoff; confirms gallium/germanium are robust, surfaces vanadium as borderline, and shows supply elasticity + market thinness (not concentration) drive the ranking. The five input spreads are stated as judgement calls.
- Production in tonnes & cross-source check — absolute mine output (World Mining Data 2026, metric tonnes) for 28 materials, used to (a) show the physical scale behind the shares and (b) independently cross-validate the USGS-derived producer geography: a second authority names the same top producer for 26 of 28 materials (mean share gap 6.4pp), with the two genuine disagreements flagged, not smoothed.
- Demand & the squeeze — the demand-side arm: end-use sectors, clean-energy exposure and a demand-growth multiple to ~2040 (IEA Global Critical Minerals Outlook 2024 + USGS), crossed with companionality to separate demand-driven-but-mineable materials from the structural squeeze. Forward demand is scenario-dependent — round mid-scenario tiers, not forecasts. A companion price test checks the thesis against the atlas's own implied trade-price series (2018–24): by-product-locked metals split in direction by their host's cycle, not a mechanical price rise — the correlation is de-duplicated for the gallium/germanium/hafnium shared HS6 code. A companion regression on real USGS price series then asks whether by-product metals are also more volatile: they are, but the gap is fully accounted for by market size, not companionality — small primary metals swing just as hard. A further host-coupling test correlates each companion's price against its host on real USGS prices, with a partial correlation removing the common commodity cycle and hosts pre-specified rather than chosen on the outcome. It refutes the "host decides" mechanism it was built to confirm: mean coupling 0.03, only bismuth←lead surviving, and nothing at all in the channel the theory actually names (the host's output, not its price). The episodes — gallium/germanium export controls, cobalt and Indonesian nickel — are real events and stand; the general law does not. Finally a demand-by-bloc read uses import flows as a revealed-demand proxy to show which bloc pulls each squeezed metal and the policy behind it — with the explicit caveat that imports conflate processing with final consumption (China's share is inflated by refine-and-re-export). A follow-up net-demand page nets that out (imports − exports), collapsing re-export hubs and revealing refiner-exporters (China is a net supplier of eight refined criticals) — a half-step toward apparent consumption, short only of absolute production tonnages. A supply-shock cascade then ties the whole arc together: a country shock is propagated through production shares, the companion web (a lost host drags its by-products down), and net trade to the exposed blocs — a structural first-and-second-order contagion map (no price feedback; echo only through tracked hosts), not a calibrated forecast.
- Gallium end-to-end (deep dive) — one metal followed physically from bauxite through alumina refining to recovery and export, with explicit bias bounds: a mass balance showing ~94% of the gallium passing through alumina refineries is discarded (recovery ~5.6%), so supply is capped by refinery retrofits, not price — the "can't scale" claim quantified rather than asserted, with the HS-811292 trade aliasing and China's non-reporting flagged.
- Supply structure — companionality & its children — a supply-elasticity arm: whether each material is mined for itself or recovered only as a by-product of a host commodity (companionality, from USGS MCS 2024 + Nassar et al. 2015). It spawns a supply-elasticity-adjusted risk, a host-shock map (the bulk commodities that gate critical supply), and a secondary-supply lens (EU CRM 2023 end-of-life recycling). Companionality is a round, literature-based estimate of a fuzzy quantity — read the axis as tiers, not decimals.
The reconciled trade series runs 2002–2024, and the Trends view does not merely plot it: each material's export-concentration, China-share and origin-gap series is tested with the Mann–Kendall trend test, the Theil–Sen slope and the Pettitt structural-break test, Benjamini–Hochberg-corrected across the 32 materials. 9 of 32 materials show a statistically significant rising export-concentration trend, with structural breaks clustering in 2012–2016. The critical-minerals literature typically plots concentration; testing and dating it is the contribution. Full methods and references: technical note.
Data & reproducibility
Global bilateral trade (map / globe / flow): primary source UN Comtrade, used in its reconciled, mirror-harmonised form CEPII BACI (Gaulier, G. & Zignago, S., 2010, BACI: International Trade Database at the Product-Level, CEPII WP 2010-23) — releases HS02 + HS17 V202601, years 2002–2024 (HS02 vintage through 2016, HS17 from 2017). The year is selectable in the tool.
EU import-origin lens (Table view): Eurostat Comext, dataset DS-045409, extra-EU
imports, annual. Base-R pipeline, parameterised by CN code, refreshes from the live API.
Mine production & reserves: USGS Mineral Commodity Summaries (annual editions 2020–2024, with a
per-layer year slider). Refining shares: best-per-material — BGS World Mineral Statistics (OGC API,
annual, for the metals it reports) else IEA Critical Minerals Outlook 2026 / EU CRM 2023 / USGS. All
sources are public and free (no API key); figures are rounded.