Every number on this site is built from named public sources, and every section below names them. Each section also says plainly what its score cannot tell you. If a piece of data we collect doesn't feed one of these scores yet, it gets a one-line mention in Other data we collect at the bottom — nothing more.

How we compute AI exposure

Feeds the National Pulse exposure tile, the heatmap's exposure layer, and the occupation ranking table.

The data. We measure what people actually do with AI, not what a model predicts they could do. The source is Anthropic's Economic Index: the published usage data from all six quarterly releases so far (February 2025 through June 2026) — about 3.7 million rows of real people using Claude on real tasks. Every release is stored as published, so the score is a trend, not a one-off snapshot.

The assembly. Each release tells us how much Claude is used on specific work tasks. We match those tasks to the official O*NET task list — the Labor Department's inventory of what each occupation actually does — and weight each task by how much of the job's time it occupies, using O*NET's own importance and frequency ratings. That gives a per-occupation score: the share of a job's task time that AI is actually used for. We compute it separately for automation-style use (directing AI to do the task) and augmentation-style use (learning, iterating, getting feedback — working with AI). The score is then mapped onto places: metros with federal occupation data (BLS OEWS) get the employment-weighted mean over their own occupation mix; every county gets a synthetic mix — county employment by industry (BLS QCEW) spread across occupations using the OEWS industry staffing patterns.

Integrity check: our occupation rankings correlate at ρ = 0.85 with Anthropic's own published rankings for the same release. The mapping to geography is validated separately: the synthetic county mixes reproduce metro occupation mixes with a mean correlation of 0.944, and the resulting exposure scores correlate with the direct metro estimates at r = 0.693 (0.80 among the 50 largest metros). That exposure-level gap is the honest cost of estimating county mixes from national patterns — it is documented, accepted, and tracked as a known limitation, and a shrinkage estimator is a committed follow-up.

What you see. Places are shown as a national-mean index: 1.0 is exactly the national average, 1.20 means 20% more exposed, 0.80 means 20% less. The map's bands — LOW below 0.8, MODERATE 0.8–1.25, HIGH at 1.25 and above — are a working definition for comparison, not a calibrated scale. Every metro is published with a 90% interval (a bootstrap over the federal data's own sampling error and the choice of underlying measure), and metros whose interval crosses zero are hatched as not significant rather than drawn as confident.

The theoretical comparison measures. Alongside the measured score, the occupation ranking shows three published academic estimates — Felten's AI Occupational Exposure index, Eloundou et al.'s "GPTs are GPTs" ratings, and Eisfeldt et al.'s postings-based measure. These are theory-based: they estimate how exposed a job could be given its tasks, not how much people use AI. We show them as separate columns next to the observed score and never blend them into it — the two often disagree, and the disagreement is the point.

What it can't tell you: exposure measures use, not job loss. A highly exposed occupation is one where a lot of AI-assisted work happens — it says nothing by itself about whether employment there will fall. And nothing on this site shows that AI caused any labor-market change.

How we compute adoption

Feeds the adoption tile and the Adoption section on National Pulse, the metro sidebar's state-level line, and the Phase 5 diffusion model. The charts show both survey eras as separate, era-labeled segments (original wording muted, current wording accented, a wording-break divider between); the eras are never combined into one series or one scale.

The data. The Census Bureau's Business Trends and Outlook Survey (BTOS) asks a sample of U.S. businesses, every two weeks, whether they use AI in producing goods or services (original wording), and from December 2025 whether they used AI in any of their business functions in the last two weeks (current wording). We ingest every published wave — 76 biweekly waves since September 2023.

What the shares mean. Each published number is the share of firms answering "yes." Firms answering "don't know" are never counted as "no," and estimates that don't meet Census's own publication standards are shown as missing — never zero-filled. Each wave carries a 90% confidence interval, which we publish alongside the share.

Census reworded the core question in December 2025 (from "use AI in producing goods or services" to "use AI in any of its business functions"), so the two eras measure different things. Both eras are charted — as separate, era-labeled segments, each on its own scale — and are never combined into one number or one continuous series.

