Version 2 — May 2026. This version corrects two methodological issues identified in peer review (see §4), adds a second share metric (direct_use_share), and applies a consistent filter across all results tables and plots.
1 Background: The Multi-Use Problem
The NZIPL Clean Value Chain Explorer (CVCE) maps global trade in clean technology inputs using BACI bilateral trade data harmonised against a curated Green Dictionary of 605 HS-6 product codes across 10 technologies. Many of these products — copper ore, alumina, rare-earth oxides, silicon metal — are multi-use commodities: they flow into clean technology manufacturing but also into construction, electronics, automotive, and general industry.
Without correction, treating 100% of bilateral copper ore trade as “clean tech” inflates the apparent size of the clean industrial base. The IO use-share pipeline addresses this by asking:
What fraction of sector \(j\)’s actual output is induced by clean technology production?
We answer this with two complementary metrics derived from EXIOBASE, detailed below.
2 Data Sources
2.1 EXIOBASE 3.9.6 pxp (2019)
EXIOBASE 3 [@stadler2018] is a multi-regional supply-and-use table produced by the EXIOBASE consortium. We use the product-by-product (pxp) symmetric input-output table for the year 2019:
The A matrix and gross output vector are extracted from the EXIOBASE zip archive using pymrio (scripts/build_data/10a_parse_exiobase.py).
2.2 NZIPL Green Dictionary
The Green Dictionary contains 605 HS-6 product codes curated by the NZIPL team, organised by technology, value-chain stage, and product role:
Show code
gd |>count(tech, stage, role) |>pivot_wider(names_from=stage, values_from=n, values_fill=0) |>arrange(tech) |>kbl(caption="Green Dictionary: codes by technology, stage, and role") |>kable_styling(bootstrap_options=c("striped","condensed"), font_size=12)
Green Dictionary: codes by technology, stage, and role
tech
role
Downstream
Final Product
Midstream
Upstream
Batteries
Process Equipment
32
0
6
0
Batteries
Product Component
1
0
7
0
Batteries
Final Product
0
3
0
0
Batteries
Processed Material
0
0
27
0
Batteries
Raw Material
0
0
0
13
Biofuel
Process Equipment
10
0
5
0
Biofuel
Final Product
0
4
0
0
Biofuel
Processed Material
0
0
27
0
Biofuel
Raw Material
0
0
0
23
Electrolyzers
Process Equipment
16
0
1
0
Electrolyzers
Product Component
10
0
2
0
Electrolyzers
Final Product
0
1
0
0
Electrolyzers
Processed Material
0
0
18
0
Electrolyzers
Raw Material
0
0
0
6
Geothermal
Process Equipment
18
0
9
0
Geothermal
Product Component
10
0
12
0
Geothermal
Final Product
0
9
0
0
Geothermal
Processed Material
0
0
14
0
Geothermal
Raw Material
0
0
0
14
Heat Pumps
Process Equipment
5
0
3
0
Heat Pumps
Product Component
7
0
5
0
Heat Pumps
Final Product
0
4
0
0
Heat Pumps
Processed Material
0
0
4
0
Heat Pumps
Raw Material
0
0
0
5
Magnets
Process Equipment
9
0
0
0
Magnets
Product Component
1
0
0
0
Magnets
Final Product
0
2
0
0
Magnets
Processed Material
0
0
5
0
Magnets
Raw Material
0
0
0
5
Nuclear
Process Equipment
2
0
3
0
Nuclear
Product Component
11
0
0
0
Nuclear
Final Product
0
2
0
0
Nuclear
Processed Material
0
0
11
1
Nuclear
Raw Material
0
0
0
13
Solar
Process Equipment
24
0
11
0
Solar
Product Component
11
0
2
0
Solar
Final Product
0
3
0
0
Solar
Processed Material
0
0
18
0
Solar
Raw Material
0
0
0
11
Transmission
Process Equipment
9
0
6
0
Transmission
Product Component
2
0
0
0
Transmission
Final Product
0
8
0
0
Transmission
Processed Material
0
0
6
0
Transmission
Raw Material
0
0
0
5
Wind
Process Equipment
8
0
7
0
Wind
Product Component
13
0
32
0
Wind
Final Product
0
1
0
0
Wind
Processed Material
0
0
23
0
Wind
Raw Material
0
0
0
9
3 Step 1: HS Code → EXIOBASE Product Concordance
BACI uses HS-6 product codes; EXIOBASE uses named product categories (e.g. “Copper ores and concentrates”, “Electrical machinery and apparatus n.e.c. (31)”). Bridging these requires a two-step concordance. Note that EXIOBASE categories are products (200 product-by-product flows), not ISIC/NACE sectors.
3.1 Priority 1: Direct HS6 Prefix Mapping
For ores and key processed materials — products with a clear, unique EXIOBASE counterpart — we constructed a direct lookup table of 40 HS6-prefix → EXIOBASE-product mappings covering:
tibble::tribble(~HS6, ~Name, ~EXIOBASE_product,"260111/260112", "Iron ore", "Iron ores","260300", "Copper ore", "Copper ores and concentrates","260400", "Nickel ore", "Nickel ores and concentrates","260600", "Bauxite (aluminium ore)", "Aluminium ores and concentrates","260500/261000/261300", "Cobalt, chromium, molybdenum ores", "Other non-ferrous metal ores","261610/261690", "Precious metal ores (Ag, Au, Pt)", "Precious metal ores and concentrates","261210/261220", "Uranium ore", "Uranium and thorium ores (12)","262000", "Rare earth ores", "Other non-ferrous metal ores","280530", "REE metals (Sc, Y, La, Ce, Nd...)", "Precious metals","281820", "Alumina (Al₂O₃)", "Aluminium and aluminium products","283691", "Lithium carbonate/compounds", "Other non-ferrous metal products","740811/740819", "Copper wire", "Copper products","760120", "Unwrought aluminium", "Aluminium and aluminium products","811292", "Indium (solar thin-film)", "Other non-ferrous metal products","284610/284690", "REE chlorides", "Precious metals","440110/440130", "Wood pellets/chips (biofuel)", "Wood products","282611", "Lithium fluoride (nuclear moderator)", "Nuclear fuel") |>kbl(caption="Selected direct HS6 → EXIOBASE product mappings (illustrative subset)",col.names=c("HS6 Code(s)","Product Name","EXIOBASE Product")) |>kable_styling(bootstrap_options=c("striped","condensed"), font_size=12)
Selected direct HS6 → EXIOBASE product mappings (illustrative subset)
HS6 Code(s)
Product Name
EXIOBASE Product
260111/260112
Iron ore
Iron ores
260300
Copper ore
Copper ores and concentrates
260400
Nickel ore
Nickel ores and concentrates
260600
Bauxite (aluminium ore)
Aluminium ores and concentrates
260500/261000/261300
Cobalt, chromium, molybdenum ores
Other non-ferrous metal ores
261610/261690
Precious metal ores (Ag, Au, Pt)
Precious metal ores and concentrates
261210/261220
Uranium ore
Uranium and thorium ores (12)
262000
Rare earth ores
Other non-ferrous metal ores
280530
REE metals (Sc, Y, La, Ce, Nd...)
Precious metals
281820
Alumina (Al₂O₃)
Aluminium and aluminium products
283691
Lithium carbonate/compounds
Other non-ferrous metal products
740811/740819
Copper wire
Copper products
760120
Unwrought aluminium
Aluminium and aluminium products
811292
Indium (solar thin-film)
Other non-ferrous metal products
284610/284690
REE chlorides
Precious metals
440110/440130
Wood pellets/chips (biofuel)
Wood products
282611
Lithium fluoride (nuclear moderator)
Nuclear fuel
3.2 Priority 2: NACE4 Fallback
For HS codes not in the direct table, we fall back to the NACE Rev. 2 4-digit code assigned in the Green Dictionary (from the NAICS crosswalk pipeline). A lookup table maps 33 NACE4 codes to EXIOBASE product categories.
EXIOBASE concordance coverage by technology (raw/processed materials only)
Technology
Total HS6
Raw/Processed
Mapped
Coverage %
Batteries
89
40
40
100
Biofuel
69
50
50
100
Electrolyzers
54
24
24
100
Geothermal
86
28
28
100
Heat Pumps
33
9
9
100
Magnets
22
10
10
100
Nuclear
43
25
25
100
Solar
80
29
29
100
Transmission
36
11
11
100
Wind
93
32
32
100
100% of raw and processed material codes are mapped to an EXIOBASE product. Components, process equipment, and final products are not mapped — they receive leontief_use_share = direct_use_share = 1.0 by assumption (§4.4).
4 Step 2: Clean-Technology Product Definitions
For each of the 10 technologies, we define a set of EXIOBASE product categories representing its final-stage manufacturing output. These identify which columns of the Leontief inverse (or transaction matrix) correspond to clean-tech demand.
Show code
tech_sectors <-list(Solar =c("Electricity by solar photovoltaic", "Electricity by solar thermal","Glass and glass products", "Electrical machinery (31)"),Wind =c("Electricity by wind", "Machinery and equipment (29)","Basic iron and steel", "Fabricated metal products (28)"),Batteries =c("Electrical machinery (31)", "Other non-ferrous metal products","Copper products", "Aluminium products", "Chemicals nec"),Electrolyzers=c("Machinery (29)", "Electrical machinery (31)", "Fabricated metals (28)"),Transmission =c("Transmission services of electricity", "Electrical machinery (31)","Copper products", "Aluminium products"),Nuclear =c("Nuclear fuel", "Electricity by nuclear", "Machinery (29)"),`Heat Pumps`=c("Machinery (29)", "Electrical machinery (31)", "Rubber and plastics"),Geothermal =c("Electricity by Geothermal", "Machinery (29)"),Magnets =c("Precious metals", "Precious metal ores", "Other non-ferrous metals","Electrical machinery (31)"),Biofuel =c("Biogasoline", "Biodiesels", "Other Liquid Biofuels","Oil seeds", "Sugar cane, sugar beet"))do.call(rbind, lapply(names(tech_sectors), function(t)data.frame(Technology=t,`EXIOBASE clean-tech products`=paste(tech_sectors[[t]], collapse=" · "),check.names=FALSE))) |>kbl(caption="Clean-technology EXIOBASE product definitions") |>kable_styling(bootstrap_options=c("striped","condensed"), font_size=11) |>column_spec(2, width="60%")
Clean-technology EXIOBASE product definitions
Technology
EXIOBASE clean-tech products
Solar
Electricity by solar photovoltaic · Electricity by solar thermal · Glass and glass products · Electrical machinery (31)
Wind
Electricity by wind · Machinery and equipment (29) · Basic iron and steel · Fabricated metal products (28)
Batteries
Electrical machinery (31) · Other non-ferrous metal products · Copper products · Aluminium products · Chemicals nec
Sector granularity limitation. EXIOBASE aggregates all machinery manufacturing into one category (“Machinery and equipment n.e.c. (29)”). Heat-pump or wind-turbine manufacturing is a small slice of global machinery output. Using this broad sector as a clean-tech proxy therefore understates the true share — the denominator (total machinery output) is large relative to the clean-tech-specific portion. This is a known limitation of 200-product IO tables and affects all technologies relying on machinery categories.
5 Step 3: Correct IO Aggregation
Before computing use shares, the 9,800-sector A matrix must be aggregated to 200 product categories. A previous version of this pipeline summed A coefficients directly, which is mathematically incorrect: since \(A_{ij} = Z_{ij}/x_j\) (transactions divided by output), adding coefficients from sectors of different sizes conflates the denominators.
Since \(Z = A \cdot \text{diag}(\mathbf{x})\), we reconstruct transactions from A.txt and x.txt without needing to read Z.txt (682 MB) separately:
Z_raw <-sweep(A_raw, 2, x_raw, `*`) # Z[i,j] = A[i,j] * x[j]Z_prod <-t(rowsum(t(rowsum(Z_raw, prod_names)), # sum over countries prod_names))x_prod <-rowsum(matrix(x_raw, ncol=1), prod_names) # sum outputA_prod <-sweep(Z_prod, 2, pmax(x_prod, 1e-12), `/`)# recompute A
6 Step 4: Use Share Computation
We compute two complementary metrics for each HS-6 raw/processed material code.
6.1 Metric 1: Leontief Upstream Use Share
The Leontief inverse\(\mathbf{L} = (\mathbf{I} - \mathbf{A})^{-1}\) captures total (direct + indirect) upstream requirements. Element \(L_{jk}\) is the total output of sector \(j\) required per unit of final demand for sector \(k\).
Corrected formula (v2): For raw material sector \(j\) and clean-tech column set \(\mathcal{C}_t\):
The denominator is sector \(j\)’s actual gross output\(x_j\) (millions EUR, from x.txt). A previous version divided by \(\sum_k L_{jk}\) (the total Leontief row sum), which is a per-unit-demand concept rather than an output-weighted share — this has been corrected.
Interpretation: Total upstream Leontief requirements from sector \(j\) directed to clean tech, expressed as a fraction of \(j\)’s actual output. Values are small for bulk commodities (iron ore: ~0.004%) because their global output is vast relative to clean-tech demand; larger for specialised intermediates (REE compounds: ~0.5–2%).
6.2 Metric 2: Direct Use Share
The direct use share measures only first-order supply chain links — no indirect chains:
computed at the aggregated 200-product level. This is more intuitive as a direct fraction of output but understates total clean-tech dependence for materials deep in the supply chain.
Product Component / Process Equipment / Final Product
\(1.0\)
\(1.0\)
The 1.0 assumption for downstream products: battery separators, solar module frames, wind turbine blades, and electrolyzer stacks are clean-technology-specific by curation. The 1.0 is an upper bound; in practice some process equipment HS codes may be multi-use.
7 Results
All plots and tables below use the same consistent universe: raw and processed materials with an EXIOBASE product mapping (role %in% c("Raw Material","Processed Material") & !is.na(exiobase_product)). The 1.0-assigned downstream products are excluded from distribution analysis.
Use-share summary by technology (raw/processed materials, mapped, excludes 1.0)
Technology
N mapped
Mean Leontief
Max Leontief
Mean Direct
Max Direct
Batteries
40
5.255%
17.014%
23.2%
52.9%
Biofuel
48
0.003%
0.007%
0.7%
1.8%
Electrolyzers
24
0.002%
0.004%
7.4%
17.3%
Geothermal
27
0.001%
0.002%
4.3%
10.7%
Heat Pumps
9
0.002%
0.003%
9.6%
21.6%
Magnets
10
1.615%
8.033%
15.4%
44.4%
Nuclear
23
0.084%
0.836%
2.8%
10.7%
Solar
27
0.315%
8.385%
3.7%
24.6%
Transmission
11
0.973%
2.727%
24.5%
50.9%
Wind
31
0.025%
0.661%
10.1%
49.8%
7.5 Comparing the Two Metrics
Show code
gd_rp |>filter(leontief_use_share <1, direct_use_share <1) |>ggplot(aes(x=direct_use_share, y=leontief_use_share, colour=tech)) +geom_point(alpha=0.6, size=1.8) +scale_colour_manual(values=TECH_COLORS) +scale_x_continuous(labels=percent_format(accuracy=1)) +scale_y_continuous(labels=percent_format(accuracy=0.01)) +facet_wrap(~tech, ncol=5, scales="free") +labs(title="Direct vs Leontief use share per HS-6 code",subtitle="Each point is one raw/processed material code · Leontief captures indirect chains",x="Direct use share (Z/x)", y="Leontief use share (ΣL/x)") +theme_dark() +theme(legend.position="none", strip.text=element_text(size=8),plot.background=element_rect(fill="#1a2030"),panel.background=element_rect(fill="#0d1520"),text=element_text(colour="#e2e8f0"),axis.text=element_text(colour="#94a3b8"),strip.background=element_rect(fill="#0f2518"))
7.6 Economic Interpretation
Direct use share (orange in summary table) measures what fraction of a material’s global output flows directly into clean technology manufacturing. It ranges from near-zero for bulk commodities (iron ore goes mainly to steel for construction) to 30–50% for specialised intermediates (lithium battery compounds, REE processing).
Leontief use share (blue) captures the full upstream chain — all indirect requirements induced by one unit of clean-tech final demand. It is smaller in magnitude than the direct share for most materials because the denominator (\(x_j\)) counts all global output of sector \(j\), while clean-tech final demand per unit is modest relative to total global demand. This metric is more appropriate for materials several steps upstream of clean tech (e.g. iron ore → steel → turbine blade → wind electricity).
The direct share is generally larger because it captures concentrated, bilateral supply transactions. The Leontief share is more conservative and reflects the full economic footprint.
8 Limitations and Open Questions
Monetary, not physical IO. EXIOBASE records flows in millions of euros. Relative prices distort the share of rare materials (REEs, cobalt) whose value density is much higher than bulk commodities. Physical MRIO tables (EXIOBASE MR-PSUT) would be preferable but are harder to work with.
Single reference year (2019). Use shares reflect the structure of industrial demand before the post-IRA/CBAM clean energy investment wave. Battery and solar shares are likely understated for 2022–2024.
49-country coverage. ~140 remaining countries are pooled into 5 rest-of-world regions, diluting use shares for materials produced mainly in DRC (cobalt), Bolivia (lithium), Indonesia (nickel).
Broad sector aggregation. EXIOBASE’s 200 product categories group diverse subsectors. “Machinery and equipment (29)” covers heat pumps, industrial turbines, and general machinery. The Leontief share for heat-pump materials is understated because the denominator includes all non-clean machinery output. This is a structural limitation of 200-product tables.
Clean-tech column definition. We treat all output of the defined EXIOBASE products (e.g. all “Electrical machinery (31)”) as clean tech. This overstates the clean-tech share if the sector produces both clean and non-clean goods (see §2 callout).
1.0 assumption for downstream products. Some process equipment HS codes are multi-use. The 1.0 assignment is an upper bound.
Tech-mean fallback for unmapped materials. The ~50% of raw/processed materials without a direct EXIOBASE mapping receive the technology average. This introduces measurement error for highly specific materials.
9 Files and Reproducibility
File
Description
scripts/build_data/10a_parse_exiobase.py
Extract A.txt + x.txt from EXIOBASE zip
scripts/build_data/10_build_io_use_shares.R
Z-based aggregation, Leontief + direct share computation