WARN Act Layoff Notices API – Layoffs & Closures avatar

WARN Act Layoff Notices API – Layoffs & Closures

Pricing

from $2.10 / 1,000 warn notices

Go to Apify Store
WARN Act Layoff Notices API – Layoffs & Closures

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

Groundplane Labs

Maintained by Community

Actor 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 .xlsx workbook 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) — Earliest noticeDate to include. Defaults to today minus 60 days.
  • minEmployeesAffected (integer) — Minimum employeesAffected count (0 = no minimum). Default: 0.
  • eventType (string enum) — "ALL" (default), "CLOSURE", "LAYOFF", "RELOCATION", or "UNKNOWN".
  • companyKeyword (string) — Optional case-insensitive keyword matched against companyName. 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.

FieldTypeDescription
recordIdstringDeterministic ID (<state>-<12-char sha256 hash>). Changed in v0.3: IDs are not comparable with v0.1/v0.2 output.
statestringTwo-letter state code (CA, NY, OR, WA).
companyNamestringEmployer name listed on the WARN filing.
addressstring | nullStreet/facility address if published by the state.
citystring | nullFacility city or region.
countystring | nullCounty or parish if published by the state.
employeesAffectedinteger | nullNumber of affected employees.
noticeDatestringWARN notice date (YYYY-MM-DD).
effectiveDatestring | nullLayoff/closure effective start date (YYYY-MM-DD) if published.
daysUntilEffectiveinteger | nullCalendar days from today until effectiveDate.
eventTypestringNormalized category (CLOSURE, LAYOFF, RELOCATION, UNKNOWN).
eventTypeRawstring | nullRaw event description published by the state agency.
naicsOrIndustrystring | nullNAICS sector / industry label (published by California EDD; null for others).
sourceUrlstringDirect URL to the official state WARN file or page.
scrapedAtstringUTC 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

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: or PARTIAL: 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 run PARTIAL with the reason stated, instead of quietly returning less data. A run that matches nothing against healthy sources succeeds with Complete: 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 null rather than guessing. Checked on 2026-10-23:

    FieldCANYORWA
    addressfilledfilled (full site address)nullnull
    cityfillednull (city is inside address)filled (can be the employer's out-of-state HQ city)filled
    countyfilledfillednullnull
    employeesAffectedfilledfilledfilledfilled
    effectiveDatefilledfillednullfilled
    eventTypeLAYOFF or CLOSURELAYOFF or CLOSURELAYOFF (OR labels most notices "Large Layoff")LAYOFF or CLOSURE
    naicsOrIndustryfillednullnullnull

    NY's "Date of WARN Notice" is often weeks before NYSDOL posts the notice, so recently posted NY notices can fall outside a short noticeDateFrom window.

Changelog

  • v0.3 fix round 2 (2026-10-28): California city extraction 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 avoidable nulls. 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 honor Retry-After and no longer retry non-retryable 4xx responses. Text corrections: the dataset schema's recordId description 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 city extraction fixed (street names no longer leak into city; unparseable cities are null instead of wrong). recordId now 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 as Complete: 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.