The grain. Census publishes the shares nationally, by industry sector, by firm size class, by sector and size together, and by state — the same grain we publish, and what the Phase 5 diffusion model consumes.

The cross-check. The Stanford Real-time Population Survey asks workers (not firms) about generative AI use. We compare it to the firm series on direction only — rising, falling, or flat — because a share of adults and a share of businesses are different populations and the levels aren't comparable. So far the two series agree on direction in both survey eras.

What we're building on this data: fitted diffusion curves (a logistic/Bass fit by survey era, sector, firm size and state, with the RPS worker series as a direction check) live in our staging tables and feed the Phase 5 employment model. They are research inputs, not published numbers — most early fits hit their upper bound on the short history available, so nothing on the public site comes from them yet.

What it can't tell you: a firm saying it "uses AI" says nothing about how much of its work is affected, or whether any jobs changed. The series is also young — it starts in September 2023 — so long-run claims aren't possible yet.

How we compute the local economy context

Feeds the National Pulse metro table and its metro sidebar.

These measures are context, not the headline. Each one tracks the local economy overall — any of them can move for reasons that have nothing to do with AI. On its own, none of them shows AI's effect; that's why the exposure score above is measured separately.

How they're assembled. The local stress number on the metro pages is the plain average of whichever of these three are current (at least two must be live, or the score is withheld). The National Pulse map then tilts that stress by the metro's measured AI exposure — exposure amplifies it, but never replaces it.

The national stress gauge. The Labor Market Stress chip on National Pulse combines the national versions of the same three components into one 0–100 score (unemployment 3%→0, 7%→100; postings 100→0, 80→100; layoffs 0.8→0, 2→100), measured for every month where all three are present — February 2020 onward, since the Indeed postings history was backfilled to its true start (see docs/DECISIONS.md DEC-45). Its percentile line — "calmer than N% of months since YYYY" — is a rank within that measured window (currently 2020, not 2023), not a probability.

Adaptive capacity. The metro sidebar on National Pulse also shows how well-positioned a place is to absorb economic change, from Census ACS five-year data: share of adults with a bachelor's degree, share of households with broadband, median household income, and how diversified the local industry mix is. Higher is more capacity to adapt — it is not an AI prediction.

What it can't tell you: all three context measures are economy-wide. A high-stress metro may simply be in a non-AI downturn; a low-stress one may be losing AI-exposed jobs to attrition rather than layoffs. None of them isolates AI.

How we compute the scenario tracker

Feeds the scenario panel on National Pulse.

The tracker watches three long-run possibilities — accelerated displacement (AI substitutes for workers faster than new roles absorb them), gradual transition (displacement, but slow enough for retraining and attrition to keep pace), and augmentation dominant (AI mostly makes existing workers more productive). It doesn't guess which is happening; it watches eight indicators drawn from published research — things like the AI-cited share of announced layoffs (Challenger, Gray & Christmas) and employment growth in early-adopter sectors (the Stanford Digital Economy Lab / ADP "Canaries" work). Each indicator has a published threshold that would signal movement toward one scenario, and a reliability weight for how trustworthy it is. The live table below is generated from the indicator configuration.

Loading scenario triggers…

The odds are hidden. We do not publish probabilities for the three scenarios. When odds are computed internally, they start from an equal prior (one-third each) and move only as indicators cross their thresholds. Until a calibrated, backtested model is ready, what you see is the evidence, not a verdict.

Indicator flow diagram

The diagram below shows how each monitored indicator flows into the three scenarios, weighted by reliability and signal strength. Hover a flow for the indicator's value, threshold, and trend; click to pin the detail.

Loading indicator flow diagram…

What it can't tell you: the tracker can reduce false alarms by requiring multiple indicators to align, but it can't eliminate them — an indicator can breach its threshold for reasons unrelated to AI. And no configuration of indicators proves AI caused anything; labor markets respond to interest rates, trade, demographics, and the business cycle all at once.

Scenario weight computation

Each scenario's weight is a softmax over a log-prior plus live evidence:

