BLS Public Data API

CPI, payrolls and PPI from the agency that computes them. Free, 500 calls a day.

by U.S. Bureau of Labor Statistics

Last updated

From
Free
Platforms
Web

What it is

The BLS Public Data API is the Bureau of Labor Statistics' own endpoint for the series it computes: the Consumer Price Index, the establishment and household employment surveys, producer prices, the Employment Cost Index, JOLTS, productivity and import/export price indexes. Series ID formats are documented for around twenty-five programmes, each with its own prefix — CU for CPI-U, CE for national employment, WP for PPI commodity data, JT for JOLTS.

A request is a JSON POST to api.bls.gov/publicAPI/v2/timeseries/data/ carrying a list of series IDs and a year range; a single series can also be pulled with a plain GET. Responses are JSON, with each observation carrying its year, period, value and a footnote array — which is where the preliminary flags live.

Most readers meet these series second-hand, through FRED or an aggregator. The reason to come to the source is the footnotes: this is the number as the agency published it, with the agency's own caveat attached.

Pricing

Free in both versions; registration buys headroom, not data. The step from v1 to v2 is 25 queries a day to 500, 25 series per query to 50 and 10 years of history to 20, plus calculations, annual averages and catalog metadata. Both share a ceiling of 50 requests per 10 seconds, and the Terms of Service warn that trying to circumvent it can get your access blocked. Registration takes an email address, an organisation name and a CAPTCHA, and the key must be renewed annually.

Worth knowing before you plan around the versions: the v2 path answers without a key. A keyless POST on 19 September 2026 returned the data alongside a message array saying the catalog and the calculations had been disabled for the request. The key gates the extras and the quota, not the numbers.

Data & coverage

United States only, and nothing priced. Checked on 19 September 2026, the August 2026 readings were already there: CPI-U all items (CUUR0000SA0) at 334.980, total nonfarm payrolls (CES0000000001) at 159,075 thousand and PPI final demand (WPUFD4) at 157.604 — the last two flagged preliminary. A two-to-three-week lag on the monthly headline series is the shape to plan against. Monthly is the fastest frequency in the building; much of the catalogue is quarterly or annual.

Integrations

BLS ships no client library, no spreadsheet add-in and no MCP server. The Python packages people use are third-party and both are dormant: bls on PyPI is Oliver Sherouse's, last released in June 2018, and bls-api is Tien Nguyen's, last released in September 2022. Neither is named in the BLS documentation.

Spreadsheet output is a URL, not a parameter: post the same JSON body to api.bls.gov/publicAPI/v2/timeseries/data.xlsx, or append .xlsx to a single-series GET, and the response is a real workbook with a Content-Disposition filename. An output_type field in the body does nothing — a request carrying one came back as ordinary JSON on 19 September 2026.

For bulk there is a flat-file server at download.bls.gov/pub/time.series/, one directory per survey, tab-delimited, with timestamps that track the release calendar. The BLS web hosts are unfriendly to anonymous automation — on 19 September 2026 a plain curl call to www.bls.gov was refused with 403 while the same request with a User-Agent naming a contact address was served. The API host itself does not do this.

Limitations

  • This is not market data. No instrument, no price, no volume, nothing intraday — it is the macro input to a model.
  • No point-in-time access. The request signature has no vintage parameter, so a backtest reading today's CPI is reading numbers nobody had at the time. ALFRED, on the FRED side, is where that problem is solved.
  • Revisions differ per programme and live in the footnotes. PPI is revised monthly for four months after publication; payrolls arrive preliminary, are revised twice and then benchmarked annually; unadjusted CPI is final on release while the seasonally adjusted version is restated for up to five years as the factors are re-estimated each January.
  • 25 queries a day is a development budget, and even 500 is small across a wide panel. This is a pull-on-release API, not something to poll.
  • The key expires every year, and the failure mode is an authentication error rather than a notice.
  • Public domain, with a sentence attached. BLS asks to be cited and requires you to state that it cannot vouch for data or analyses derived from the data once they have left BLS.gov.

Alternatives

FRED republishes most of these series at 120 requests a minute, with vintages through ALFRED and an Excel add-in, and is the better default unless you want the agency's own footnotes. DBnomics mirrors BLS alongside dozens of other providers under one query shape. EconDB and Trading Economics wrap the same public numbers in a commercial product.

Specs

Interfaces
API
Export
JSON, Xlsx, API
Asset classes
Markets
US
Platforms
Web
AI features
None
Pricing verified
Capabilities verified
Coverage verified

Also worth comparing

  • ECB Data Portal APIEuro reference rates, yield curves and €STR over keyless SDMX — with vintages.
  • Eurostat APIEU statistics, keyless and free — 8,877 datasets, and the codes move under you.
  • FREDThe Fed's macro database — 851,100 series, a free key and 120 requests a minute.
  • IMF DataFree, keyless SDMX access to IMF macro statistics — WEO included, forecasts and all.
  • OECD DataFree, keyless macro statistics over SDMX — and SDMX is the price of admission.
  • World Bank Open DataFree, keyless macro indicators for 217 economies — annual, lagged, and CC BY 4.0.

FAQ

Do I need an API key for the BLS Public Data API?

Not to get data. Version 1.0 answers anonymously at 25 queries a day. Registration is what buys version 2.0's limits — 500 queries a day, 50 series and 20 years per query — plus calculations, annual averages and catalog metadata. Registration takes an email address, an organisation name and a CAPTCHA; the key arrives by email and has to be renewed once a year.

What happens if I call the v2 endpoint without a key?

It answers, and it quietly takes the extras away. A keyless POST to the v2 path on 19 September 2026 returned the series fine, with a message array reading that the catalog has been disabled for this request and that calculations have been disabled for this request. Nothing fails; the response is just thinner than the one you asked for.

Is BLS data free to use commercially?

Yes. BLS states that everything it publishes is in the public domain except previously copyrighted photographs and illustrations, and that no specific permission is needed, though it asks to be cited as the source. The Terms of Service add two conditions — do not modify the content and still cite BLS as the source, and state that BLS cannot vouch for data or analyses derived after the data left BLS.gov.

Can I get the value that was published on a past date?

No. The request signature has no vintage or as-of parameter — the API returns the series as it stands now. For point-in-time macro you need ALFRED, the vintage front end on the same database as [FRED](/tools/fred), which carries most of these series.

How quickly are BLS numbers revised?

It varies by programme, and the API tells you in a footnote. Producer price indexes come back flagged preliminary with the note that all indexes are subject to monthly revisions up to four months after original publication. The not-seasonally-adjusted CPI is final when issued, because it is used in escalation agreements — but seasonally adjusted CPI is revised for up to five years as the factors are re-estimated each year.