Methodology
What Are Input-Output Accounts?
Input-output (I-O) accounting is a systematic way to map the flows of goods and services between every sector of an economy. For every pair of industries, an I-O table records how much of one industry's output is consumed as an intermediate input by the other. Reading down a column reveals the full supply chain behind a sector's production; reading across a row shows where that sector's output ends up. From these flows, economists can trace how a shock to one industry — say a surge in energy prices or a collapse in construction — ripples through every other sector before reaching final consumers.[1]
The Bureau of Economic Analysis (BEA) has published comprehensive U.S. I-O accounts since 1947. The accounts follow the international Supply-Use-Table (SUT) framework adopted by the System of National Accounts.[2] Leontief draws entirely from BEA's publicly available data.
Supply and Use Tables
The BEA's I-O accounts are anchored in two rectangular tables:
The Use Table (also called the Make-Use "Use" table) records, for each commodity row and each industry column, the dollar value of that commodity used by that industry as an intermediate input. Additional columns record final demand categories — personal consumption, private investment, exports, and government purchases. The Use table is the workhorse for multiplier analysis and for deriving the direct-requirements matrix A.
The Supply Table (also called the Make table in older terminology) records, for each commodity row and each industry column, the dollar value of that commodity produced by that industry. It shows that most industries are "secondary" producers of goods outside their primary classification — a petroleum refinery produces some petrochemicals; a farm might generate rental income. The Supply table is essential for understanding the commodity composition of industry output and for constructing commodity-by-commodity or industry-by-industry total-requirements tables.
Together, Supply and Use tables underpin the full national accounting framework: they are consistent with GDP, with value added, and with the balance of trade.[3]
Our Data: Coverage and Classification
Leontief publishes matrices derived from BEA annual I-O accounts for 28 years: 1997 through 2024. All years use the BEA Summary 71-sector classification — a stable, publicly documented grouping that covers all major divisions of the U.S. economy:
- Agriculture (2 sectors)
- Mining (4), Utilities (1), Construction (1)
- Manufacturing (21)
- Wholesale and Retail Trade (9)
- Transportation and Warehousing (6)
- Information (5)
- Finance and Insurance (6), Real Estate (3)
- Professional and Business Services (4)
- Educational Services, Health Care, Social Assistance (2)
- Arts, Entertainment, Recreation, Accommodation, Food Services (2)
- Other Services (2)
- Government (3)
The 71-sector annual series began in 2010 when BEA integrated annual GDP-by-Industry accounts with its benchmark I-O accounts; the series was extended backward to 1997 using the first NAICS-era benchmark. All 28 annual tables in our coverage use the identical 71-category scheme, making year-on-year comparison straightforward within this series.
The Matrices We Publish
For each year we publish seven matrices, available for download in CSV, Excel, and Parquet:
| Matrix | Symbol | Dimensions | Description |
|---|---|---|---|
| Use | — | 79 × 92 | Raw BEA Use table (commodities × industries + final demand) |
| Supply | — | 74 × 83 | Raw BEA Supply table (commodities × industries) |
| Direct Requirements (commodity × industry) | A | 70 × 71 | $a_{ij} = z_{ij}/x_j$, $x_j$ = Use row T018 total industry output |
| Technical Coefficients (industry × industry) | A_square | 71 × 71 | $A = I - L^{-1}$, recovered from BEA's published inverse |
| Total Requirements / Leontief Inverse | L | 71 × 71 | Published by BEA; downloaded, not derived here |
| Value Added | VA | 4 × 71 | Compensation, taxes, gross operating surplus, total |
| Final Demand | FD | 70 × 19 | Final demand columns from the Use table |
Deriving A from the Use Table
The direct-requirements matrix A (also called the technical coefficients matrix) expresses each industry's input requirements as a share of its total output. For industry $j$ and commodity $i$:
$$a_{ij} = \frac{z_{ij}}{x_j}$$
where $z_{ij}$ is the intermediate use of commodity $i$ by industry $j$ (from the Use table) and $x_j$ is the gross output of industry $j$ — BEA Use-table row T018, "Total industry output". It is emphatically not row T005, "Total intermediate inputs": dividing by T005 measures each input as a share of the industry's purchases rather than of its output, and forces every column to sum to 1.00 by construction. See the dated correction at the foot of this page.
An honest caveat about dimensions. The BEA Use table has slightly more commodity rows than industry columns because the 71-sector industry classification does not map one-to-one onto the commodity classification used in the body of the Use table. After extracting the intermediate-use block and dividing by gross output, A has 70 commodity rows and 71 industry columns — it is not square. We publish this non-square matrix as-is (key: A) so users have the full picture.
Because the Leontief inverse requires a square matrix, we separately publish A_square: the industry-by-industry technical-coefficient matrix, recovered from BEA's own published Total Requirements table by inverting the definition $L = (I - A)^{-1}$:
$$A_{\text{square}} = I - L^{-1}$$
This is exact. Every build asserts $\max_{ij}\left|\left(I - A_{\text{square}}\right)^{-1} - L\right| < 10^{-12}$ for all 28 years, and the build fails if it does not; the observed maximum is 8.9 × 10⁻¹⁶ — machine precision.
A and A_square are two different measures, not two views of one matrix: A is commodity-by-industry and comes from the Use table; A_square is industry-by-industry and comes from the Leontief inverse. They are published under different names for that reason and should never be substituted for one another.
The practical implication: use A when you want the full commodity-to-industry input structure; use A_square or L when you are computing multipliers or solving $x = Lf$.[1]
The Leontief Inverse
L is published by BEA (Total Requirements, industry-by-industry, Summary level) and is downloaded, not computed here. It satisfies
$$L = (I - A_{\text{square}})^{-1}$$
Each element $l_{ij}$ of L gives the total output of sector $i$ — direct and indirect — required to deliver one dollar of sector $j$'s output to final demand. The column sum $m_j = \sum_i l_{ij}$ is the output multiplier for sector $j$: a dollar of additional final demand for sector $j$ generates $m_j$ dollars of total economic activity.
The multiplier series can be tracked over time. Across our 28-year coverage, the economy-wide mean output multiplier has ranged from approximately 1.87 (2024) to 2.02 (2008), reflecting changing input structures, the 2008 financial crisis, and long-run shifts in the sectoral composition of output.
Vintage Comparability Caveats
Our 28-year annual series spans a period of substantial methodological change in the BEA accounts. Users who compare years across these boundaries should be aware of the following breaks:
1997 — SIC to NAICS (CRITICAL). The single most important discontinuity in U.S. I-O history. The 1997 accounts were the first constructed under the North American Industry Classification System (NAICS), replacing the Standard Industrial Classification (SIC) used in all prior benchmarks. The transition completely reorganized service industries: the new "Information" sector (NAICS 51) was carved from pieces of manufacturing, communications, and business services; finance, insurance, and real estate were restructured; wholesale and retail trade were reclassified. Because all 28 years in our series use NAICS-based classification, this break does not affect within-series comparisons, but it makes direct comparison with any pre-1997 BEA tables unreliable at the sector level.
2003 — FISIM Allocation (HIGH). Financial Intermediation Services Indirectly Measured (FISIM) — imputed charges for bank services — were previously assigned to a single dummy sector. Beginning with the 2003 comprehensive revision, they were allocated to the actual user industries. This altered the intermediate input structure of every sector that uses banking services and changed the measured size of financial sector output. The revision was applied retroactively to revised historical tables, but the change may affect sectoral comparisons around 2002–2003.
2007 — Supply/Use Terminology and Import Split (HIGH). The 2007 benchmark adopted the international Supply/Use framework terminology (aligned with the 2008 System of National Accounts) and published separate Use tables for domestic production and for imports. Prior to 2007, total (domestic + import) Use tables were the norm, meaning multipliers implicitly included import leakage. Our series uses total-use tables throughout for consistency; users computing domestic-only multipliers should note that pre-2007 figures are not strictly comparable to post-2007 domestic-only estimates.
1996 comprehensive revision — Chain-Weighting (HIGH). Real (inflation-adjusted) I-O measures switched from fixed-weight to chain-type Fisher indexes. Chain-weighted real tables are non-additive: components do not sum to totals in chained dollars. Leontief publishes nominal (current-dollar) tables, which are additive and appropriate for structural analysis.
For most year-on-year comparisons within the 1997–2024 series, these caveats matter at the margin rather than the level. The 71-sector classification is stable throughout; the main practical caution is to note the 2003 FISIM change when analyzing financial sector input structures, and to remember that multipliers including imported intermediates are somewhat larger than domestic-only multipliers.[3]
Corrections
Corrections are appended here in date order and are never removed. Data published before a correction was, for the period stated, wrong; we say so plainly.
2026-07-31 — The A matrix was divided by the wrong denominator (all years, 1997–2024)
What was wrong. Every A and A_square matrix published on this site from launch until 2026-07-31 divided intermediate flows by BEA Use-table row T005, "Total intermediate inputs", instead of row T018, "Total industry output". The cause was a single line in the ingest parser that selected the first total row it found in alphabetical order; the BEA total codes sort T005 < T00OSUB < T00OTOP < T00SUB < T00TOP < T018, so the first one is always T005.
What that means. The published matrix was not a technical-coefficient matrix. Each entry answered "what share of this industry's intermediate purchases went to this input?" instead of "how much of this input does the industry need per dollar of output?" The tell-tale is that every column summed to 1.0000 — an industry appeared to spend its entire output on intermediates, leaving nothing for wages or profit. Column sums of the published A_square ran 0.778–1.0000156; the corrected matrix runs 0.099–0.789 for 2024.
A concrete example (2024). Oil and gas extraction → Petroleum and coal products, i.e. the crude-oil input to refining:
| coefficient | |
|---|---|
As published (defective A_square, 68 × 68) |
0.874756 |
Corrected A_square = $I - L^{-1}$ (71 × 71) |
0.563850 |
Companion measure A (commodity × industry, $z/x$ with $x$ = T018) |
0.612921 |
The site said refiners buy 87.5 cents of crude per dollar of output. They buy about 56 cents.
A second, independent defect fixed in the same pass. A_square was previously built by taking the 68 × 68 intersection of the row and column labels of the commodity-by-industry A. That is not a valid squaring under any BEA assumption — it silently deletes three industries (441, 445, 452) and two commodity rows (Other, Used) and asserts an identity between commodity and industry codes that the accounts do not make. That construction is retired. A_square is now recovered from BEA's published Leontief inverse as $A = I - L^{-1}$, which is exact.
Two prior claims on this page and in the tutorials were false and have been corrected. (1) That A_square was "derived by applying the industry-technology assumption to allocate secondary products back to their primary industry" — it was not; it was a label intersection. (2) That "L is then computed from this 68 × 68 square submatrix" — it was not; L has always been BEA's published Total Requirements table, downloaded directly. L was never affected by this defect and remains authentic throughout.
What was and was not affected.
- Affected and now corrected: all 28 vintages of
AandA_square, the download bundle, and the four studies that consumeA_square— Shock Propagation (HEM), Supply Chains as Networks, Prices and Distribution, and A Marxian Profit Rate. - Never affected:
L(BEA published),Use,Supply,VA,FD, and every study built onL— Key Sectors, Multipliers Explained, Structural Decomposition, Fiscal Multipliers. The output multipliers, linkage indices and Leontief-inverse figures quoted across the site are column sums ofLand are unchanged. - Downstream of the corrected gross-output vector, rebuilt on 2026-08-03: the derived workbooks
employment_multipliers(nowcompensation_multipliers),ghosh_forward_multipliers,type2_multipliers,import_dependencyandstructural_changewere generated in April 2026 from the pre-correction files and consumetotal_output. They are no longer provisional — see the correction dated 2026-08-03 below, which rebuilt all five in a single pass together with the three generator defects named here.
How this is prevented from recurring. The build now fails outright unless $\max\left|\left(I - A_{\text{square}}\right)^{-1} - L\right| < 10^{-12}$ for every year, unless no A column sum reaches 0.999, and unless every study input file with a shared name is byte-identical across the studies that use it. The parser refuses to guess a denominator: it names row T018 explicitly and raises rather than fall back to positional selection.
2026-08-03 — a triple-counted value-added total, a mislabelled multiplier, a mislabelled row, and an infinite path length
The five series left provisional by the correction above have been rebuilt in one pass, together with four defects in the generator that produces them. Everything below is verified in the source tree, not against the live site.
1. Total value added was counted about three times over. The BEA value-added
block has four rows, and two of them are totals of the other two: V001
(compensation) and V003 (gross operating surplus) are components, while VABAS
(basic prices) and VAPRO (producer prices) are subtotals. The generator added
all four together. For 2024 that produced a total value added of $85,023,270
million where the correct figure — BEA's own VABAS row — is $28,287,688
million, a factor of 3.006. The site therefore published two different
"total value added" numbers, one on the Financialization series and one in the
VA matrix itself. Every value-added total now comes from the named VABAS
row. Shares were only mildly affected (finance's share of value added moves from
7.715% to 7.723% in 2024, because numerator and denominator were both inflated),
but every level was wrong, and so was any ratio that mixed an inflated total
with an honest one: the wage share computed from the Use table moves from
0.177 to 0.532 for 2024 — which now agrees with the independent
GDP-by-Industry estimate of 0.514 instead of contradicting it.
2. The "employment multipliers" series measures compensation, not employment.
An employment multiplier needs jobs per dollar of output. The BEA input-output
accounts carry no employment row, and this project holds no BLS or other jobs
file — nothing was ever available to build one from. The series was computed
from compensation (V001) all along. No employment figures were invented to
close the gap; the series was renamed to what it measures. It is now
compensation_multipliers, in dollars of employee compensation generated
economy-wide per dollar of final demand. The old series key and its download
URLs (/api/series/employment_multipliers.*) are retired and will 404.
3. V003 was labelled "Taxes on production and imports". BEA's own row
description for V003 is Gross operating surplus. The wrong label appeared
in the sector registry, in the VA matrix provenance line, and in
Tutorial 02. All three are corrected. The
figures were never affected — only the name attached to them.
4. The network topology series published an infinity and a placeholder zero.
avg_path_length read inf for all 28 vintages and small_world_sigma read
0.0, on a graph reported as having 73 nodes for a 71-industry economy. Two
distinct faults: the path length was computed on the largest weakly connected
component of a directed graph, which is undefined and raised an error that was
being swallowed and returned as inf; and the graph was built from the
commodity-by-industry A (70 × 71), so its node set was the union of two
different label systems — 70 commodity codes plus 71 industry codes sharing 68,
hence 73. The series is now built on the industry-by-industry flow matrix
($A_{\text{square}} \cdot \hat{x}$, 71 × 71), n_nodes reads 71, and the
path length is computed on the largest strongly connected component and
labelled with that scope in its own column (2024: 1.834, on 62 of 71 nodes).
Where a metric is genuinely undefined the series now carries an empty cell, never
inf and never a placeholder 0.0.
What changed and what did not. Rebuilt: compensation_multipliers,
ghosh_forward_multipliers, type2_multipliers, import_dependency,
structural_change, financialization, deindustrialization, labor_share,
wage_share_timeseries, topology_timeseries. Unchanged, bit for bit:
multiplier_timeseries and vintage_multiplier_comparison (both column sums of
L), all 196 published matrices, and all ten studies — the studies read
A_square and L, which this correction does not touch. One number worth
singling out: the Type II multipliers were negative for most sectors and
years (2024 ranged down to −9.48), which is impossible — a Type II multiplier is
by construction larger than the Type I multiplier and therefore greater than one.
They are now positive throughout, with a 2024 minimum of 1.674.
How this is prevented from recurring. The cache build now fails before
writing a manifest unless the Financialization series' total value added equals
the named VABAS row for every year, unless every published series is free of
infinities, and unless the topology series has exactly 71 nodes. In the analysis
code, value-added totals are taken from a single helper that names the VABAS
row and raises rather than sum a block whose rows are not all the same kind of
thing; a second guard refuses to emit any total that happens to equal the blind
sum of a block containing subtotal rows.
Data Provenance
All matrices are derived entirely from BEA data retrieved via the BEA API (JSON format). The three primary source series are:
- Use tables:
Use_IxI_Summary_YYYY.json— the industry-by-industry summary Use table - Supply tables:
Supply_IxI_Summary_YYYY.json— the industry-by-industry summary Supply (Make) table - Total Requirements:
Total_Requirements_IxI_Summary_YYYY.json— BEA's own published Leontief inverse (used as a cross-check; Leontief's L is independently derived from A)
No proprietary data sources, licensed databases, or imputed values are used. The derivation of A and L from the raw Use tables follows standard methodology.[1][3] The code used to fetch, parse, and compute each matrix is published alongside every download so that any user can reproduce the pipeline from scratch.
The BEA data underlying these tables is in the public domain as a product of the United States federal government.