Joint CPI/PPI monthly declines: how unusual is June 2026?

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.


1. The headline finding

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:

  1. June 2026 is the first joint decline in 74 months. The previous one was April 2020. The longest prior gap in the whole series is 27 months. So this gap is nearly 3x the previous record. The entire 2021 to 2026 inflation era (63 months, Jan 2021 to May 2026) contains zero.
  2. It is the only joint decline ever recorded with headline CPI inflation above 2.2% y/y. June 2026 CPI y/y = +3.5%. The highest of the other 16 is +2.2% (Nov 2018). Most sit between 0% and 2%.
  3. It is the only one that follows an acceleration. The prior three months averaged +0.67%/mo on CPI (Mar +0.9, Apr +0.6, May +0.5). The next-hottest run-in to any joint decline is +0.30%/mo (Jul 2016). Every other joint decline came out of a flat or disinflating trend.
  4. Underlying inflation is still hot. Core PPI (final demand less foods, energy, trade) rose +0.1% on the month and is running +5.1% y/y. Core CPI was flat (-0.0%) at +2.6% y/y. In 2020, by contrast, core collapsed alongside headline.

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.


2. Data sources (exact, citable)

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):

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.


3. Method

  1. Pulled SA index levels for CUSR0000SA0 and WPSFD4 via two POST calls each (the v1 API caps at 10 years per call): 2007-2016 and 2017-2026.
  2. Computed month-over-month percent change myself from the index levels: pct = (idx[t] - idx[t-1]) / idx[t-1] * 100, then rounded to 1 decimal to match BLS convention.
  3. Flagged months where both rounded values are strictly < 0.
  4. Enforced consecutiveness: any month whose prior month is missing is excluded rather than bridged. This matters exactly once (see the Oct 2025 gap below).
  5. Cross-checked the June 2026 result against the published releases via independent news coverage, since BLS HTML is bot-blocked.

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.


4. The full table: every joint-decline month, Dec 2009 to Jun 2026

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.

Strictness filter

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).

Gap structure

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.

Ranking of the CPI decline itself

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."

The swing

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.

Independence check

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.


5. What is different about June 2026 (the actual story)

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.


6. What the data CANNOT tell us — read this before writing

  1. These are current-vintage numbers, not what printed at the time. Both agencies recompute seasonal adjustment factors annually (CPI revises ~5 years of SA data each January; PPI similarly revises ~4 years). Every historical figure in the table above is the revised, current-vintage value. Some of these months may not have printed as joint declines on the day. We have not reconstructed real-time vintages (ALFRED would be needed, and FRED/ALFRED was unreachable). So the claim must be phrased as "as the data now stands", not "markets saw N joint declines." This is the single most important caveat. Do not write "this has happened 17 times" without it.
  2. June 2026 itself will be revised. PPI May 2026 was already revised down (+0.6 from a higher initial print) in the June release. A -0.3 can become -0.2 or -0.4. The 3-month CPI run-in (+0.9/+0.6/+0.5) is also subject to next January's seasonal recalculation.
  3. A -0.1 print is not a decline in any meaningful sense. Nine of the 17 rest on a -0.1 leg. Use the 8-month strict count if the sentence implies significance. Do not present "17" as if all 17 are equivalent events.
  4. Hard series break: PPI final demand does not exist before November 2009. The FD-ID system started then. The analysis window is therefore Dec 2009 to Jun 2026 (197 months) — it is not possible to say "the first time since [1990s]" or make any pre-2009 claim about final demand. The legacy stage-of-processing "finished goods" series (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."
  5. October 2025 CPI does not exist. BLS footnote code X: "Data unavailable due to the 2025 lapse in appropriations." So Oct 2025 and Nov 2025 have no computable CPI MoM. Two months are structurally missing from the 197. PPI has October 2025; CPI does not. If either of those months would have been a joint decline, we cannot know. This slightly weakens the "74 months" claim — strictly it is "74 calendar months, of which 2 are unobservable on the CPI side." Disclose this. It also means the "first since Aug 2025" PPI claim and our CPI series are not on identical footings.
  6. Seasonal adjustment is a modeling choice, not a measurement. Joint declines are far more common in NSA data for seasonal reasons; the entire analysis is conditional on BLS's SA method.
  7. Two data points are not a regime. June 2026 is one month. The 74-month gap is a real, computed fact; "inflation has turned" is a forecast and this data cannot support it. Core at +5.1% y/y (PPI) actively argues against it.
  8. Correlation is mechanical, not causal. PPI does not "lead" CPI here. Both contain energy and both got hit by the same oil move in the same month. Do not imply a pipeline story.

7. Prior published analysis of this specific question

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:

The 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.


8. Proposed article structure (PK writes)

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.

  1. Lede — resist the obvious. Both indexes fell. The instinct is "inflation is beaten." The data does not say that.
  2. The base rate, stated against interest. 17 times in 197 months. About once a year. On its own this is not a rare event, and any outlet calling it unprecedented is wrong. Establishes credibility by giving away the deflationary angle first.
  3. The turn — the 74-month gap. Zero joint declines in the entire inflation era (Jan 2021 - May 2026, 63 months). The previous record gap was 27 months. Something did break its streak.
  4. The table. All 17 months. Let the reader see the clustering: 2014-16 oil, 2020 COVID. Every one is an energy story.
  5. What makes June 2026 unlike all 16 others. The regime table from section 5. The load-bearing fact: it is the only joint decline ever recorded above 2.2% CPI y/y, and it happened at 3.5%. And the only one following an acceleration (+0.67%/mo prior three months).
  6. The core data kills the "inflation is beaten" read. Core CPI flat, core PPI +0.1% MoM and +5.1% y/y. Gasoline still +26.7% y/y. This is a round trip in oil, not disinflation. The market still prices a September hike at 63%.
  7. Caveats, in the body, not buried. Revisions (May PPI already revised down). The -0.1 noise problem (only 8 of 17 are unambiguous). The Nov-2009 series floor. The missing October 2025 CPI from the shutdown. Running these in the body rather than a footnote is the differentiator versus the outlets that got this wrong.
  8. Close on the open question, not a prediction. Whether June was the turn depends entirely on whether core follows. It hasn't yet. Do not forecast.

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.


9. Reproduction

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.