CoolFace
Datasetpublic

APProjects/us-historical-layoffs-archive-warn-act-notices-removed-from-state-websites

Historical US layoffs archive: 6,799 WARN Act notices that state websites no longer list (2000-2025), recovered Rebuilt 2026-09-25. Five state labor agencies — Connecticut, Michigan, New York, North Carolina and Pennsylvania — retired the web pages their older WARN Act layoff notices lived on. Their current pages start years later. This dataset is every notice in our file that came from one of those retired pages and is not on the agency's live page today: 6,799 notices, 6,799… See the full description on the dataset page: https://huggingface.co/datasets/APProjects/us-historical-layoffs-archive-warn-act-notices-removed-from-state-websites.

sourceHugging Facecc-by-4.0updated 2d agoView on Hugging Face
0likes839downloads
Dataset Card

Historical US layoffs archive: 6,799 WARN Act notices that state websites no longer list (2000-2025), recovered

Rebuilt 2026-09-25. Five state labor agencies — Connecticut, Michigan, New York, North Carolina and Pennsylvania — retired the web pages their older WARN Act layoff notices lived on. Their current pages start years later. This dataset is every notice in our file that came from one of those retired pages and is not on the agency's live page today: 6,799 notices, 6,799 dated (2000-01-06 → 2025-07-23), 0 undated, 755,240 workers affected as printed by the agencies.