weightS = exp(log(baseS/100) + smoothing × evidenceS) / Σ exp(log(baseS'/100) + smoothing × evidenceS')

The base_weights prior (Accelerated 33.3 / Gradual 33.3 / Augmentation 33.4 — an equal prior) is a smoothing prior that prevents extreme swings from sparse data and reflects a baseline expectation across the three scenarios. smoothing = 1.0 (configurable via config/scenario_thresholds.json). When few indicators are triggered, the weights reflect the prior; as indicators trigger, the weights shift toward the triggered scenarios. The current evidence totals and base weights are available in /api/scenario.

How we tested it — labor market impact

The depth behind the test list in the Labor Market Impact sidebar's panel. The tests below establish that employment in the most AI-exposed industries and everywhere else stopped moving together after 2022. None of them can prove AI did it — that limitation is exactly why the card reads Inconclusive.

The published series behind every test is the 44-quarter national gap series served by GET /api/v2/impact/gap-series (employment in the most AI-exposed industries vs all other industries, each indexed to 100 in 2015Q1, from the Census Bureau's Quarterly Workforce Indicators). Every statistic below was produced by the recorded diagnosis run and is reproducible on your own machine with public data: download the QWI release, build the county-by-quarter panel, and use the analysis scripts referenced under each test as readable reference implementations — nothing requires access to our infrastructure.

Overall trend test

What it asks: is the post-2022 divergence between the two lines statistically real across the full panel, or small enough to be noise?

What it found: an event-study leads test on 1,496,100 estimation rows from 1,742 county clusters rejects at p ≈ 10−203 (Wald statistic 995) for the full-leads window (2019Q1–2022Q3, 14 leads). A rejection this size is far beyond any reasonable doubt that the lines separated.

Reproduce: pull the same 44 quarters from /api/v2/impact/gap-series, then read scripts/wp4/event_study.py (the estimator) and scripts/wp4/wp42_diag_probeC.py (the diagnosis probe) as reference implementations to run against your own QWI download.

Pre-COVID window

What it asks: does the same drift appear before the pandemic, so that COVID alone cannot explain it?

What it found: confining the leads test to 2015Q1–2019Q4 (20 leads, no pandemic quarters) still rejects, at p ≈ 10−170 (Wald statistic 862). The exposed and unexposed groups were on systematically different employment paths years before any AI effect could have acted — which is precisely why correlation cannot be promoted to causation here.

Reproduce: same estimator and probe scripts, restricted to the 2015Q1–2019Q4 lead window, on your own QWI panel.

Permutation tests

What it asks: is the rejection a property of the specific map of which places count as exposed — or would any grouping produce it?

What it found: 30 seeded draws that shuffled the exposure map all reject at the same order of magnitude (median p ≈ 10−68; the real anchor sits inside the shuffled range). In other words, a deliberately meaningless exposure map "finds" the same signal — so this probe did not vindicate the design, and it is a central reason the verdict stays Inconclusive rather than "AI did it."

Reproduce: the shuffle loop is in scripts/wp4/wp42_diag_probeC.py (seeds 1–30); run it over your own rebuilt exposure map.

Leave-one-industry-out

What it asks: could a single industry — say, Information — be driving the entire result?

What it found: each of the 19 NAICS sector groups was dropped in turn and the test re-fit; every one of the 19 samples still rejects in both windows. The weakest rejection drops Information (NAICS 51), at p ≈ 3×10−36 — astronomically far from the p > 0.10 gate, so no sector-composition choice rescues or explains the pattern.

Reproduce: the 19 leave-one-sector-out fits are part of scripts/wp4/wp42_diag_probeC.py's recorded configuration; re-run them over your own panel with any sector grouping you prefer.

Clustered standard errors

What it asks: are the error bars honest when neighboring workers share local shocks — a plant closing, a state policy — rather than being independent?

What it found: all of the above tests use standard errors clustered across 1,742 local labor markets (counties) over the 1,496,100-row estimation sample, so no single county's quirks can manufacture the rejection.

Reproduce: the clustering specification is declared in scripts/wp4/event_study.py; the same QWI panel rebuilt locally reproduces the cluster count.

What these tests can't tell you: every one of them confirms the lines separated, and none can yet prove AI did it — exposed places were already on different paths before AI arrived (see the pre-COVID window and permutation results above). Closing that gap needs the newer designs described in the sidebar's ongoing-research section. The recorded diagnosis is the working reference for this battery.

What we don't compute yet

Other data we collect

Collected for the impact and forecast work. None of it feeds a published score yet.

How scores are computed

National Risk Index (Unweighted Stress)

The unweighted mean of stress_score across all tracked US metro areas, on a 0–100 scale where higher values indicate greater labor-market stress. Derivation: National Risk Index = mean over tracked metros of stress_score (unweighted, 0–100 scale). Below 20 = low, 20–40 = moderate, 40+ = high. This is the number shown in the Quick Report National Context block on the For Policymakers page. View on For Policymakers →

MS1 — historical note

MS1 was originally labeled "DC/SF/Phoenix/Tampa metro sentinel employment" — a 4-metro pilot. The data is now available for all 802 tracked metro and micro areas via the BLS API and represents total nonfarm payrolls in the information + professional/business services + admin-support composite (thousands). The label was updated on 2026-07-22 to reflect the current scope. The MS1 metric ID and the underlying values are unchanged.

National AI-Impact Index

The AI-weighted composite: ai_impact_score = stress_score × multiplier(exposure), where stress_score is 0–100 and exposure is the metro's AI-exposure weight (0–1). The multiplier is a fixed, published function — anchored to the national employment-weighted exposure and stretched by a fixed gain, clamped to [0.5, 1.0] (per DEC-04) — deliberately not a percentile rank, which would make a metro's score depend on other metros' data and break reproducibility. Metros without their own measured BLS OEWS occupation data ship "Insufficient local data" instead of a score derived from a national-fallback exposure (per DEC-10's WP0.4 ranking gates). This is the number shown in the home page hero. stress_score averages the CM3/CM7/CM5 components that are present and current — components older than their freshness window (CM3/CM7 6 months, CM5 12 months) are dropped, and CM5 is scaled as workers laid off per 10,000 employed over a trailing 12-month window, saturating at 168 per 10k (per DEC-10). Full derivation: How scores are computed. The map color scale uses a 0–60 visual domain for readability (most values cluster in the 0–40 range); this is a visual choice, not a scale claim. Below 20 = low, 20–40 = moderate, 40+ = high. View on National Pulse →

Career Scores

Each occupation gets an AI exposure score blended across multiple published methodologies. All occupation scores currently use the cognitive weight vector (Felten 40% / Eloundou 35% / Eisfeldt 25%). Physical exposure (not yet active) — the physical weight vector is documented for completeness but will be activated once O*NET work-context data is ingested. See the work_context_coverage field in /api/methodology for the current coverage state.

Composite formula. The composite is a weighted average of the available methodology scores: composite = Σ(scorei × weighti) / Σ(weighti), using the weights shown in the table below. When a methodology is unavailable for an occupation, its weight is redistributed proportionally across the remaining methodologies (e.g., if only Felten 40% and Eloundou 35% are available, the effective weights are 40/75 = 53.3% and 35/75 = 46.7%). This is a simple weighted average — not a geometric or harmonic mean. A researcher can reproduce the composite for any occupation using this formula, the weights below, and the per-methodology scores from the career detail API.

Loading career scoring config…

Worked examples

As of 2026-07-21. Verify against the live API: /api/career/detail/19-3011.00 (Economists) and /api/career/detail/15-1252.00 (Software Developers).

Example 1: Economists (SOC 19-3011.00) — all 3 published methodologies.

composite = (0.9705 × 0.40 + 0.5000 × 0.35 + 0.5692 × 0.25) / (0.40 + 0.35 + 0.25)
    = (0.3882 + 0.1750 + 0.1423) / 1.00
    = 0.7055

Example 2: Software Developers (SOC 15-1252.00) — 1 published + 1 heuristic (redistributed weights).

composite = (0.6800 × 0.40 + 0.8684 × 0.35) / (0.40 + 0.35)
    = (0.2720 + 0.3039) / 0.75
    = 0.7679

In Example 2, Eisfeldt's 0.25 weight is redistributed proportionally: the effective weights are 0.40/0.75 = 53.3% (Felten) and 0.35/0.75 = 46.7% (Eloundou). The Felten slot uses the in-house heuristic-v1 estimate because this occupation is not in the published Felten AIOE v2 dataset (774 SOC codes / 805 O*NET occupations); the 215 missing occupations use the heuristic fallback. See the Displacement vs. Exposure section for the distinction between exposure (what these scores measure) and displacement.

Community Scores (CM1 & CM2)

CM1 — Structural AI Exposure: Computed from ACS PUMA-level occupation data (C24050). Each occupation group is weighted by its AI exposure (derived from the Felten AIOE index, employment-weighted by SOC major group). The score is the weighted share of the local workforce in AI-exposed occupations, normalized to 0–1.

CM2 — Adaptive Capacity: A composite of four components, each normalized to 0–1 and averaged:

Higher CM2 = greater capacity to adapt to AI-driven economic change.

Limitations & known caveats

Confidence levels

Every observation in our database carries a confidence label:

Loading…

Metro-level proxies (L1, L4, L6)

Three leading indicators — L1 (AI-cited layoff share), L4 (Canaries slope), and L6 (Anthropic Economic Index) — are published at the national level by named sources (Challenger, Gray & Christmas; Stanford Digital Economy Lab / ADP Canaries; Anthropic). At the metro level, we do not yet ingest the named-source data. Instead, we compute proxy values from the CM metrics that are available at the metro level:

National Pulse's metro sidebar ("How Your Metro Compares") separates these proxy values into a "Metro Proxies" section so they are not confused with the named-source national values. See /api/methodology for the metro_l1_l4_l6_proxies field with the full proxy descriptions.

CM8 (Bachelor's degree or higher) — collected but not displayed

CM8 (Bachelor's degree or higher) is collected in the warehouse from Census ACS (census_acs_education_ba_pct) but not displayed on the metro panels. The value is available via the data download and API for researchers who need it. A regression test (tests/test_geo.py::test_cm8_not_in_metro_panels) ensures CM8 stays off the panels unless deliberately added.

Displacement vs. Exposure

AI exposure measures how much an occupation's tasks overlap with AI capabilities. Displacement measures actual job losses attributable to AI. Our academic methodologies (Felten AIOE, Eloundou GPTs-are-GPTs, Eisfeldt et al.) measure exposure, not displacement. The displayed "Displacement" number for every occupation is sourced from the in-house heuristic-v1 model, not from any of the three published methodologies — none of the three published methodologies measure displacement; they measure exposure. The heuristic-v1 model produces displacement estimates for all occupations. We treat a heuristic-v1 displacement score as a fallback estimate (and display '—' instead) when the heuristic value is ≤ 0.01 (near-zero) or when it converges with the exposure score to within 0.001 (exposure-as-displacement); in those cases the card shows an 'estimated' badge. For the median occupation (BLS projection in the deadband, no friction), the "Peak Displacement Risk" equals the exposure composite — see the Displacement risk formula subsection below for the derivation, and the career detail page's "Equals exposure" badge for the point-of-display flag.

F4 (2026-07-22): The browse table and detail card both show the composite displacement risk (computed by assess_displacement_risk). The heuristic-v1 score is shown as a secondary italic in the browse table and on the detail card for continuity. An “= exposure” mini-badge appears in the browse table when the composite equals the exposure score (deadband case). This resolves a prior inconsistency where the browse table showed the heuristic-v1 sentinel (often <1%) while the detail card showed the composite (often much higher) for the same occupation. Note: this reverses CT9311-X4, which had deliberately moved the browse table to heuristic-v1 as primary; the persona's cite-ability use case (browse == detail == composite) outranks the information-density argument, and the heuristic-v1 value is preserved as a secondary italic so no information is lost.

Displacement risk formula

The "Peak Displacement Risk" number on the career detail page is computed by assess_displacement_risk in api/career_scoring.py. It takes the AI exposure composite as a base and applies multipliers based on BLS employment projections and labor-market friction:

displacement_risk = exposure_score × multiplier

The multiplier rules (applied in order, only the first matching rule fires):

The result is capped at 1.0. For the median occupation (BLS projection in the deadband), the multiplier is 1.0 and displacement_risk == exposure_score to 4 decimal places.

The friction multiplier (0.8 for high-friction occupations, defined as total friction years > 5) was documented for completeness but has been removed; it will be re-added in a future change once O*NET work-context data is ingested. See the friction_note in /api/methodology.

Worked examples. For Economists (SOC 19-3011.00, exposure 0.7055, BLS +2.3%): displacement_risk = 0.7055 × 1.0 = 0.7055 — identical to the exposure composite. For Software Developers (SOC 15-1252.00, exposure 0.7679, BLS +6.2%): displacement_risk = 0.7679 × 1.0 = 0.7679 — also identical.

Plain-English summary

For the median occupation — one whose BLS 10-year projection sits in the (−5%, +10%) deadband — the displacement-risk multiplier is 1.0, so the displayed “Peak Displacement Risk” is identical to the AI exposure composite to 4 decimal places. The “Equals exposure” badge on the career detail card (and the “= exposure” mini-badge in the browse table) flag this case at the point of display. The displacement framing is preserved on the detail card rather than relabeling the number “exposure score” because, for occupations outside the deadband — high-growth fields where the multiplier is 0.7, or declining fields where it is 1.2 — the displacement number diverges from the exposure number and the framing becomes meaningful. See the worked examples above for the arithmetic.

displacement_risk vs displacement_score. The career detail API returns two distinct fields: displacement_risk (from assess_displacement_risk, shown as "Peak Displacement Risk") and displacement_score (from the canonical view's heuristic-v1 row, shown in the "Displacement" score row). The latter is null for most occupations (the API suppresses it when it converges with exposure within 0.001 or is ≤ 0.01). When non-null, the score row shows it with a "heuristic" badge. The "Peak Displacement Risk" number is always from assess_displacement_risk, not from the heuristic-v1 row.

Composite precision (standard error)

The composite exposure score is a weighted average of up to 3 published methodologies (Felten, Eloundou, Eisfeldt). When 2 or more published methodologies are available, the career detail API reports a weighted standard error (SE) and 95% confidence interval:

SE = sqrt( Σ(wi × (scorei − composite)2) / Σ(wi) / (n − 1) )

where wi is the methodology weight (Felten 0.40, Eloundou 0.35, Eisfeldt 0.25), scorei is the per-methodology exposure score, composite is the weighted average, and n is the number of published methodologies (excluding heuristic-v1, which is not a published methodology). The 95% CI is composite ± 1.96 × SE, clipped to [0, 1].

Why weighted (not unweighted) variance: The methodologies have different coverage and reliability. Weighting by the same weights used in the composite ensures that a methodology with a small weight (e.g., Eisfeldt at 0.25) contributes proportionally to the SE, not equally with Felten at 0.40.

n < 2 fallback: When only 1 published methodology is available (or 0), the SE is not computable. The API returns composite_std_error: null with a precision_disclosure string explaining why. The career detail card shows the disclosure text in place of the SE.

Heuristic-v1 exclusion: The in-house heuristic-v1 estimate is excluded from the SE computation because it is not a published methodology and would artificially narrow the CI for occupations where it substitutes for a missing published source.

Worked example. For Economists (SOC 19-3011.00): Felten 0.9705, Eloundou 0.5000, Eisfeldt 0.5692. Composite = 0.7055. SE ≈ 0.15, 95% CI ≈ [0.40, 1.00]. The wide CI reflects the 47pp disagreement between Felten and Eloundou on this occupation.

Scenario weight changelog

View scenario changelog

Loading…