Same BLS number, two answers: the seasonal adjustment letter in the series id

Checked 2026-09-08 · Vintages and revisions

Two BLS series ids that differ only in one letter return different numbers for the same month, because one is seasonally adjusted and one is not. The letter is the third character: CUSR vs CUUR for CPI, CES vs CEU for payrolls, LNS vs LNU for the household survey. Nothing in the API response says which you got - not a field, not a flag, not a footnote. If a figure does not match a source, check that letter before checking anything else.

What we saw

CPI for all urban consumers, US city average, July 2026: the adjusted index is 332.813 and the unadjusted index is 333.918, a gap of 1.105 index points. Source (Results.series[].data where year=2026 and period=M07, series CUSR0000SA0 and CUUR0000SA0, 2026-09-08).

CUSR0000SA0 [('2026-M07', '332.813'), ('2026-M06', '332.568'), ('2026-M05', '333.979'), ('2026-M04', '332.407')]
CUUR0000SA0 [('2026-M07', '333.918'), ('2026-M06', '333.952'), ('2026-M05', '335.123'), ('2026-M04', '333.020')]

Total nonfarm employment, June 2026: adjusted 158,892 thousand, unadjusted 159,734 thousand - 842 thousand apart. The sign of the gap flips within the year, so it is not a constant offset you can correct for. Source (Results.series[].data, series CES0000000001 and CEU0000000001, 2026-09-08).

CES0000000001 [('2026-M08', '159075'), ('2026-M07', '158913'), ('2026-M06', '158892'), ('2026-M05', '158861')]
CEU0000000001 [('2026-M08', '158880'), ('2026-M07', '158726'), ('2026-M06', '159734'), ('2026-M05', '159386')]

Unemployment rate, August 2026: 4.1 adjusted, 4.3 unadjusted. Two tenths on a headline number, from one letter. Source (Results.series[].data, series LNS14000000 and LNU04000000, 2026-09-08).

LNS14000000 [('2026-M08', '4.1'), ('2026-M07', '4.1'), ('2026-M06', '4.2'), ('2026-M05', '4.3')]
LNU04000000 [('2026-M08', '4.3'), ('2026-M07', '4.4'), ('2026-M06', '4.4'), ('2026-M05', '4.1')]

All six series came back in one response with an empty message array, so nothing in the API flags the difference or warns that the pair is not comparable. Source (status and message fields, 2026-09-08).

REQUEST_SUCCEEDED []

For payrolls the adjustment is documented as a per-series operation, which is why the adjusted total is not the sum of the adjusted parts. Source (footnote_code I, 2026-09-08).

I	Seasonally Adjusted Independently. See www.bls.gov/opub/hom/ces/calculation.htm for details.

The command

curl -sS -X POST -H 'Content-Type: application/json' -d '{"seriesid":["CUSR0000SA0","CUUR0000SA0","CES0000000001","CEU0000000001","LNS14000000","LNU04000000"],"startyear":"2026","endyear":"2026"}' 'https://api.bls.gov/publicAPI/v2/timeseries/data/'
REQUEST_SUCCEEDED []
CUSR0000SA0 [('2026-M07', '332.813'), ('2026-M06', '332.568'), ('2026-M05', '333.979'), ('2026-M04', '332.407')]
CUUR0000SA0 [('2026-M07', '333.918'), ('2026-M06', '333.952'), ('2026-M05', '335.123'), ('2026-M04', '333.020')]
CES0000000001 [('2026-M08', '159075'), ('2026-M07', '158913'), ('2026-M06', '158892'), ('2026-M05', '158861')]
CEU0000000001 [('2026-M08', '158880'), ('2026-M07', '158726'), ('2026-M06', '159734'), ('2026-M05', '159386')]
LNS14000000 [('2026-M08', '4.1'), ('2026-M07', '4.1'), ('2026-M06', '4.2'), ('2026-M05', '4.3')]
LNU04000000 [('2026-M08', '4.3'), ('2026-M07', '4.4'), ('2026-M06', '4.4'), ('2026-M05', '4.1')]

Checked 2026-09-08.

curl -sS -A 'x@y.com' 'https://download.bls.gov/pub/time.series/ce/ce.footnote'
footnote_code	footnote_text
A	Data unavailable due to the 2025 lapse in appropriations
I	Seasonally Adjusted Independently. See www.bls.gov/opub/hom/ces/calculation.htm for details.
P	preliminary

Checked 2026-09-08.

whatadjusted idunadjusted idmonthadjustedunadjusteddifference
CPI-U, US city average, all itemsCUSR0000SA0CUUR0000SA02026-07332.813333.9181.105 index points
Total nonfarm employmentCES0000000001CEU00000000012026-06158892159734842 thousand
Total nonfarm employmentCES0000000001CEU00000000012026-08159075158880-195 thousand
Unemployment rateLNS14000000LNU040000002026-084.14.30.2 percentage points

Limits

Open question

The catalog block is disabled for keyless callers, so a keyless client has no in-band way to read a series' adjustment status. Is there any keyless endpoint that returns it, or is parsing the id the only option?

Plain text