WARN layoff notices scraper - CA, TX, NY, PA + 16 more states avatar

WARN layoff notices scraper - CA, TX, NY, PA + 16 more states

Pricing

$10.00 / 1,000 warn notice rows

Go to Apify Store
WARN layoff notices scraper - CA, TX, NY, PA + 16 more states

WARN layoff notices scraper - CA, TX, NY, PA + 16 more states

WARN layoff and closure notices from 20 US states' own published lists (CA IL NY AK AL ID MA MT NC ND NE NJ OR PA SD TN TX UT VA WA), normalised to one schema: employer, city, county, employees, notice date, effective date, notice type, source file. $10 per 1,000 rows, no run fee.

Pricing

$10.00 / 1,000 warn notice rows

Rating

0.0

(0)

Developer

RetrainMap Team

RetrainMap Team

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

13 days ago

Last modified

Categories

Share

WARN notices scraper - layoff notices from 20 US states

Returns: one row per WARN layoff/closure notice from the state lists of California, Illinois, New York, Texas, Washington, Virginia, New Jersey, Alabama, Utah, Tennessee, South Dakota, Alaska, Nebraska, Massachusetts, Montana, North Carolina, Oregon, Pennsylvania, Idaho and North Dakota — employer, city, county, employees, notice date, effective date, notice type, source file and its server date. Input: { "states": ["CA", "TX", "WA"], "max_records": 5000 } — all optional; empty {} reads CA, IL and NY. Price: $10.00 per 1,000 rows ($0.01 per notice row). No run fee. Pay per event; no subscription. A state that cannot be read costs nothing.

Worker Adjustment and Retraining Notification (WARN) layoff and closure notices from the lists that 20 states publish, normalised to one row schema: state, employer, city, county, employees, notice_date, effective_date, notice_type, source_url, file_last_modified — plus the extra columns each state publishes (address, ZIP, reason, industry, NAICS, layoff schedule, notes). One row per notice or per affected site, as the state lists it.

Nothing here decides anyone's eligibility. Whether a worker is covered by WARN, owed notice pay, or eligible for unemployment insurance or retraining aid is decided locally by the state agency, the local workforce board and, for WARN itself, the courts. The rows are the states' published lists — the agencies say they do not capture all layoff activity.

Sources, cadence and status

California, Illinois, New York (the default)

StateFile read on every runCadenceStatus
CACalifornia EDD — Detailed WARN Report sheet of https://edd.ca.gov/siteassets/files/jobs_and_training/warn/warn_report1.xlsx (page: https://edd.ca.gov/en/jobs_and_training/Layoff_Services_WARN/)The workbook says it is "updated every Tuesday and Thursday"; it covers the current reporting period (e.g. "07/01/26 to 08/31/2026"), which the row field source_period repeatsPublic record of a state agency, published for public use
ILIllinois DCEO monthly WARN workbooks linked from https://www.illinoisworknet.com/LayoffRecovery/Pages/ArchivedWARNReports.aspx (page: https://dceo.illinois.gov/workforcedevelopment/warn.html). The newest il_months_back workbooks are read (xlsx from March 2020; older months are PDFs and are not read)MonthlyPublic record of a state agency, published for public use
NYNew York State DOL WARN Dashboard data export — https://public.tableau.com/views/WorkerAdjustmentRetrainingNotificationWARN/WARN.csv (page: https://dol.ny.gov/warn-dashboard; NYS DOL: "As of 4/1/2025, WARN notices will no longer be posted to the database and can be found in the new WARN Dashboard")Continuous (dashboard); the export covers the current year's noticesPublic record of a state agency, published for public use

Seventeen more states (twelve added 2026-09-10, Pennsylvania and North Carolina 2026-09-12, Montana, Idaho and North Dakota 2026-09-13)

Each is read from the page named in source_page. Row counts are what a live read returned on the date shown in that state's row — they change as states add notices — so you can estimate a run's cost.

