Job Openings and Labor Turnover Survey - JT

Data - BLS

Info

source dataset Title .html .rData
bls jt NA NA NA

Data on employment

source dataset Title .html .rData
bls jt NA NA NA
bls la NA NA NA
bls ln NA NA NA
eurostat nama_10_a10_e Employment by A*10 industry breakdowns 2026-08-01 2026-07-31
eurostat nama_10_a64_e National accounts employment data by industry (up to NACE A*64) 2026-08-01 2026-07-31
eurostat namq_10_a10_e Employment A*10 industry breakdowns 2026-08-01 2026-07-31
eurostat une_rt_m Unemployment by sex and age – monthly data 2026-08-01 2026-07-31
oecd ALFS_EMP Employment by activities and status (ALFS) 2026-08-02 2025-05-24
oecd EPL_T Strictness of employment protection – temporary contracts 2026-08-02 2023-12-10
oecd LFS_SEXAGE_I_R LFS by sex and age - indicators 2026-08-02 2024-04-15
oecd STLABOUR Short-Term Labour Market Statistics 2026-08-02 2025-01-17

LAST_DOWNLOAD

LAST_DOWNLOAD
NA

LAST_COMPILE

LAST_COMPILE
2026-08-02

Last

date Nobs
2024-09-01 913

jt.industry

Code
jt.data.1.AllItems |>
  left_join(jt.series, by = "series_id") |>
  left_join(jt.industry, by = "industry_code") |>
  group_by(industry_code, industry_text) |>
  summarise(Nobs = n()) |>
  print_table_conditional()
industry_code industry_text Nobs
0 Total nonfarm 352951
100000 Total private 48324
110099 Mining and logging 7140
230000 Construction 7140
300000 Manufacturing 7140
320000 Durable goods manufacturing 7140
340000 Nondurable goods manufacturing 7140
400000 Trade, transportation, and utilities 7140
420000 Wholesale trade 7140
440000 Retail trade 7140
480099 Transportation, warehousing, and utilities 7140
510000 Information 7140
510099 Financial activities 7140
520000 Finance and insurance 7140
530000 Real estate and rental and leasing 7140
540099 Professional and business services 7140
600000 Education and health services 7140
610000 Educational services 7140
620000 Health care and social assistance 7140
700000 Leisure and hospitality 7140
710000 Arts, entertainment, and recreation 7140
720000 Accommodation and food services 7140
810000 Other services 7140
900000 Government 7140
910000 Federal 7140
920000 State and local 7140
923000 State and local government education 7140
929000 State and local government, excluding education 7140

jt.dataelement

Code
jt.data.1.AllItems |>
  left_join(jt.series, by = "series_id") |>
  left_join(jt.dataelement, by = "dataelement_code") |>
  group_by(dataelement_code, dataelement_text) |>
  summarise(Nobs = n()) |>
  print_table_conditional()
dataelement_code dataelement_text Nobs
HI Hires 105430
JO Job openings 105430
LD Layoffs and discharges 105430
OS Other separations 44944
QU Quits 105430
TS Total separations 105430
UO Unemployed persons per job opening ratio 14821

jt.ratelevel

Code
jt.data.1.AllItems |>
  left_join(jt.series, by = "series_id") |>
  left_join(jt.ratelevel, by = "ratelevel_code") |>
  group_by(ratelevel_code, ratelevel_text) |>
  summarise(Nobs = n()) |>
  print_table_conditional()
ratelevel_code ratelevel_text Nobs
L Level - In Thousands 286047
R Rate 300868

jt.region

Code
jt.region %>%
  {if (is_html_output()) print_table(.) else .}
region_code region_text display_level selectable sort_sequence
00 Total US 0 T 1
MW Midwest (Only available for Total Nonfarm) 1 T 4
NE Northeast (Only available for Total Nonfarm) 1 T 2
SO South (Only available for Total Nonfarm) 1 T 3
WE West (Only available for Total Nonfarm) 1 T 5

jt.seasonal

Code
jt.data.1.AllItems |>
  left_join(jt.series, by = "series_id") |>
  left_join(jt.seasonal, by = c("seasonal" = "seasonal_code")) |>
  group_by(seasonal, seasonal_text) |>
  summarise(Nobs = n()) |>
  print_table_conditional()
