Principles

How data flow

DataFileHow it is updatedIf the update fails
BLS JOLTS and employment seriesdata/national.json, data/national_monthly.csvAutomatically: scripts/fetch_national.py, run by a GitHub Action every Tuesday and Friday. It re-downloads the full history each time (JOLTS revises past months) and commits only if a value changed.The script exits without writing; the site keeps the last good data. GitHub emails the repository owner about the failed run.
NCES School Pulse Paneldata/spp.jsonAutomatically: scripts/fetch_spp.py, same schedule. The survey's last staffing wave was October 2024; the step picks up new waves if NCES resumes.Same: existing file kept. This step cannot block the BLS update.
State vacancy datadata/states.jsonBy hand, once states publish (most between December and April). States publish PDFs, spreadsheets, and dashboards whose links and layouts change, and figures need checking by a person (see the Iowa correction below).Not applicable.
50-state inventorydata/state_inventory.jsonBy hand, about once a year, following the checking protocol below. The Learning Policy Institute's annual summer scan is a useful cross-check. Watch especially for Ohio and Texas, whose new laws require vacancy collections starting in 2026-27.Not applicable.

National series (BLS)

All from the U.S. Bureau of Labor Statistics. Every series is retrieved directly from the BLS Public Data API v2. (The series keys below, such as JTSJOR and PAYEMS, are the familiar FRED names, kept so the downloadable files stay stable; the values are BLS's own.) Seasonally adjusted unless noted.

Series retrieved automatically

Request: POST https://api.bls.gov/publicAPI/v2/timeseries/data/ with series IDs of the form JTS + 6-digit industry code + 000000000 + element (JOL level, JOR openings rate, HIR hires, QUR quits, LDR layoffs & discharges). The industry table uses the latest month for 21 industries; mining & logging and transportation, warehousing & utilities are not returned by the API and are omitted.

NCES School Pulse Panel

Publisher. National Center for Education Statistics (NCES), Institute of Education Sciences; data collected by the U.S. Census Bureau.

File. StaffVac.xlsx ("Staff Vacancies" workbook, linked from nces.ed.gov/surveys/spp/results.asp). Rows used: sheet SVaverage, "All public schools", variables PCTVAC1_*_oct (teaching roles), PCTVAC2_*_oct (non-teaching roles), PCTVAC1TOT_oct and PCTVAC2TOT_oct (totals), each with its standard error; sheet All Schools, variable StaffVac1_TOT_CAT1 (share of schools with one, or more than one, teaching vacancy).

Question. From the October 2024 questionnaire: for each role, principals entered "Total number of positions at my school (filled + vacant)" and "Number of vacancies", counting each part-time position as 1. NCES reports vacancies as a percent of positions.

Transformations. None to the values. October waves are mapped to school years (October 2024 → 2024-25). 95% confidence intervals in tooltips are ±1.96 × the published standard error.

Caveats. NCES calls SPP results "experimental data." Estimates are rounded to whole percents. The sample is about 4,000 public schools. The 2024-25 survey cycle ended in July 2025, after NCES staff cuts, and no further staffing wave has been announced.

State data

Each state below: who publishes the data, exactly what it counts, every data point with its basis and source note, and the documents it came from. Rendered directly from data/states.json, the same file the dashboard reads.

50-state inventory

How each state is checked

    Derived figures

    Figure on the dashboardHow it is computed
    Openings per unemployed personJOLTS openings level (JTSJOL) ÷ unemployed persons (UNEMPLOY), same month. Months missing at the source are left blank.
    Education relative to the whole marketState & local education rate ÷ all-sector rate × 100, same month and measure.
    3-month average (optional)Mean of the current and two previous months; blank if any of the three is missing.
    Employment indexEach series ÷ its February 2020 value × 100.
    2015–19 averages, peaksSimple means of monthly values January 2015 through December 2019; peaks are the maximum since December 2000.
    October benchmarks on state panelsNot-seasonally-adjusted JOLTS openings rates for October (series JTU923000000000000JOR and JTU000000000000000JOR), mapped to the school year starting that fall.
    Computed state ratesUnfilled ÷ (filled + unfilled), or unfilled ÷ total positions, from the components the agency published. Each computed point is labeled.
    Illinois rates by position categoryUnfilled ÷ (filled + unfilled) from ISBE/IWERC Table 5 (SY23–SY25) and the archived SY22 data set. "All staff" sums the four categories.
    Rough split of education openingsA model. State & local education openings (JOLTS) × the local-government share of state & local education employment (CES9093161101 ÷ [CES9093161101 + CES9092161101]) gives "K-12"; that × the teacher share of public K-12 staff FTE gives "K-12 teachers". Teacher share = 3,228,895 ÷ 6,795,470 FTE (NCES Common Core of Data, fall 2022). These two NCES constants were carried over from the original October 2026 workbook and have not been re-verified against NCES. Assumes every group has the same vacancy rate.

    Known issues and open questions

    Corrections log

    DateChange
    2026-10-1050-state inventory re-verified directly. It previously relied on the Learning Policy Institute's scan for 37 states. Each state was re-checked against its own agency's publications and every classification now carries evidence links. Changes: Rhode Island (publishes counts), Wisconsin and California (publish different measures), and Ohio, Texas, Maine, New Jersey, New York, New Hampshire and Indiana (collect vacancy data but publish no statewide figures) were previously listed as publishing nothing; Florida and Montana reclassified as job-posting counts; Alaska added as a candidate (first-day vacancy dashboard with rates); Mississippi's five-year series noted.
    2026-10-10Data retrieval: economy-wide and employment series now come directly from the BLS Public Data API instead of FRED, which does not answer requests from GitHub's servers. Values were compared month by month before the switch: identical in all 309 months of all 21 series.
    2026-10-09Iowa: latest rate corrected from 1.12% (a figure from news coverage) to 1.15% (Iowa DOE). The apparent "conflict" between two Iowa releases resolved: both describe the same 434 positions; one labels it by collection year (2025-26), the other by the year the postings cover (2024-25). Iowa's measure reclassified as a 12-month flow of postings (not a fall snapshot), with a denominator of employed teachers; points re-plotted at the school year they cover.
    2026-10-09Virginia 2022-23 relabeled as a third-party calculation, not a VDOE publication.
    2026-10-09South Carolina relabeled to include service staff; coverage range corrected to 71–83 entities. Nebraska relabeled from "teaching FTE" to teaching and specialist positions, public and nonpublic. Illinois described as a survey with 92% response, not a census.
    2026-10-09State chart changed to one panel per state, grouped by comparability; state table ordered alphabetically rather than by rate. NCES School Pulse Panel added.