67AI Lab
Rebuilt daily · public data only

The Bubble Index

How expensive and crowded is the US equity market — and is anything in credit or the economy actually testing it? Two questions, scored separately, because only one of them has a deadline.

Loading the latest reading
Fragility versus trigger map The market's current position on two axes, compared with the 2000, 2007 and 2021 peaks.

Horizontal: how stretched valuations, leverage and positioning are. Vertical: how much credit and macro stress is actually firing. Past episodes ended in the top-right. The three peak markers are this same index recomputed as it would have read on those days, using only data published by then.

Today's read

Fetching the latest reading.

Loading scores…

Each indicator is scored 0–100 by where its current value sits in its own history, oriented so that 100 always means "closest to past bubble extremes", then averaged into the weights shown in the method note below.

Loading indicators…

Why two indices

Fragility asks whether the market is priced and positioned like past bubble peaks. Trigger asks whether the things that have historically ended those episodes — widening credit spreads, tightening financial conditions, a rolling-over labour market — are happening now.

The distinction matters because high fragility alone has persisted for years at a time: 1996 to 2000, and again from 2019 to 2021. Averaging the two into a single number would hide exactly the information that makes the pair useful, so the headline index is shown last, not first.

Scoring

Green0–33
Amber34–66
Red67–100

Each indicator is converted to a percentile of its own history, ranked only against data published up to that date — so no later information leaks backwards and past readings stay stable between runs. The exception is a series already expressed as a 0–100 severity scale, where the value is its own score; those rows are marked level rather than percentile.

Indicator scores average into their group; groups combine into their index on the weights shown beside each heading. A group with nothing computable drops out and the remaining weights renormalise — which is why the pending models block lowers confidence rather than silently scoring zero.

Reading the range bars

Each bar spans the 2nd to 98th percentile of that indicator's recorded history. The filled dot is today, the pale tick is the historical median, and the numbered ticks are where the indicator stood at the March 2000, October 2007 and December 2021 peaks — where its history reaches that far back.

Two FRED series are redistributed under licence with only three years of history. Those rows are marked short history, and their percentiles should be read as rank-within-three-years, not rank-within-a-cycle.

What is missing

Seven indicators are listed as pending rather than filled with a lookalike: Shiller CAPE and forward P/E are published as spreadsheets or under licence, AAII and ISM cannot be redistributed, and the three formal bubble-detection models need a statistics stack this stdlib-only job does not carry. They are shown so the layout is honest about what is not yet measured.

Every run is kept. The live file is overwritten each morning, so a dated snapshot is written to /data/bubble-index/<date>.json and the manifest collects one flat row per day for long-run analysis.

Limits

Valuation predicts the size of an eventual drawdown far better than its timing. Read red as "the downside is large if something breaks" — never as a date.