Changed 2026-09-13, if you hold rows from an earlier run of these states. A notice used to be dropped when its notice_id matched one already read, and notice_id hashes employer, dates, employees and city-or-address. Where a state files one notice per site, two sites of one employer in one city on one day are identical in every one of those fields — so a real notice was being deleted, silently (Idaho's 2012 Hostess Brands closure has two such rows in Boise). Repeats are now judged on everything the state published, and a genuinely different notice that collides keeps its own row under a suffixed id, stable across runs. A notice a state prints twice is still pushed, and billed, once.

StateWhat is readRows, on the date shownNotes
AKthe notice table on https://jobs.alaska.gov/RR/WARN_notices.htm66history back to 2006
ALthe WARN list table on https://workforce.alabama.gov/warn-list/1,061history back to 1998; 12 rows the page prints twice are pushed once
MAthe four newest weekly CSVs linked from the mass.gov WARN updates page18recent weeks only; the state's region goes to notes. mass.gov sometimes answers a cloud server with HTTP 403 (seen once on 2026-09-10, and the retry 4 minutes later read all 18 rows); when that happens MA is listed in RUN_SUMMARY.failed_states and costs nothing, so run it again
IDthe cumulative WARN PDF linked from https://www.labor.idaho.gov/businesses/layoff-assistance/ (the page itself carries no list)200 (2026-09-13)every notice Idaho has published since 2009, in one file the state replaces when it refreshes, so the link is read off the page and never hardcoded. Idaho publishes no county and no closure/layoff type, so both are null; it does publish a street address and ZIP for every site, which most states do not. Where a notice covers several sites the state prints one city per line in one cell ("Boise / Eagle / Nampa"): no city is set for those and the printed text goes to notes, because picking one would name a site the notice does not single out. National employers' notices print both figures ("22000 (102 in ID)") and the in-state number is the one read, because Idaho labels it itself; "80-100" and "TBD" leave employees empty with the text in notes. One notice per site, so a multi-site closure is several rows (the 2012 Hostess Brands closure is 17)
MTthe WARN workbook linked from https://wsd.dli.mt.gov/wioa/related-links/warn-notice-page (the page itself carries no list)46 (2026-09-13)every notice Montana has published since 2015, in one small sheet. The file name carries the month DLI last refreshed it (warn_notices_july_2026.xlsx), so the link is read off the page, never hardcoded. Montana publishes no city and no closure/layoff type, so both are null; it does publish the industry of every employer, which almost no other state does, and the year each notice was filed under is in source_period. Where the state's own sheet prints something that is not a date or not a number, nothing is asserted: a staged impact ("5/22/2025, 5/29/2025, 6/5/2025") keeps the first date with the printed string in effective_date_text, while a range, a season ("Sept-April") or a truncated year ("12/31/202", "11/17/225") leaves the field empty with the text in notes — 45 of the 46 notices are dated and 42 carry a number, the rest say "up to 300" or "Not noted" in notes
NCthe current year's summary-list table, reached from https://www.commerce.nc.gov/data-tools-reports/labor-market-data-tools/workforce-warn-reports56 (2026-09-12)current calendar year only — NC publishes 2014-2025 as PDF summary reports, not pages, and those are not read. A row is a location, not a notice: the state's own header reads "Number affected at this location", and one WARN number can print several rows (one 2026-03-19 notice covers six towns), so every location is kept. The state's notice number, the date it received the notice and whether the cut is permanent are in notes; source_period is the year read
NDthe cumulative WARN PDF linked from https://www.jobsnd.com/documents (the page itself carries no list)54 (2026-09-13)every notice North Dakota has published since 2015, in one file. ND publishes no county and no closure/layoff type. Half its date cells are prose, and nothing is guessed from them: a range asserts no date (the readable half of a range is usually its end), and where the state prints two dates in the "WARN Dated" column the second becomes effective_date only where ND prints a word saying so ("7/21/2025 beginning 9/26/2025") — the unlabelled pairs keep the whole cell in notes instead, so you see both dates and decide. A headcount is read only where it is a plain number: "approx. 22,00 nationwide (14 reported in ND)" and "25+" leave employees empty with the text in notes. A location that is not one town ("Multiple sites", "Statewide", "Ross & Watford City, ND") sets no city and is kept as printed; notices at out-of-state sites affecting ND residents are kept as the state lists them. www.jobsnd.com refuses an unnamed client, so this state's requests identify the Actor by name in the User-Agent as well as the From: address
NEthe notice table on https://dol.nebraska.gov/ReemploymentServices/LayoffServices/LayoffsAndDownsizingWARN47
NJthe three newest year sheets of https://www.nj.gov/labor/assets/PDFs/WARN/WARN_Notice_Archive.xlsx314NJ prints only the month a notice was posted: notice_date is null and the month is in source_period (e.g. "posted January 2026") — no day is invented
ORthe notice table on https://ccwd.hecc.oregon.gov/Layoff/WARN20the list includes employers whose address is outside Oregon, as printed
PAthe nested accordions on the pa.gov Department of Labor and Industry WARN page (no table, no data file)310 (2026-09-12)notices from 2023 on. PA files each notice under a month and never prints the day it was received: notice_date is null, the filing month is in source_period ("posted September 2026") and effective_date is the date the state prints — the same rule as NJ. An effective date printed as a range keeps the first date, with the printed string in effective_date_text. Both date styles L&I uses are read — 2023's words ("March 31, 2023") and later years' 6/30/2024 — and effective_date is filled on 303 of the 310 notices. The 7 without one are notices where the state printed no full date (days with no year, "Beginning February/March 2024"), never a date we dropped; their text is in effective_date_text. A location block that is not one address (a multi-site notice, "Various remote locations throughout the Commonwealth") sets no city and is kept verbatim in notes
SDthe notice table on https://dlr.sd.gov/workforce_services/businesses/warn_notices.aspx80history back to 2007
TNthe posting table on the tn.gov workforce reports page98county, not city
TXthe two newest yearly warn-act-listings workbooks linked from https://www.twc.texas.gov/data-reports/warn-notice388
UTthe notice table on https://jobs.utah.gov/employer/business/warnnotices.html282history back to 2009
VAthe warn_notices CSV linked from https://virginiaworks.gov/im-an-employer/retain-and-grow/warn-notices/1,123history back to 2010; the CSV's contact column is never read
WAthe WARN search grid at https://fortress.wa.gov/esd/file/WARN/Public/SearchWARN.aspx, paged newest first390notices from the last four years (about 26 result pages); source_url is the notice PDF

notice_type is Closure or Layoff only where the state prints a type (AL, OR, PA, VA, WA); otherwise it is null, and any other wording stays in notice_type_raw.

Copyright: the federal WARN Act materials are works of the United States Government and not subject to copyright (17 U.S.C. §105). The state files are public records released by state agencies for public use; the rows reproduce the facts they publish (employer, dates, counts), and facts are not copyrightable. Please cite the page named in source_page.

Politeness: the plain Python-urllib User-Agent, the operator's contact address in the standard From: header, at most one request per second (default). The default run is five requests (CA file; IL archive page + two workbooks; NY export); all 13 added states together are about 44 requests, most of them Washington's result pages. No browser impersonation: states whose servers refuse this plain identity are not offered.

Layout guard

CA, IL and NY files are checked against the exact column layout measured on 2026-09-03 (the nine CA columns, the twenty IL columns, the twelve NY columns). If one of them changes its layout, the run fails with the expected and the found header — it never guesses a mapping.

The thirteen added states are matched by their header wording (Pennsylvania by its accordion markup, which is described in src/more_states.py). A state whose source yields no notice rows is treated as a changed layout, never as "no notices": it is listed in RUN_SUMMARY.failed_states with the reason, pushes nothing and costs nothing, and the run continues with the other states. The run fails only if no row at all was pushed.

Input

FieldTypeMeaning
statesarray of CA IL NY AK AL ID MA MT NC ND NE NJ OR PA SD TN TX UT VA WADefault CA, IL, NY; read in the order given
max_recordsintegerDefault 5000. When it is reached the run stops, so states later in the list are not read
il_months_backinteger 1–12Default 2: newest monthly Illinois workbooks to read
request_interval_msintegerDefault 1000 (floor 500)
contact_emailstringSent in the From: header

Output (dataset row)

Common: state, employer, city, county, zip, address, employees, notice_date, effective_date (ISO date when the file gives a date; otherwise null with the verbatim text in effective_date_text, e.g. Illinois' "10/25/2026 or w/in 14 days after"), notice_type (Closure Permanent, Layoff Temporary, ...; the raw wording in notice_type_raw), reason, industry, source_url, source_page, source_period, file_last_modified (the server's Last-Modified header when one is sent, otherwise null), fetched_at, notice_id (stable hash of state, employer, dates, place and count — use it to de-duplicate across runs). Rows from the thirteen added states also carry notes (Alaska notes, Tennessee notice type, Washington's type of layoff, Massachusetts region).

notice_kind is initial for every CA and NY row and for the month's notices in Illinois; Illinois workbooks also carry a second table, supplemental notices (amendments to earlier notices: extra workers, changed dates), which come out as rows with notice_kind: "supplemental", notice_type: "Supplemental", the agency's wording in supplemental_info, the original filing in initial_notice_date, and employees = the additional workers affected. Both Illinois tables have their own exact header guard, and the parser reconciles the month's rows with the sheet's own "Total Layoff Events" / "Total Impacted" figures (recorded in RUN_SUMMARY). The added states do not say whether a notice is initial or supplemental, so their notice_kind is null.

Per state: CA processed_or_posted_date; IL dba, ending_layoff_date, layoff_schedule, naics, union, local_workforce_area, region, ceja_related, supplemental_info, initial_notice_date; NY processed_or_posted_date, site_index.

Contact people, phone numbers and e-mail addresses are never read from any source, even where a state prints them.

A run summary (per-state counts, notice-date range, duplicates dropped, workbook labels, failed states with the reason, request count) is stored as RUN_SUMMARY in the run's key-value store.

Pricing (pay per event)

EventPrice
warn-record — per row written$0.01

The default run (about 190 CA rows, 100–150 IL rows for two months, 190 NY rows) costs about $5. All thirteen added states together were 4,197 rows (3,887 on 2026-09-10 plus Pennsylvania 310 on 2026-09-12), about $42; pick states or set max_records to spend less. Rows stop when your run's maximum charge is reached; the run summary says so.

Operator

Steelyard Ventures LLC (RetrainMap) — info@steelyardclinical.com. The Actor writes only to its own dataset and key-value store; it stores no credentials and sends nothing else.