seasonal seasonal_text Nobs
S Seasonally Adjusted 290587
U Not Seasonally Adjusted 296328

Monthly Job Openings, Layoffs and Quits, in Thousands

All

Code
jt.data.1.AllItems |>
  filter(series_id %in% c("JTS000000000000000LDL",
                          "JTS000000000000000QUL",
                          "JTS000000000000000JOL")) |>
  left_join(jt.series, by = "series_id") |>
  left_join(jt.dataelement, by = "dataelement_code") |>
  month_to_date() |>
  ggplot() + 
  geom_line(aes(x = date, y = value, color = dataelement_text)) + 
  theme_minimal() +
  theme(legend.title = element_blank(),
        legend.position = c(0.6, 0.85)) +
  scale_x_date(breaks = as.Date(paste0(seq(1930, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  geom_rect(data = nber_recessions |>
              filter(Peak > as.Date("1996-01-01")), 
            aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf), 
            fill = 'grey', alpha = 0.5) + 
  scale_y_continuous(breaks = 1000*seq(0, 20, 1),
                     labels = dollar_format(suffix = "K", prefix = "")) +
  xlab("") + ylab("Monthly Levels ('000s)")

Monthly Hires and Separations, in Thousands

All

Code
jt.data.1.AllItems |>
  filter(series_id %in% c("JTS000000000000000HIL",
                          "JTS000000000000000TSL")) |>
  left_join(jt.series, by = "series_id") |>
  left_join(jt.dataelement, by = "dataelement_code") |>
  month_to_date() |>
  ggplot() + 
  geom_line(aes(x = date, y = value, color = dataelement_text)) + 
  theme_minimal() +
  theme(legend.title = element_blank(),
        legend.position = c(0.6, 0.85)) +
  scale_x_date(breaks = as.Date(paste0(seq(1930, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  geom_rect(data = nber_recessions |>
              filter(Peak > as.Date("1996-01-01")), 
            aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf), 
            fill = 'grey', alpha = 0.5) + 
  scale_y_continuous(breaks = 1000*seq(0, 20, 1),
                     labels = dollar_format(suffix = "K", prefix = "")) +
  xlab("") + ylab("Monthly Levels ('000s)")

Limits

Code
jt.data.1.AllItems |>
  filter(series_id %in% c("JTS000000000000000HIL",
                          "JTS000000000000000TSL")) |>
  left_join(jt.series, by = "series_id") |>
  left_join(jt.dataelement, by = "dataelement_code") |>
  month_to_date() |>
  ggplot() + 
  geom_line(aes(x = date, y = value, color = dataelement_text)) + 
  theme_minimal() +
  theme(legend.title = element_blank(),
        legend.position = c(0.6, 0.85)) +
  scale_x_date(breaks = as.Date(paste0(seq(1930, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  geom_rect(data = nber_recessions |>
              filter(Peak > as.Date("1996-01-01")), 
            aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf), 
            fill = 'grey', alpha = 0.5) + 
  scale_y_continuous(breaks = 1000*seq(0, 20, 1),
                     labels = dollar_format(suffix = "K", prefix = ""),
                     limits = c(3000, 9000)) +
  xlab("") + ylab("Monthly Levels ('000s)")

Monthly Hires, quits, Openings

All

Code
jt.data.1.AllItems |>
  filter(series_id %in% c("JTS000000000000000HIL",
                          "JTS000000000000000JOL",
                          "JTS000000000000000QUL")) |>
  left_join(jt.series, by = "series_id") |>
  left_join(jt.dataelement, by = "dataelement_code") |>
  month_to_date() |>
  ggplot() + 
  geom_line(aes(x = date, y = value, color = dataelement_text)) + 
  theme_minimal() +
  theme(legend.title = element_blank(),
        legend.position = c(0.6, 0.85)) +
  scale_x_date(breaks = as.Date(paste0(seq(1930, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  geom_rect(data = nber_recessions |>
              filter(Peak > as.Date("1996-01-01")), 
            aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf), 
            fill = 'grey', alpha = 0.5) + 
  scale_y_continuous(breaks = 1000*seq(0, 20, 1),
                     labels = dollar_format(suffix = "K", prefix = "")) +
  xlab("") + ylab("Monthly Levels ('000s) - Source: JOLTS")