It is a cut of the same daily rebuild as us-warn-act-layoffs-notices-daily (61,431 notices, 48 jurisdictions). We publish it separately because it is the part of that file nobody can rebuild by scraping: the source pages are gone, and the rows here were recovered from Internet Archive captures (or, for North Carolina, from the agency's own archived yearly PDFs) and normalised into the same schema as the live rows. A fork of our scraper gets the live rows; it does not get these.

[image]

Where each state's rows came from

StateAgencyRetired page the rows were recovered fromWhat the agency's live page lists todayRows hereDated range
MIMichigan Department of Labor and Economic Opportunitymilmi.org WARN listings (HTML tables 2016-2025, yearly PDFs 2000-2015)notices from November 20242,0862000-01-06 → 2025-07-23
PAPennsylvania Department of Labor & Industrydli.pa.gov one-page-per-month WARN listings (2011-2024)notices received from November 20221,5852011-01-01 → 2022-12-01
NYNew York State Department of Laborlabor.ny.gov/app/warn ASP application, year lists + one page per notice (2001-2015)notices from 20161,4972001-06-14 → 2014-12-30
CTConnecticut Department of Laborwww.ctdol.state.ct.us annual WARN tables (2010-2025)notices from September 20258442010-01-04 → 2025-06-20
NCNorth Carolina Department of Commercecommerce.nc.gov WARN summary report archives, one PDF per year (2014-2021)notices from 20227872014-01-13 → 2021-12-29

The date range is the range of the notices we recovered, not the years the agency was required to publish. Undated rows are kept (Pennsylvania's retired pages printed only the month received; some North Carolina summary reports printed no received date) — counted, never invented.

Notices recovered, by year

yearnotices
200082
2001203
2002131
2003123
2004229
200576
2006101
2007112
2008139
2009559
2010421
2011498
2012329
2013216
2014620
2015241
2016267
2017254
2018326
2019265
20201,156
2021128
202287
202391
2024113
202532

Columns

columnmeaning
idstable row id, identical to the id in the full daily dataset
statetwo-letter state
company / company_canonicalemployer as printed / alias-merged canonical name
locationas printed by the agency (city, county or workforce region — the retired page decides)
notice_datedate the agency received or dated the notice, YYYY-MM-DD, empty when the page printed none
effective_datefirst layoff / closing date the agency printed, empty when none
yearyear of notice_date, else effective_date, else empty
employees_affectedheadcount as printed
notice_typeagency's classification as printed (layoff, closing, …), often empty
agency, retired_page, live_page_starts, recovered_viaprovenance of the row

How to use it

bash
# whole cut as CSV (6,799 rows)
curl -sL "https://huggingface.co/datasets/APProjects/us-historical-layoffs-archive-warn-act-notices-removed-from-state-websites/resolve/main/data/warn_notices_archive_only.csv" -o warn_notices_archive_only.csv
python
from datasets import load_dataset
ds = load_dataset("APProjects/us-historical-layoffs-archive-warn-act-notices-removed-from-state-websites")

Join back to the full archive on id. The same rows are also inside the free daily CSV/JSON on the site and the GitHub repo, flagged in coverage.json as archive_only_rows per state.

Caveats, plainly

  • —Recovered from archived copies of agency pages. Where a capture was missing a notice, that notice is missing here; the per-state rows count is what we hold, not what was ever filed.
  • —Coverage of the retired pages is itself uneven (see the table); New York's per-notice pages are still being recovered daily, so this file grows.
  • —No employer-level completeness claim: an employer absent here may simply have filed in a year whose page was never captured.
  • —Which states publish anything at all, and how deep each live portal goes, is its own dataset: which-us-states-publish-warn-act-layoff-notices-coverage.

<!-- warn-feed:offer:start -->

A layoff record you can audit, not just download

This dataset is one cut of a single daily rebuild: 61,431 US WARN Act layoff notices from 48 state agencies, 1988 to today, one schema, no login, no delay, CC BY 4.0. Snapshot as of 2026-09-25; the files above are rebuilt every day, so the live count is the truth.

Several projects publish a current WARN scrape and two of them carry more rows than we do. None of them publish what the records used to say:

  • —2,482 observed changes to already-published notices, logged daily since 2026-08-31. data/revisions.csv records every field that differed between two consecutive daily builds — employee counts, effective dates, notice types, company names — with the old value, the new value and the date we saw it. We publish the observation and not the cause: a change is equally explained by the agency amending the notice or by our own parser improving, and we do not guess which (see data/revisions.README.txt). A scrape that starts tomorrow cannot backfill any of it; it only exists if someone was watching.
  • —6,799 notices whose state agency page no longer lists them. Agencies take notices down. We keep them, flagged as archive-only, so a count you ran last year still reconciles.
  • —Point-in-time employer identity. The ticker crosswalk resolves a filer to the company as it existed at the time of the notice — Kmart, Sears Holdings, Symantec — not to whatever is on today's ticker file.

If you have to defend a number to an editor, a referee or a compliance reviewer, that provenance layer is the part you cannot rebuild yourself. How to cite this dataset →

Look something up right now — free, no signup, nothing to install. Check any employer or state against the last 180 days → It runs in your browser against these same files.

Building something with it? The same files are a free HTTP API — JSON and CSV, no key, no signup, access-control-allow-origin: * so fetch() works from a browser: endpoints, schema and curl examples →

Prefer a spreadsheet? One formula puts the last 90 days, the last 12 months or any single state into Google Sheets as a live range that refreshes itself — no signup, no add-on: the formulas, one per state → =IMPORTDATA("https://cdn.jsdelivr.net/gh/APVentureEngine/warn-act-notices@main/data/sheets/us-last-90-days.csv")

Backtesting, or citing a figure you published last month? Today's file has look-ahead and survivorship bias baked in: notices get amended after the fact and some rows are later deleted. The same table as it stood on any past day since 2026-08-30 — one immutable vintage per day, 25 so far, plus a first-appearance index giving the first and last day every notice id was in the file — is the point-in-time snapshot archive. Nobody can backfill it.

Need one industry only? The same filings, cut by an auditable employer-name rule (each row keeps the rule that fired): tech companies · hospitals & healthcare · retail store closings · restaurants & hotels · factory & plant closings · banks, insurance & finance · warehouses, trucking & logistics · all 20 sectors.

Or have it watch a list for you. Coming back to look is the part a CSV cannot do. WARN Watch — $49 for a year, one payment, nothing auto-renews, 14-day refund, no login: up to 500 employer names plus whole states, matched on every daily refresh, delivered to a private alert page + calendar (.ics) + RSS + an optional Slack / Discord / Teams webhook. Every alert carries that employer's whole filing history from the archive, which a keyword rule on an RSS feed cannot see. There is no built-in email — we do not claim one.

Not deciding today? Join the update list → — one email when a new dataset or tier is published; nothing promotional. A state added or a column renamed ships in the daily release instead, no address needed. The list is shared across APProjects datasets, holds an email address only, is run by Gumroad, and any message unsubscribes you. Rather give no address at all? Watch the repo's releases — GitHub notifies you on every daily republish, and a new state or changed field is in those notes the day it lands.

Reaching a human. WARN Feed is published by APProjects, an automated data publisher — that is stated plainly rather than dressed up. Corrections, coverage gaps, schema questions and refund requests all go here and are read: open an issue. Payments are handled by Gumroad as merchant of record, so an invoice can carry your company name.

Source, scrapers and methodology · the 48-state site <!-- warn-feed:offer:end -->

<!-- warn-feed:px:start --> <img src="https://cdn.jsdelivr.net/gh/APVentureEngine/warn-act-notices@main/assets/px/hf/us-historical-layoffs-archive-warn-act-notices-removed-from-state-websites.png" width="1" height="1" alt=""> <sub>Card views are counted anonymously: one 1×1 image on a public CDN, no cookies, no script, no personal data. The count is public: <a href="https://data.jsdelivr.com/v1/stats/packages/gh/APVentureEngine/warn-act-notices@main/files?period=month">jsDelivr stats</a>.</sub> <!-- warn-feed:px:end -->