WARN Act Layoff Notices API – Layoffs & Closures
Pricing
from $2.10 / 1,000 warn notices
WARN Act Layoff Notices API – Layoffs & Closures
Official WARN Act layoff & closure notices from CA, NY, OR, WA: company, city, employees affected, effective dates. For outplacement, recruiting & research. Free sample (100 rows, real output): https://drive.google.com/uc?export=download&id=1iFosSJ_GujXCxDirpibrB3Bet6pt2cY8
Pricing
from $2.10 / 1,000 warn notices
Rating
0.0
(0)
Developer
Groundplane Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
WARN Act Layoff & Plant Closure Notices Scraper (Multi-State)
Collect and normalize official Worker Adjustment and Retraining Notification (WARN) Act mass layoff and plant closure notices from four state workforce agencies (California, New York, Oregon and Washington) into a single structured feed.
Free sample
Download a free sample (100 rows, real actor output, CSV): https://drive.google.com/uc?export=download&id=1iFosSJ_GujXCxDirpibrB3Bet6pt2cY8 — check the columns and data quality before you run anything.
What it does
Under the federal WARN Act (and stricter state "mini-WARN" statutes in states like California and New York), employers must file formal advance notice with state workforce agencies before conducting mass layoffs, plant closures, or relocations. However, each state publishes its WARN notices in a different format, ranging from multi-sheet Excel workbooks to HTML tables.
This Actor:
- Dynamically discovers and downloads the current fiscal-year California EDD WARN
.xlsxworkbook and parses the detailed report sheet. - Collects and normalizes the WARN lists from Washington ESD, Oregon HECC Rapid Response and the New York State DOL WARN Dashboard (its official CSV export).
- Standardizes dates (
noticeDate,effectiveDate,daysUntilEffective), affected worker counts (employeesAffected), locations (address,city,county), and event categories (CLOSURE,LAYOFF,RELOCATION,UNKNOWN). - Isolates per-state failures: if one state portal is temporarily unavailable, the Actor logs a warning, returns all notices from the remaining states, and reports the failed state in the final status message.
Who it's for
- Technical and executive recruiting agencies identifying talent pools from companies undergoing workforce reductions.
- Outplacement, career transition, and HR services firms offering rapid-response transition support to affected employers.
- Macroeconomic, equity, and credit analysts tracking corporate downsizing, facility closures, and sector-level headcount cuts.
- Commercial real estate and industrial liquidators monitoring plant and warehouse closures.
Input
states(array of strings) — Supported states:"CA","NY","OR","WA". Default: all four,["CA", "NY", "OR", "WA"]. No other states are supported.noticeDateFrom(string, YYYY-MM-DD) — EarliestnoticeDateto include. Defaults to today minus 60 days.minEmployeesAffected(integer) — MinimumemployeesAffectedcount (0= no minimum). Default:0.eventType(string enum) —"ALL"(default),"CLOSURE","LAYOFF","RELOCATION", or"UNKNOWN".companyKeyword(string) — Optional case-insensitive keyword matched againstcompanyName. Default:"".maxItems(integer) — Maximum rows to return. Default:200.
Example input JSON
{"states": ["CA", "NY", "OR", "WA"],"noticeDateFrom": "2026-08-25","minEmployeesAffected": 0,"eventType": "ALL","companyKeyword": "","maxItems": 200}
Example run options (default max charge $50)
Set a default maximum charge of $50 ("maxTotalChargeUsd": 50) in your run options:
{"maxTotalChargeUsd": 50}
Output
Results are deduplicated by recordId (<state>-<hash of company + noticeDate + site + employeesAffected + effectiveDate + eventType>) and sorted newest first by noticeDate descending. The hash covers every field that distinguishes one filing from another, so two distinct notices from the same company on the same day (for example an original and an amended filing with different headcounts) both appear; only true duplicates collapse. Fields not published by a given state (such as naicsOrIndustry outside California) are returned as null rather than invented.
| Field | Type | Description |
|---|---|---|
recordId | string | Deterministic ID (<state>-<12-char sha256 hash>). Changed in v0.3: IDs are not comparable with v0.1/v0.2 output. |
state | string | Two-letter state code (CA, NY, OR, WA). |
companyName | string | Employer name listed on the WARN filing. |
address | string | null | Street/facility address if published by the state. |
city | string | null | Facility city or region. |
county | string | null | County or parish if published by the state. |
employeesAffected | integer | null | Number of affected employees. |
noticeDate | string | WARN notice date (YYYY-MM-DD). |
effectiveDate | string | null | Layoff/closure effective start date (YYYY-MM-DD) if published. |
daysUntilEffective | integer | null | Calendar days from today until effectiveDate. |
eventType | string | Normalized category (CLOSURE, LAYOFF, RELOCATION, UNKNOWN). |
eventTypeRaw | string | null | Raw event description published by the state agency. |
naicsOrIndustry | string | null | NAICS sector / industry label (published by California EDD; null for others). |
sourceUrl | string | Direct URL to the official state WARN file or page. |
scrapedAt | string | UTC ISO-8601 timestamp when the row was collected. |
Example output row (illustrative)
This row is a made-up example that shows the real output shape. The company and values are not a real notice. Run the Actor to get live rows.
{"recordId": "CA-9f8e7d6c5b4a","state": "CA","companyName": "Example Cloud Systems, Inc.","address": "500 Innovation Way San Jose CA 95134","city": "San Jose","county": "Santa Clara County","employeesAffected": 145,"noticeDate": "2026-10-18","effectiveDate": "2026-12-18","daysUntilEffective": 55,"eventType": "LAYOFF","eventTypeRaw": "Layoff Permanent","naicsOrIndustry": "54 Professional Scientific and Technical Services","sourceUrl": "https://edd.ca.gov/siteassets/files/jobs_and_training/warn/warn_report1.xlsx","scrapedAt": "2026-10-23T19:00:00Z"}
How pricing works
Pay per result: $0.0025 per notice returned ($2.50 per 1,000), plus a tiny Apify actor-start fee. You only pay for rows returned. Set "maxTotalChargeUsd": 50 in your run options to cap spend automatically.
Data source and terms
Supported states and update schedules
- California (
CA): California Employment Development Department (EDD) WARN Report — Updated every Tuesday and Thursday via an official fiscal-year.xlsxworkbook. - Washington (
WA): Washington Employment Security Department (ESD) WARN Search — Updated continuously on business days as WARN notices are received. - Oregon (
OR): Oregon Higher Education Coordinating Commission (HECC) Rapid Response WARN — Updated continuously as notices are logged. - New York (
NY): New York State DOL WARN Dashboard. The Actor reads the dashboard's official Tableau CSV export, which covers notices posted from April 1, 2025 onward. The old dol.ny.gov/warn-notices page is a retired archive and is no longer used. Fragility note: the NY feed depends on a Tableau dashboard CSV export, not a documented API. If NYSDOL changes the dashboard, NY can fail while CA, OR and WA still return rows (the failed state is named in the run status).
Privacy & Affiliation Disclaimer
- WARN Act filings are public corporate workforce notices and contain no personal employee data.
- This Actor is an independent tool and is not affiliated with or endorsed by the California EDD, New York State DOL, Washington ESD, Oregon HECC, or the U.S. Department of Labor.
Limits and FAQ
-
Found a problem or need a field? Open an issue on the Issues tab; we respond quickly.
-
What does the run status tell me? Every run ends
Complete:orPARTIAL:and names the newest source activity date for each state, measured before your filters apply (for New York this is the newest posted date, because NY notice dates routinely lag posting by weeks). A state whose source layout changes, fails, or shows no new notices for over 14 days makes the runPARTIALwith the reason stated, instead of quietly returning less data. A run that matches nothing against healthy sources succeeds withComplete: 0 notices matched your filters, with the scanned row count stated. -
What happens if one state's website is down for maintenance? Each state runs in its own isolated adapter throttled to 1 request/second. If one state fails, the Actor logs a warning, outputs all matching rows from the other states, and notes the failed state in the final run status message.
-
Which fields are null for each state? Each state publishes different fields, and the Actor leaves anything a state doesn't publish as
nullrather than guessing. Checked on 2026-10-23:Field CA NY OR WA addressfilled filled (full site address) null null cityfilled null (city is inside address)filled (can be the employer's out-of-state HQ city) filled countyfilled filled null null employeesAffectedfilled filled filled filled effectiveDatefilled filled null filled eventTypeLAYOFF or CLOSURE LAYOFF or CLOSURE LAYOFF (OR labels most notices "Large Layoff") LAYOFF or CLOSURE naicsOrIndustryfilled null null null NY's "Date of WARN Notice" is often weeks before NYSDOL posts the notice, so recently posted NY notices can fall outside a short
noticeDateFromwindow.
Changelog
-
v0.3 fix round 2 (2026-10-28): California
cityextraction now reads the raw workbook cell. In the first v0.3 build the pipeline cleaned the address (collapsing whitespace) before extraction ran, which destroyed the double-space street/city separator the extractor primarily relies on; on the 2026-10-27 workbook that shipped 3 wrong cities and 8 avoidablenulls. After the fix, a full census of all 397 CA rows through the adapter gives 390/390 separator-based cities correct, 0 wrong, 0 avoidable nulls. The free sample above was regenerated from this build. HTTP retries now honorRetry-Afterand no longer retry non-retryable 4xx responses. Text corrections: the dataset schema'srecordIddescription now states the full hash inputs, and a TEST_NOTES note about New York's duplicated column was corrected (DictReader keeps the last duplicate; the columns agreed on every live row, so no data impact). -
v0.3 (2026-10-27): honesty and drift hardening. Per-state structure sentinels: a renamed source column or table now fails that state loudly (PARTIAL with the reason) instead of silently returning nulls or zero rows. California
cityextraction fixed (street names no longer leak intocity; unparseable cities arenullinstead of wrong).recordIdnow hashes company + noticeDate + site + employeesAffected + effectiveDate + eventType, so distinct same-day filings no longer collapse into one row (IDs differ from v0.1/v0.2). Status contract:Complete:/PARTIAL:on every run, newest source activity named per state, zero matches succeed asComplete: 0, and the Issues-tab note appears on source-caused PARTIALs only. -
v0.2 (2026-10-27): docs: free-sample section + store refresh; no code changes.
-
v0.1 (2026-10-23): Initial release supporting CA, NY, WA, and OR official WARN portals.