Skip to content

US BLS

Five Bureau of Labor Statistics surveys, exposed as standalone endpoints and as ?include=labor_context enrichment on SEC filings. The US BLS dataset is what makes cross-dataset queries (“what’s Apple’s headcount trend vs. their industry?”) a single API call instead of three.

SurveyFrequencyGeoWhat it measures
CES (Current Employment Statistics)MonthlyNational industryEmployment, average hourly earnings, hours worked by NAICS. Seasonally adjusted.
QCEW (Quarterly Census of Employment and Wages)QuarterlyCounty × NAICSEmployment counts and wage totals by county and industry.
OEWS (Occupational Employment and Wage Statistics)AnnualNational + metroEmployment and wages by SOC occupation code.
JOLTS (Job Openings and Labor Turnover Survey)MonthlyIndustry + state + regionJob openings, hires, quits, layoffs.
LAUS (Local Area Unemployment Statistics)MonthlyState + countyUnemployment rate, labor force participation.
  • CPI, PPI, ECI, productivity, and NCS are not yet covered. On the post-1.0.0 roadmap. If any of these are load-bearing for your use case, let us know at hello@thesma.dev — it informs prioritisation.
  • Seasonal adjustment is survey-specific. CES values are seasonally adjusted by default; QCEW is not (BLS doesn’t publish seasonally-adjusted QCEW). Check the adjustment field on each response.
  • County-level wage data has disclosure suppression. QCEW suppresses values for very small industry-in-county cells to protect employer confidentiality. Expect occasional null fields at the county × NAICS intersection for thinly populated industries.
MethodPathPurpose
GET/v1/us/bls/industriesList industries (NAICS) with BLS coverage.
GET/v1/us/bls/industries/{naics}Industry detail.
GET/v1/us/bls/industries/{naics}/employmentMonthly employment time series (CES).
GET/v1/us/bls/industries/{naics}/employment/latestMost recent month snapshot.
MethodPathPurpose
GET/v1/us/bls/counties/{fips}/employmentCounty employment by industry (QCEW).
GET/v1/us/bls/counties/{fips}/wagesCounty wage totals by industry (QCEW).
GET/v1/us/bls/counties/{fips}/unemploymentCounty unemployment rate (LAUS).
GET/v1/us/bls/counties/compareMulti-county comparison on a single metric.
MethodPathPurpose
GET/v1/us/bls/states/{fips}/unemploymentState unemployment rate and labor force (LAUS).
GET/v1/us/bls/states/compareMulti-state comparison.
GET/v1/us/bls/states/{fips}/turnoverState-level JOLTS (openings, hires, quits, layoffs).
MethodPathPurpose
GET/v1/us/bls/occupationsList SOC occupations.
GET/v1/us/bls/occupations/{soc}Occupation detail.
GET/v1/us/bls/occupations/{soc}/wagesWage distribution (mean, 10th / 25th / 50th / 75th / 90th percentiles).
MethodPathPurpose
GET/v1/us/bls/industries/{naics}/turnoverIndustry-level openings, hires, quits, layoffs.
GET/v1/us/bls/industries/{naics}/turnover/latestMost recent month snapshot.
GET/v1/us/bls/regions/{region}/turnoverRegional JOLTS (Northeast, South, Midwest, West).
GET/v1/us/bls/turnover/by-sizeJOLTS by establishment size.
MethodPathPurpose
GET/v1/us/bls/metricsAll BLS metrics across surveys with their dimensions.
GET/v1/us/bls/metrics/{metric}Metric detail — source, unit, cadence, geographic level.

The ?include=labor_context parameter on any SEC company or financials endpoint adds a labor_context object with BLS data for the company’s NAICS industry:

{
"labor_context": {
"industry": {
"naics_code": "334111",
"naics_description": "Electronic computer manufacturing",
"naics_match_level": "6-digit",
"total_employment_thousands": 57.0,
"employment_yoy_pct": -2.9,
"avg_hourly_earnings": null,
"earnings_yoy_pct": null,
"data_period": "2026-02",
"source": "CES",
"adjustment": "sa"
},
"local_market": {
"county_fips": "06085",
"industry_employment": 8226,
"industry_avg_weekly_wage": 6919,
"total_employment": 1119379,
"data_period": "2025-Q3",
"source": "LAUS+QCEW",
"match_level": "county"
},
"turnover": {
"jolts_industry_code": "320000",
"job_openings_rate": 3.7,
"hires_rate": 2.0,
"quits_rate": 1.1,
"layoffs_and_discharges_rate": 0.8,
"labour_market_tightness": 1.95,
"data_period": "2026-02",
"source": "JOLTS"
},
"compensation_benchmark": {
"soc_code": "11-1011",
"soc_title": "Chief Executives",
"market_median_annual_wage": 206420,
"market_mean_annual_wage": 262930,
"reference_year": 2024,
"source": "OEWS"
},
"summary": {
"industry_hiring_trend": "declining",
"local_unemployment_trend": "stable",
"comp_to_market_ratio": null,
"labour_market_tightness": 1.95
},
"data_freshness": {
"ces_period": "2026-02",
"qcew_period": "2025-Q3",
"jolts_period": "2026-02",
"laus_period": "2026-01",
"oews_period": "2024",
"sec_exec_comp_snapshot_date": "2026-01-08"
}
}
}

Real responses include additional fields per sub-object — see the API Reference for the complete schema. See the cross-dataset labor-context recipe for the full walk-through.

The /v1/us/sec/screener endpoint supports BLS-side filters for finding companies whose industry labor conditions meet a threshold:

  • industry_employment_yoy_min / _max
  • industry_earnings_yoy_min / _max
  • industry_openings_rate_min
  • state_unemployment_rate_max
  • county_unemployment_rate_max (uses the company’s HQ county)

Example: 5-year employment trend for pharmaceuticals (NAICS 3254)

Section titled “Example: 5-year employment trend for pharmaceuticals (NAICS 3254)”
Terminal window
curl -H "X-API-Key: $THESMA_API_KEY" \
"https://api.thesma.dev/v1/us/bls/industries/3254/employment?from_date=2020-01&to_date=2025-12" \
| jq '.data[] | {period, employment, avg_hourly_earnings}'

See the BLS industry-trend recipe for the full example with Python SDK and expected response shape.