Skip to content
Heterodata An Arcanum Research project Leontief
Leontief

How the pipeline works

This dataset is built by the Anu framework — a staged, documented data-construction pipeline. Every script and file carries a stage prefix so the code reads as an ordered method, not a pile of scripts. Here is what the prefixes mean.

View all the code on GitHub ↗
  1. S

    Setup

    Register each upstream data source — the named publisher, series id, vintage, and retrieval method — and prepare the working environment. Every table begins from a documented source of record (here, the U.S. Bureau of Economic Analysis Annual I-O Accounts).

  2. L

    Loading

    Fetch and read the raw source data (BEA API pulls, archived spreadsheets) and check that the fetched units and dimensions match what the source promises before anything downstream runs.

  3. P

    Processing

    Construction and transformation — and processing only. Assemble the Use and Supply tables, then derive the technical-coefficient matrix A, its square form, and the Leontief inverse L = (I − A)⁻¹, with a dimensional-analysis check whenever units differ.

  4. V

    Validation

    Check each constructed matrix and series against the published BEA benchmarks — row/column totals, balance identities, unit and scale audits. Tables only pass when they reproduce the published values.

  5. M

    Manual adjustment

    Apply and document any hand adjustment a source genuinely requires (for example a BEA redefinition or a one-off vintage fix). Each adjustment is recorded so the change is auditable, never silent.

  6. A

    Analysis

    Compute the analytic quantities built on the matrices — output multipliers, backward/forward linkage indices, and the other I-O measures the studies and charts report.

  7. O

    Output

    Write the publishable artifacts: the per-table CSV / Parquet files, the bulk archives, the catalog, the figures, and the documentation that ships with the data.

Each script filename combines a phase prefix with a number that identifies the step (e.g. P02_build_coefficients.py is a processing step). The numbers are ids, not an ordering — the letter tells you which pipeline phase the script belongs to, and P always means processing. (A script-phase prefix is a different thing from a data series's own id; the letter on a script says nothing about how a series is classified, and vice versa.) The full source — loaders, processors and validators — lives on GitHub, and every chart and table on this site is produced by that same code.

Browse the repository →

Reproduce a figure

You do not need the whole pipeline to check our numbers. An economy's output multiplier for a sector is simply the column sum of the Leontief inverse L = (I − A)⁻¹: the total output, across all sectors, required to deliver one unit of that sector's final demand. The transform below downloads the published L for 2024 (CSV), computes every sector's output multiplier, and ranks them — the same computation behind the Multipliers study. It is shown in both R and Python; switch with the toggle. Point L_url at any year, and change the column you sort on to explore.

output multipliers from the Leontief inverse
# Output multipliers from the published Leontief inverse L = (I - A)^-1.
# The output multiplier of sector j is the column sum of L: total output
# (across all sectors) needed to deliver one unit of j's final demand.
#
# DATA:   point L_url at any year's Leontief inverse (the /api/table CSV).
# CHANGE: L_url (the year) and `n` (how many top sectors to print).

L_url <- "https://inputoutput.heterodata.org/api/table/2024/L?fmt=csv"
n      <- 10

# read the 71 x 71 inverse; first column is the sector index -> row names
L <- read.csv(L_url, check.names = FALSE, row.names = 1)
L <- as.matrix(L)

# output multiplier = column sum of L (one value per sector)
mult <- colSums(L)

out <- data.frame(
  sector     = names(mult),
  multiplier = as.numeric(mult),
  row.names  = NULL,
  stringsAsFactors = FALSE
)
out <- out[order(-out$multiplier), ]
out$rank <- seq_len(nrow(out))

cat(sprintf("economy mean output multiplier: %.3f\n", mean(out$multiplier)))
print(head(out[, c("rank", "sector", "multiplier")], n), row.names = FALSE)
# write.csv(out, "multipliers_2024.csv", row.names = FALSE)
# Output multipliers from the published Leontief inverse L = (I - A)^-1.
# The output multiplier of sector j is the column sum of L: total output
# (across all sectors) needed to deliver one unit of j's final demand.
#
# DATA:   point L_url at any year's Leontief inverse (the /api/table CSV).
# CHANGE: L_url (the year) and `n` (how many top sectors to print).
import pandas as pd

L_url = "https://inputoutput.heterodata.org/api/table/2024/L?fmt=csv"
n     = 10

# read the 71 x 71 inverse; first column is the sector index -> row index
L = pd.read_csv(L_url, index_col=0)

# output multiplier = column sum of L (one value per sector)
mult = L.sum(axis=0).rename("multiplier")
mult.index.name = "sector"

out = mult.reset_index().sort_values("multiplier", ascending=False).reset_index(drop=True)
out["rank"] = out.index + 1

print(f"economy mean output multiplier: {out['multiplier'].mean():.3f}")
print(out.loc[: n - 1, ["rank", "sector", "multiplier"]].to_string(index=False))
# out.to_csv("multipliers_2024.csv", index=False)

Both versions read the same published CSV and produce the same ranking — the studies ship full runnable bundles (R + Python + notebook + data) at /api/study/<slug>/bundle.zip.

Data provenance

Source
U.S. Bureau of Economic Analysis (BEA) Annual Input-Output Accounts, Summary level, retrieved via the BEA API. Public domain (a work of the U.S. federal government).
Attribution
Matrices A, A_square and the Leontief inverse L = (I − A)⁻¹, plus the derived multiplier and linkage series, are computed by Leontief (an Arcanum Research project) from the BEA Use and Supply tables using standard input-output methodology. See Methodology.
Units & coverage
Dimensionless technical coefficients and multipliers (the underlying BEA accounts are in current-dollar producer values). 71 sectors (BEA Summary), 1997–2024 (28 annual vintages).
Downloads
Every matrix and series is downloadable as CSV, XLSX and Parquet (no JSON). Bulk: all.zip.
Refresh cadence
Annual, on BEA release. The BEA publishes new annual I-O accounts roughly once a year (typically autumn); Leontief is refreshed by re-running the Anu data pipeline against the BEA API when a new vintage appears. Method: manual pipeline run.

Last updated — 2026-08-03 (BEA API retrieval date of record for every table on this site). Reconstructed for research and education; not a substitute for the canonical BEA source.