
# AI Risk Index
**The most methodologically rigorous, fully transparent AI job-exposure index.**
[](https://www.airiskindex.io)
[](https://www.airiskindex.io/methodology)
[](https://www.airiskindex.io/occupations)
[](https://www.airiskindex.io/ranking)
[](https://www.airiskindex.io/methodology)
[](https://www.airiskindex.io/methodology)
[](https://www.airiskindex.io/methodology)
[](https://creativecommons.org/licenses/by/4.0/)
[](apps/web)
[](packages/scoring)
[](packages/db)
[](apps/etl)
[](pnpm-workspace.yaml)
[](packages/scoring/src)
**[Ranking](https://www.airiskindex.io/ranking)** · **[Insights](https://www.airiskindex.io/insights)** · **[Methodology](https://www.airiskindex.io/methodology)** · **[API](https://www.airiskindex.io/api/v1/methodology)**
---
## 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`](packages/scoring/src/weights.ts), served live at [`/api/v1/methodology`](https://www.airiskindex.io/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`](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](docs/methodology/METHODOLOGY.md) · [changelog](docs/methodology/CHANGELOG.md).
**Rating pipeline** ([`apps/worker`](apps/worker)): Anthropic **Message Batches** (50% discount, prompt-cached rubric, schema-constrained JSON output), one request per task × model, deterministic `custom_id`s → 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](https://www.onetcenter.org/database.html) | 30.3 (May 2026) | 1,016 occupations, 18,796 task statements, importance weights | CC BY 4.0 |
| [BLS OEWS](https://www.bls.gov/oes/) | 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/`](docs/research/README.md).
## Public API
Versioned, JSON, `index_version` in every payload. Rate limit 60 req/min (600 with key).
```bash
# 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.00
```
## Monorepo
```
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 script
```
## Quick start
```bash
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 :3000
```
Full pipeline to a real index:
```bash
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 run
```
Checks (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_VERSION` 1.0.0 — first published run
## License, citation & contact
- **Scores & derived data**: [CC BY 4.0](https://creativecommons.org/licenses/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 O*NET® database (USDOL/ETA, CC BY 4.0) and BLS OEWS data. O*NET® 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](mailto:contact@spboucher.ai)