US Economic Calendar: BLS Release Dates (CPI, Jobs, PPI) avatar

US Economic Calendar: BLS Release Dates (CPI, Jobs, PPI)

Pricing

from $1.40 / 1,000 scheduled release returneds

Go to Apify Store
US Economic Calendar: BLS Release Dates (CPI, Jobs, PPI)

US Economic Calendar: BLS Release Dates (CPI, Jobs, PPI)

Scheduled release dates for every U.S. Bureau of Labor Statistics news release: CPI, Employment Situation, PPI, JOLTS, ECI and more. One row per release with reference period, UTC and Eastern time, schedule page and archived release link. Filter by release, date range or next release only.

Pricing

from $1.40 / 1,000 scheduled release returneds

Rating

0.0

(0)

Developer

Samat Makatov

Samat Makatov

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

The official release schedule of the U.S. Bureau of Labor Statistics as flat rows: which news release is coming, for which reference period, on which date and at exactly which moment in UTC. CPI, the Employment Situation (jobs report), PPI, JOLTS, the Employment Cost Index and about forty more, each with the BLS short code, the Eastern wall-clock time, the converted UTC timestamp (daylight saving included), the schedule page and — for dates that have already passed — a link that opens the published release. No API key, no proxy, no browser.

This is a calendar of when, not a feed of how much: the schedule carries no actual, forecast or previous values.

Use cases

  • Trading and model automation: ask mode: "nextRelease" for cpi and empsit every morning and schedule the rerun of a model, or a trading pause, on the exact UTC minute the number lands.
  • Macro dashboards and news desks: a rolling 30-day event feed with reference periods, weekdays and hours remaining, so the calendar widget fills itself.
  • Risk controls: block the half hour around the jobs report and CPI — both come at 08:30 Eastern, which is 12:30Z in summer and 13:30Z in winter, a difference that breaks hard-coded offsets twice a year.
  • Event studies and backtests: pull past releases with dateFrom/dateTo and get the publication moment plus the archived release page, so a study lines up to the minute data hit the wire.
  • Indicator tables for apps and agents: mode: "releaseList" returns the dictionary — code, printed name, cadence, how many dates are scheduled, the next moment — ready to store as a lookup table.
  • Calendar-change monitoring: onlyNew keys on the release plus its scheduled moment, so a scheduled task emits a row exactly when BLS moves a date, and nothing on the days it does not.

Input

Nothing is required. With the defaults (and the prefilled releases) a run returns the CPI, jobs report and PPI dates of the next 90 days.

FieldTypeDefaultAllowed values / notes
modestringcalendarcalendar, nextRelease, releaseList — see Modes
releasesstring[]allBLS short codes, e.g. ["cpi","empsit"] (prefill: cpi, empsit, ppi). Empty = every release on the schedule — see Release codes
releaseNameContainsstring—Keep rows whose printed name contains this text, case-insensitive, e.g. price, productivity. ANDed with releases
dateFromstring—Earliest release date, YYYY-MM-DD, inclusive. Eastern calendar dates, the ones BLS prints
dateTostring—Latest release date, YYYY-MM-DD, inclusive
withinDaysinteger901–1095. Used only when both dates are empty: today up to N days ahead
onlyUpcomingbooleanfalseDrop releases whose moment has passed. nextRelease always does this
onlyNewbooleanfalseEmit only entries this input has not delivered before — see Monitoring with onlyNew
sortOrderstringsoonestsoonest or latest, by the scheduled moment
maxItemsinteger501–2000. A full published year is roughly 165 rows
fieldsstring[]allKeep only these output fields, in this order (releaseName is always kept)

Date rules: dateFrom/dateTo beat withinDays; giving only dateFrom reads one year from it. releases is a choice field: an unknown code is rejected by the input validation with the list of valid codes, before the run starts (so a typo like cpii never reaches the actor). To match by wording instead of codes, use the free-text releaseNameContains.

Reference

Modes

ModeOne row isDate filtersTypical use
calendarone scheduled releasedateFrom/dateTo, else withinDaysthe event feed, past or future
nextReleasethe next date of one releaseignored — always from today"when is the next CPI"
releaseListone release of the dictionaryignored — last 12 months plus everything published aheadcode → name → cadence lookup

Release codes

The codes are the ones BLS uses in its own URLs. Schedule page marks the releases that have their own schedule page (scheduleUrl); every code below links its latest edition (latestReleaseUrl) in releaseList.

