AI Risk Index
The most methodologically rigorous, fully transparent AI job-exposure index.
Ranking · Insights · Methodology · API
Headline metrics (run 1.0.0-draft.1 · 2026-08-05)
| Metric | Value | Pastille |
|---|---|---|
| Share of the U.S. wage bill under substitution pressure | 32% (≈ $4.7T of $14.5T) | |
| Employment-weighted substitution score | 34 / 100 | |
| Employment-weighted augmentation score | 55 / 100 | |
| Workers in high-substitution occupations (≥ 70) | 5.3M (2.7%) | |
| Workers in high-augmentation occupations (≥ 70) | 47.8M (24.6%) | |
| Coverage | 887 occupations · 194.2M workers (BLS OEWS) |
"Under pressure" means paid work overlapping with what AI can plausibly take over — not a payroll forecast. Realized effects to date are concentrated and cohort-specific; measured usage remains majority-augmentative. The index is built as adaptation guidance, not doom.
What this is
AI Risk Index scores every U.S. occupation on its exposure to AI-driven automation using a task-based methodology: each of the ~18,800 O*NET task statements is rated individually by a multi-model LLM panel, and occupation scores are derived from importance-weighted task scores. Every number is transparent, versioned, and reproducible.
The three scores (never collapsed into one)
| Score | Question it answers |
|---|---|
| Exposure | Is AI technically capable of performing the occupation's tasks? |
| Substitution | Does AI actually replace the human — after cost, barriers, and adoption? (headline) |
| Augmentation | Does AI assist the human, raising productivity without replacing them? |
Every score ships with a confidence interval derived from rater disagreement — multi-model replication shows single-model exposure ratings can vary by an order of magnitude, so a single-model index is an artifact. Ours makes the disagreement visible.
Methodology in one screen
Dimensions & weights (v1 — defined once in packages/scoring/src/weights.ts, served live at /api/v1/methodology):
| Dimension | Weight | Orientation |
|---|---|---|
| Task automatability | 0.35 | direct |
| Current technical feasibility | 0.20 | direct |
| Cost of substitution vs. wage | 0.15 | direct |
| Adoption barriers | 0.20 | inverted — strong barriers protect |
| Sector adoption velocity | 0.10 | direct |
Formulas — a rating r ∈ [1,5] normalizes to pressure p = (r−1)/4 (inverted: 1−(r−1)/4):
substitution_task = 100 · Σ_d w_d · p_d
exposure_task = 100 · (w_auto·p_auto + w_feas·p_feas) / (w_auto + w_feas)
augmentation_task = 100 · p_augmentation (rated separately, outside the composite)
occupation = importance-weighted mean of its tasks (O*NET IM weights)
CI bounds = worst/best-case envelope over the rater panel (min/mean/max)The scoring engine (packages/scoring) is pure and deterministic — no I/O, no clock, no randomness — pinned by property-based tests (fast-check) and a published worked example reproduced to 3 decimals. Full spec: METHODOLOGY.md · changelog.
Rating pipeline (apps/worker): Anthropic Message Batches (50% discount, prompt-cached rubric, schema-constrained JSON output), one request per task × model, deterministic custom_ids → idempotent and resumable. Every rating stores model, prompt version, raw response, parsed score, and rationale — the full audit trail is visible on every occupation page (expand any task).
Integrity rules: weights/formulas/prompt changes bump INDEX_VERSION with a changelog entry; every published score traces to an immutable score_runs row; historical runs stay queryable forever.
Data sources
| Source | Version | Role | License |
|---|---|---|---|
| O*NET database | 30.3 (May 2026) | 1,016 occupations, 18,796 task statements, importance weights | CC BY 4.0 |
| BLS OEWS | May 2025 national | Median wages + employment (830 SOCs) | Public domain |
| ESCO v1.2 + ROME 4.0 | planned | EU/France crosswalk | EUPL / Licence Ouverte |
| Adoption evidence (BTOS, Anthropic Economic Index, …) | 2025–2026 | Grounds the adoption-velocity & barriers rubrics | various |
Raw dumps are immutable (data/raw/, fetched by script, never committed); derived artifacts commit manifests only (hashes + row counts). The research corpus grounding v1 — 20+ indices reviewed, verified source URLs, API cost analysis — lives in docs/research/.
Public API
Versioned, JSON, index_version in every payload. Rate limit 60 req/min (600 with key).
# Health
curl https://www.airiskindex.io/api/v1/health
# Machine-readable methodology (weights, orientation, thresholds)
curl https://www.airiskindex.io/api/v1/methodology
# Search occupations
curl "https://www.airiskindex.io/api/v1/occupations?q=paralegal"
# Full score breakdown: sub-scores, CI bounds, tasks, wages
curl https://www.airiskindex.io/api/v1/occupations/23-2011.00Monorepo
airiskindex/
├── apps/
│ ├── web/ # Next.js 14 — site + public API (ranking, insights, detail pages, drawer nav)
│ ├── worker/ # BullMQ + Anthropic Message Batches rater pipeline, recompute, purge scripts
│ └── etl/ # Python 3.12 — O*NET/OEWS download → transform (manifests) → Postgres load
├── packages/
│ ├── scoring/ # Pure TS scoring engine — the auditable core (weights, formulas, CI)
│ ├── db/ # Prisma schema: occupations, tasks, rating audit trail, immutable runs
│ ├── ui/ # Shared React components
│ └── config/ # Shared tsconfig presets
├── data/ # raw/ (immutable, gitignored) · derived/ (manifests committed)
├── docs/
│ ├── methodology/ # METHODOLOGY.md (source of truth), changelog, worked examples
│ └── research/ # Research corpus: indices, data sources, rater API, market evidence
└── infra/ # docker-compose, PM2 wrappers, ngrok config, deploy scriptQuick start
pnpm install
docker compose -f infra/docker-compose.dev.yml up -d # postgres 16 + redis (or brew services)
cp infra/.env.example .env # fill DATABASE_URL, ANTHROPIC_API_KEY, RATER_MODELS…
pnpm db:migrate && pnpm db:seed
pnpm dev # web on :3000Full pipeline to a real index:
cd apps/etl && make pipeline # O*NET 30.3 + OEWS → Postgres (1,016 occupations, 18,796 tasks)
pnpm --filter @airiskindex/worker rate # multi-model batch rating (parallel, resumable)
pnpm score:recompute # new immutable score runChecks (must pass before any commit): pnpm typecheck && pnpm lint && pnpm test
Design system
Charts follow a validated, colorblind-safe reference palette (sequential blue for magnitude, CI whiskers in muted ink, emphasis form for "you are here" distributions, visible data-table fallbacks). Fully responsive — right-side drawer navigation on mobile, dark mode with selected (not flipped) palette steps.
Roadmap
- 5% human review sample + expert Delphi override queue (schema ready)
- Sensitivity analyses published per release (
docs/methodology/sensitivity/) - Convergent-validity report vs Felten AIOE, GPTs-are-GPTs, ILO gradients
- ESCO/ROME crosswalk — EU & France coverage
- API keys + rate limiting middleware
-
INDEX_VERSION1.0.0 — first published run
License, citation & contact
- Scores & derived data: CC BY 4.0 — reuse freely with attribution "AI Risk Index (airiskindex.io), version X".
- Code, site design & text: © 2026 Simon-Pierre Boucher. All rights reserved.
- Incorporates the ONET® database (USDOL/ETA, CC BY 4.0) and BLS OEWS data. ONET® is a trademark of USDOL/ETA, which has not reviewed or endorsed this project.
Cite as: AI Risk Index, version 1.0.0-draft.1, airiskindex.io, Simon-Pierre Boucher (2026).
Contact — methodology questions, corrections, expert-panel participation, commercial licensing & contracts: Simon-Pierre Boucher · contact@spboucher.ai