Research working file. Compiled 2026-07-15. Not for publication as written. All figures computed from BLS public API pulls, not transcribed from news coverage.
Joint declines are not rare. June 2026 is the 17th month since December 2009 in which both CPI-U (all items, SA) and PPI final demand (SA) fell month over month. That is 17 of 197 months, or one every 11.6 months. In the pre-pandemic window (Dec 2009 to Dec 2020) the base rate was even higher: one every 8.3 months.
So "both fell in the same month" is, on its own, an unremarkable event. Roughly annual.
What is genuinely without precedent in this series is the regime in which it happened:
Proposed one-line framing: Two indexes falling together is a once-a-year event. Two indexes falling together while underlying inflation runs near 3.5% has never happened before in the final-demand era.
This is an energy unwind sitting on top of hot underlying inflation — mechanically closest to the 2015 oil-collapse months, but occurring in an inflation regime that is the opposite of 2015's.
| What | Series ID | Source |
|---|---|---|
| CPI-U, all items, US city avg, SA | CUSR0000SA0 |
BLS API |
| CPI-U, all items, NSA (for y/y) | CUUR0000SA0 |
BLS API |
| CPI-U, all items less food & energy, SA | CUSR0000SA0L1E |
BLS API |
| PPI final demand, SA | WPSFD4 |
BLS API |
| PPI final demand, NSA (for y/y) | WPUFD4 |
BLS API |
| PPI final demand goods, SA | WPSFD41 |
BLS API |
| PPI final demand less foods, energy, trade ("core"), SA | WPSFD49116 |
BLS API |
API endpoint used (POST, no key required):
https://api.bls.gov/publicAPI/v1/timeseries/data/
POST body example:
{"seriesid":["CUSR0000SA0","WPSFD4"],"startyear":"2017","endyear":"2026"}
Gotcha worth recording. The GET form documented in many places (
.../data/CUSR0000SA0?startyear=2010&endyear=2020) silently ignores the year parameters and returns only the default 3 years. It does not error. Anyone reproducing this must POST. This is a live trap for reproducing our numbers.
Release pages (for citation in the article):
https://www.bls.gov/news.release/archives/cpi_07142026.htm (released 2026-07-14)https://www.bls.gov/news.release/pdf/cpi.pdfhttps://www.bls.gov/news.release/archives/ppi_07152026.htm (released 2026-07-15)https://www.bls.gov/news.release/pdf/ppi.pdfhttps://www.bls.gov/cpi/data.htmhttps://www.bls.gov/ppi/Access note: bls.gov HTML news releases return HTTP 403 to automated fetchers ("Access
Denied ... bot activity"). The API is not blocked. FRED (fred.stlouisfed.org/graph/fredgraph.csv)
was unreachable from this environment entirely (connection failed, not a 403), so FRED was not
used as a cross-check. See section 6.
CUSR0000SA0 and WPSFD4 via two POST calls each (the v1 API caps
at 10 years per call): 2007-2016 and 2017-2026.pct = (idx[t] - idx[t-1]) / idx[t-1] * 100, then rounded to 1 decimal to match BLS convention.Verification of June 2026 (computed vs published):
| Computed from index | BLS published | Match | |
|---|---|---|---|
| CPI MoM SA | -0.4224% -> -0.4 | -0.4 (JEC quotes -0.42) | yes |
| PPI MoM SA | -0.2771% -> -0.3 | -0.3 | yes |
| CPI y/y NSA | +3.53% -> +3.5 | 3.5 | yes |
| PPI y/y NSA | +5.51% -> +5.5 | 5.5 | yes |
| Core CPI MoM | -0.0 | flat | yes |
| Core CPI y/y | +2.57% -> +2.6 | 2.6 | yes |
| FD goods MoM | -1.4 | -1.4 | yes |
Raw index levels underpinning the headline: CPI 333.979 (May) -> 332.568 (Jun); PPI FD 157.001 (May) -> 156.566 (Jun).
Every published figure reproduces from the index levels. The computation is sound.
y/y columns are NSA (the basis BLS headlines). MoM columns are SA.
| # | Month | CPI MoM | PPI MoM | CPI y/y | PPI y/y | Core CPI MoM | Core PPI MoM | FD goods MoM | Context |
|---|---|---|---|---|---|---|---|---|---|
| 1 | 2010-02 | -0.1 | -0.2 | +2.1 | n/a | +0.0 | n/a | -0.6 | Post-GFC energy wobble |
| 2 | 2012-05 | -0.2 | -0.1 | +1.7 | +1.6 | +0.1 | n/a | -0.7 | Euro crisis, oil slide |
| 3 | 2012-06 | -0.1 | -0.3 | +1.7 | +1.3 | +0.2 | n/a | -0.6 | same |
| 4 | 2013-04 | -0.2 | -0.2 | +1.1 | +0.9 | +0.0 | n/a | -0.7 | Soft patch |
| 5 | 2014-11 | -0.2 | -0.2 | +1.3 | +1.3 | +0.1 | +0.0 | -0.4 | Oil collapse begins |
| 6 | 2014-12 | -0.3 | -0.3 | +0.8 | +0.9 | +0.1 | +0.1 | -1.3 | Oil collapse |
| 7 | 2015-01 | -0.6 | -0.6 | -0.1 | +0.0 | +0.1 | -0.1 | -1.8 | Oil collapse trough |
| 8 | 2015-09 | -0.2 | -0.4 | -0.0 | -1.1 | +0.2 | -0.1 | -1.1 | Second oil leg |
| 9 | 2015-12 | -0.1 | -0.1 | +0.7 | -1.1 | +0.1 | +0.1 | -0.6 | Oil |
| 10 | 2016-02 | -0.1 | -0.3 | +1.0 | +0.1 | +0.2 | +0.0 | -0.7 | Oil trough (~$26 WTI) |
| 11 | 2016-07 | -0.1 | -0.1 | +0.8 | +0.0 | +0.1 | +0.2 | -0.1 | Energy |
| 12 | 2017-05 | -0.1 | -0.1 | +1.9 | +2.3 | +0.1 | +0.1 | -0.7 | Energy |
| 13 | 2018-11 | -0.1 | -0.1 | +2.2 | +2.6 | +0.2 | +0.2 | -0.5 | Q4-18 oil selloff |
| 14 | 2019-01 | -0.1 | -0.3 | +1.6 | +1.9 | +0.3 | +0.2 | -0.9 | Oil selloff tail |
| 15 | 2020-03 | -0.5 | -0.5 | +1.5 | +0.3 | -0.1 | -0.2 | -1.8 | COVID onset |
| 16 | 2020-04 | -0.8 | -1.2 | +0.3 | -1.5 | -0.5 | -0.8 | -2.7 | COVID trough |
| 17 | 2026-06 | -0.4 | -0.3 | +3.5 | +5.5 | -0.0 | +0.1 | -1.4 | Energy unwind |
Clustering confirms the prior: 10 of the 16 pre-2026 events sit in the 2014-2016 oil collapse and its aftershocks; 2 are COVID; the rest are minor energy wobbles (2012 euro crisis, Q4-2018 oil selloff). Every single one is an energy story. There is no joint decline in this series that is not driven by energy or a demand collapse.
Only 8 of 17 survive a "both <= -0.2" filter (i.e. are not resting on a single -0.1 print that could round to zero): 2013-04, 2014-11, 2014-12, 2015-01, 2015-09, 2020-03, 2020-04, 2026-06.
The other 9 (2010-02, 2012-05, 2012-06, 2015-12, 2016-02, 2016-07, 2017-05, 2018-11, 2019-01) have at least one leg at exactly -0.1 and are inside the noise. This matters: the honest count is "17 loosely, 8 if you require the declines to be meaningful."
June 2026 is one of only 8 unambiguous joint declines, and one of only 4 where CPI fell 0.4% or more (the others: 2015-01, 2020-03, 2020-04).
Gaps between consecutive joint declines, in months, descending:
74, 27, 19, 18, 14, 10, 10, 8, 5, 3, 2, 2, 1, 1, 1, 1
The 74-month gap (Apr 2020 -> Jun 2026) is the outlier by a wide margin.
Most negative CPI MoM prints, Dec 2009 to Jun 2026:
2020-04 (-0.8), 2015-01 (-0.6), 2020-03 (-0.5), 2026-06 (-0.4), 2013-03 (-0.3), 2014-12 (-0.3)
June 2026 is the 4th largest monthly CPI decline in the series and the largest since April 2020. This corroborates the widely reported "biggest drop in six years."
June 2026's CPI swing (this month's MoM minus last month's MoM) is -0.9pp (from +0.5 to -0.4). That is the 2nd largest negative swing in the entire 197-month series, behind only July 2022 (-1.3pp, from +1.3 to -0.0 — the post-peak gasoline unwind). Notably, July 2022 was not a joint decline: CPI printed -0.0 (rounded), so it does not qualify.
CPI fell in 21 of 197 months (10.7%). PPI fell in 43 of 197 (21.8%). If the two were independent, we would expect 4.6 joint months. We observe 17 — roughly 3.7x the independent-chance rate. The two indexes co-move strongly, which is expected (shared energy input), and is worth stating explicitly so nobody reads the joint event as two independent coin flips. Do not describe a joint decline as a "1-in-N coincidence." It is not a coincidence; it is one energy shock hitting two indexes that both contain energy.
| Dimension | 2014-16 oil collapse | 2020 COVID | June 2026 |
|---|---|---|---|
| Headline CPI y/y | ~0% | +0.3 to +1.5% | +3.5% |
| Core CPI MoM | positive (+0.1 to +0.2) | negative (-0.1, -0.5) | flat (-0.0) |
| Core PPI y/y | ~0-1% | negative | +5.1% |
| Prior 3mo CPI trend | flat/disinflating | flat | +0.67%/mo accelerating |
| Fed stance | on hold / gradual | emergency easing | market pricing a Sept HIKE (63%) |
| Driver | supply-side oil glut | demand collapse | energy unwind after a spike |
The mechanism. June's decline is narrow and energy-driven: CPI energy index -5.7% (biggest since Apr 2020) while gasoline is still +26.7% y/y; PPI final demand goods -1.4% with gasoline -12%, accounting for roughly two-thirds of the goods decline. Reporting attributes the energy spike that is now unwinding to Middle East conflict. So this is a round trip in oil, not a broad disinflation — the y/y energy figure is still deeply positive.
Why it matters analytically: in 2015 the energy decline pulled headline toward an already-low core. In June 2026 the energy decline pulls headline away from a core that is still running 2.6% (CPI) and 5.1% (PPI). The gap between the headline print and the underlying trend is the widest of any joint-decline month on record. That is the piece nobody else has assembled.
The trap for other outlets: a -0.4% CPI print alongside a -0.3% PPI print reads as "inflation is beaten" (Breitbart's framing: "Inflation Crushed"). The core data says the opposite: nothing about the underlying trend changed in June. One month of cheaper gasoline did.
WPSSOP3000/WPUSOP3000), which
would have extended the concept to 1947, does not exist in the BLS API (returns "Series does
not exist") and FRED's PPIFGS was unreachable. We could not extend the history. Any claim
like "first time in decades" is UNSUPPORTED by what we have. Cap all claims at "since the final
demand series began in 2009."Searched and found none. No outlet, Fed regional bank, or research shop appears to have computed the joint CPI/PPI monthly-decline frequency. Coverage treats the two releases as separate events one day apart (CPI on 7/14, PPI on 7/15).
The closest published framings, none of which contain a count:
https://www.xtb.com/int/market-analysis/news-and-research/breaking-us-ppi-confirms-cooling-price-pressure-trend-from-cpihttps://www.moomoo.com/news/post/73017368/the-ppi-in-tandem-with-the-cpi-has-dashed-julyhttps://www.benzinga.com/markets/economic-data/26/07/60466687/producer-inflation-june-2026-report-fed-interest-rates-july-previewThe joint-decline framing appears to be genuinely unoccupied. This supports running the piece.
Correction opportunity (verified false claim in the wild). Cryptobriefing published
"United States reports first negative month-over-month CPI reading since 2000"
(https://cryptobriefing.com/us-negative-cpi-reading-since-2000/). This is flatly false. Per
CUSR0000SA0, CPI SA fell in 21 separate months since 2009 alone, including -0.8% in April 2020 and
-0.6% in January 2015. The BLS data disproves it outright. Same outlet elsewhere correctly reported
the PPI figure, so it is inconsistent with itself. Worth a footnote — it demonstrates the value of
doing the arithmetic.
Working title direction: something on "the joint decline that shouldn't have happened yet" — avoid "rare," because the honest finding is that it is not rare in the abstract.
Charts worth building:
Honest-answer check: the "this is unremarkable" outcome was live and is partly true — the raw joint-decline event is ordinary. The finding is not manufactured, but it is conditional: it is the regime, not the event, that is unprecedented. The article must be built on that distinction or it overclaims.
All raw BLS API responses and the computation script are archived alongside this file:
C:\Users\W11\Documents\Claude\Projects\MoneyAndWorld\research\cpi-ppi-data\
| File | Contents |
|---|---|
post_a.json, post_b.json |
CUSR0000SA0 + WPSFD4 SA index levels, 2007-2026 |
nsa_a.json, nsa_b.json |
CUUR0000SA0 + WPUFD4 NSA index levels (y/y basis) |
core_a.json, core_b.json |
CUSR0000SA0L1E core CPI + WPSFD41 FD goods |
pcore_a.json, pcore_b.json |
WPSFD49116 core PPI (starts 2013-08) |
computed.json |
Derived MoM series + joint-month list |
final_table.json |
The section 4 table as structured data |
compute.py |
The computation, re-runnable against the JSON |
These are the verbatim API responses as pulled on 2026-07-15, so the vintage is frozen even after
BLS revises. Re-run: python compute.py from that directory.