CodeReleaseSchedule page
cpiConsumer Price Indexyes
empsitEmployment Situation (the jobs report)yes
ppiProducer Price Indexyes
joltsJob Openings and Labor Turnover Surveyyes
eciEmployment Cost Indexyes
realerReal Earningsyes
ximpimU.S. Import and Export Price Indexesyes
metroMetropolitan Area Employment and Unemploymentyes
lausState Employment and Unemploymentyes
prod2Productivity and Costs (preliminary and revised)yes
cewbdBusiness Employment Dynamicsyes
ececEmployer Costs for Employee Compensationyes
cewCounty Employment and Wagesyes
wkyengUsual Weekly Earnings of Wage and Salary Workersyes
jltstState Job Openings and Labor Turnoverno
cesanConsumer Expendituresno
oshEmployer-Reported Workplace Injuries and Illnessesno
cfoiCensus of Fatal Occupational Injuriesno
ecoproEmployment Projections and Occupational Outlook Handbookno
atusAmerican Time Use Surveyno
union2Union Membershipno
ocwageOccupational Employment and Wagesno
wkstpMajor Work Stoppagesno
fameeEmployment Characteristics of Familiesno
forbrnLabor Force Characteristics of Foreign-born Workersno
disablPeople with a Disability: Labor Force Characteristicsno
vetEmployment Situation of Veteransno
youthSummer Youth Labor Forceno
dispWorker Displacementno
orsOccupational Requirements in the United Statesno
leaveAccess to and Use of Leaveno
workWork Experience of the Populationno
prod3Total Factor Productivityno
prinProductivity and Costs by Industry: Manufacturing and Miningno
tenureEmployee Tenureno

The schedule also prints about a dozen smaller releases that have no code of their own (benchmark revisions, one-off studies). They are returned like everything else, with releaseCode: null; filter those with releaseNameContains. Federal holidays are printed on the same pages and are not returned — they carry no release time.

Reference periods

referencePeriod is the period the data describes, referencePeriodType groups it:

TypeExamplesReleases
monthlySeptember 2026, December 2025CPI, PPI, jobs report, JOLTS, state and metro employment
quarterlyThird Quarter 2026ECI, productivity, weekly earnings, business employment dynamics
annualAnnual 2025, 2025injuries, fatalities, union membership, expenditures
otherBiennial 2026, 2024-2025occasional studies with an unusual period

Monitoring with onlyNew

onlyNew remembers releaseCode@releaseTimeUtc in a named key-value store (bls-release-calendar-state), one record per filter set. The first run returns everything it finds; later runs return only entries that were not there before. Because the key contains the scheduled moment, a rescheduled release counts as new — which is the point: a daily task with onlyNew: true stays quiet until BLS actually moves or adds something.

Examples

When is the next CPI, jobs report, PPI and JOLTS?

{ "mode": "nextRelease", "releases": ["cpi", "empsit", "ppi", "jolts"], "sortOrder": "soonest", "maxItems": 10 }

The US inflation block of one quarter

{ "mode": "calendar", "releases": ["cpi", "ppi", "ximpim", "realer"], "dateFrom": "2026-10-01", "dateTo": "2026-12-31", "maxItems": 30 }

Every jobs report date of a year

{ "mode": "calendar", "releases": ["empsit"], "dateFrom": "2026-01-01", "dateTo": "2026-12-31", "maxItems": 20 }

Rolling feed of the next 30 days, all releases

{ "mode": "calendar", "withinDays": 30, "onlyUpcoming": true, "sortOrder": "soonest", "maxItems": 40 }

Past releases with a link to the published text (event studies)

{ "mode": "calendar", "releases": ["cpi", "empsit", "jolts"], "dateFrom": "2026-01-01", "dateTo": "2026-06-30", "sortOrder": "latest", "maxItems": 25 }

The dictionary: codes, cadence, schedule pages

{ "mode": "releaseList", "sortOrder": "soonest", "maxItems": 60 }

Only what changed since the last run (scheduled task)

{ "mode": "calendar", "withinDays": 120, "onlyNew": true, "maxItems": 100 }

Output

One row per scheduled release. A real row from a cloud run on 2026-09-19 (defaults plus the prefilled releases):

{
"releaseCode": "cpi",
"releaseName": "Consumer Price Index",
"referencePeriod": "September 2026",
"referencePeriodType": "monthly",
"releaseDate": "2026-10-14",
"releaseTimeEt": "08:30",
"releaseTimeUtc": "2026-10-14T12:30:00.000Z",
"dayOfWeek": "Wednesday",
"isUpcoming": true,
"hoursUntilRelease": 591.2,
"scheduleUrl": "https://www.bls.gov/schedule/news_release/cpi.htm",
"releaseUrl": null,
"agency": "U.S. Bureau of Labor Statistics",
"sourceFormat": "html",
"url": "https://www.bls.gov/schedule/2026/home.htm",
"fetchedAt": "2026-09-19T21:18:22.922Z"
}
FieldTypeMeaning
releaseCodestring | nullBLS short code; null for the smaller releases that have none
releaseNamestringName as the schedule prints it
referencePeriodstring | nullPeriod the data describes, e.g. September 2026
referencePeriodTypestringmonthly, quarterly, annual, other
releaseDatestringRelease date YYYY-MM-DD, Eastern calendar day
releaseTimeEtstringRelease time HH:MM Eastern, as printed (08:30 or 10:00 for almost everything)
releaseTimeUtcstringThe same moment in UTC, ISO 8601, daylight saving applied
dayOfWeekstringWeekday of the release
isUpcomingbooleanWhether the moment is still ahead of fetchedAt
hoursUntilReleasenumber | nullHours left; null once the release is out
scheduleUrlstring | nullThe release's own BLS schedule page, where it has one
releaseUrlstring | nullArchived release page; filled for past dates of releases that have an archive
agencystringAlways U.S. Bureau of Labor Statistics
sourceFormatstringhtml from the schedule page, ics from the calendar feed fallback
urlstringThe schedule page the row was read from
fetchedAtstringFetch time, ISO 8601 UTC

mode: "releaseList" writes a different row: releaseCode, releaseName, frequency (monthly, quarterly, semiannual, annual, multiple per month, irregular), scheduledCount, nextReleaseUtc, referencePeriodType, agency, scheduleUrl, latestReleaseUrl (the newest edition of that release), url, fetchedAt.

Every run also writes a SUMMARY record to the key-value store: the window actually read, the pages fetched, how many entries were parsed, how many rows were dropped by filters, whether the window had to be trimmed, and the covered years.

Dataset views: Release calendar (everything), Upcoming releases (what is still ahead, with hours remaining), Releases on the schedule (the releaseList dictionary).

Use it from code / agents

curl -X POST "https://api.apify.com/v2/acts/yadroo~bls-release-calendar/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode":"nextRelease","releases":["cpi","empsit"],"fields":["releaseName","referencePeriod","releaseTimeUtc"],"maxItems":5}'
from apify_client import ApifyClient
client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("yadroo/bls-release-calendar").call(run_input={
"mode": "calendar",
"releases": ["cpi", "empsit"],
"withinDays": 45,
"maxItems": 20,
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row["releaseTimeUtc"], row["releaseName"], row["referencePeriod"])

For an agent, mode: "nextRelease" with fields is the cheapest call there is: one row per indicator, three fields, a couple of seconds. The run finishes in about five seconds because it reads one or two static pages.

Pricing

Pay per result: $0.001 to start a run plus $0.002 per row written. Typical runs:

RunRowsCost
Next date of four indicators (nextRelease)4$0.009
Default run: CPI, jobs report, PPI for 90 days9$0.019
Rolling 30-day feed, all releases~10$0.021
The full dictionary (releaseList)~47$0.095

Compute is included in those numbers in practice: the actor runs at 256 MB without a browser and finishes in seconds.

Limits & FAQ

  • No values, ever. The schedule says when a release comes out, not what the number is. Actual, forecast and previous values are not in this source and are not returned. BLS publishes the numbers themselves elsewhere.
  • US and BLS only. Releases from other US statistical agencies (Commerce, the Census Bureau, the Federal Reserve) and from other countries are not on this schedule, so they are not in the output.
  • How far the calendar reaches. BLS publishes one year at a time; the next year appears only when BLS sets it. Earlier years stay readable in the archive, so past windows work. A window that only reaches into an unpublished year is trimmed to the last scheduled date and the run says so (trimmed: true in SUMMARY, and in the status message); a window entirely outside the published range ends with a message naming the range instead of returning an empty success.
  • Times are Eastern, converted. BLS schedules in Eastern wall-clock time. releaseTimeUtc applies the real daylight-saving rules, so the same 08:30 release is 12:30Z in October and 13:30Z in November. Both are in the row — never rebuild the UTC time with a fixed offset.
  • Dates move. BLS reschedules releases, and during a lapse in funding it can stop publishing altogether. Run with onlyNew: true on a schedule to be told when something changed.
  • releaseUrl only exists after publication. It is left null for future dates and for the few releases whose archive uses a different naming pattern; scheduleUrl is filled only for the releases that have their own schedule page (14 of the 35 codes).
  • If the schedule page changes shape, the actor falls back to the calendar feed BLS publishes for subscribing, and marks those rows sourceFormat: "ics". That feed has no reference periods, so referencePeriod is null there — a missing period is better than an invented one.
  • Rate and politeness. A run makes one to three requests to www.bls.gov (one page per covered year) and reads nothing else. There is no login, no captcha and no anti-bot wall to work around.
  • Licence and credit. BLS material is in the public domain and free to use; BLS asks to be cited as the source. Every row carries agency and the source url for that reason.

Made by Yadroo. Sibling actors: us-treasury-yields, world-bank-indicators, sec-edgar-filings, fx-rates, public-holidays.