WARN Layoffs Scraper - Multi-State Layoff & Closure Notices
Pricing
Pay per event
WARN Layoffs Scraper - Multi-State Layoff & Closure Notices
Aggregate WARN Act layoff and closure notices across multiple US states. Unified schema covering employer, location, effective date, affected workers, and layoff type. Built for recruiters, financial analysts, journalists, and labor researchers.
Pricing
Pay per event
Rating
0.0
(0)
Developer
BowTiedRaccoon
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
15 hours ago
Last modified
Categories
Share
WARN Layoffs Aggregator — Multi-State WARN Act Notice Scraper
Aggregate WARN Act layoff and closure notices across US state labor agencies into a single normalized dataset. Currently federates California EDD, New York DOL, and Maryland DLLR — three different formats (XLSX, multi-page HTML, single-page HTML) collapsed into one schema with employer, location, dates, affected worker counts, and layoff type.
WARN Layoffs Aggregator Features
- Pulls WARN notices from CA, NY, and MD in one run
- Normalizes three different source formats — XLSX from California, HTML tables from New York, a single HTML page from Maryland — into one consistent schema
- Filters by notice date range, minimum affected workers, and plant-closures-only
- Classifies each notice as
layoff,closure,furlough, orotherwhile keeping the raw source string for reference - Stable
notice_idper (state, employer, notice_date, effective_date) so dedupe across runs is trivial - Pure HTTP scraping — no browser, no proxies needed
- Pay-per-event pricing at roughly $0.001 per notice
Who Uses WARN Layoff Data?
- Recruiters and outplacement firms — surface mass layoffs early to source candidates and pitch services
- Financial analysts and short sellers — track distress signals across portfolio companies and industries
- Labor researchers and policy teams — build longitudinal datasets on plant closures by state, county, or sector
- Journalists — monitor new filings for reporting leads on closures, furloughs, and large reductions in force
- Economic development offices — track employer activity in their jurisdiction without re-implementing three different parsers
How WARN Layoffs Aggregator Works
- You pick states. Pass
["CA", "NY", "MD"]for everything supported, or a subset. Leave the field empty and it pulls all of them. - The aggregator dispatches to the right parser per state — California publishes XLSX files, New York publishes one HTML page per fiscal year, Maryland keeps everything on a single table — and pulls the raw notices.
- Each notice gets normalized into the shared schema, run through your filters (date range, minimum workers, closure-only), and saved. Output is identical regardless of which state it came from.
Input
Default — all three states, recent notices
{"states": ["CA", "NY", "MD"],"noticeDateFrom": "2024-01-01","maxItems": 100}
Filter to large layoffs only
{"states": ["CA"],"minAffectedWorkers": 250,"maxItems": 50}
Plant closures only, single state
{"states": ["NY"],"onlyClosures": true,"noticeDateFrom": "2023-01-01","maxItems": 200}
Input Parameters
| Field | Type | Default | Description |
|---|---|---|---|
| states | string[] | ["CA","NY","MD"] | Two-letter state codes. Leave empty to pull all supported states. Supported in v1.0: CA, NY, MD. |
| noticeDateFrom | string | "2024-01-01" | YYYY-MM-DD lower bound on notice date. Empty for no lower bound. |
| noticeDateTo | string | "" | YYYY-MM-DD upper bound on notice date. Empty for no upper bound. |
| minAffectedWorkers | integer | 0 | Drop notices below this worker count. 0 disables the filter. |
| onlyClosures | boolean | false | Restrict output to plant closures (excludes mass layoffs and reductions in force). |
| maxItems | integer | 100 | Maximum notices to return across all states combined. |
| proxyConfiguration | object | {useApifyProxy: false} | WARN portals don't require proxies. Leave disabled unless you see geo-block errors on a particular state. |
WARN Layoffs Aggregator Output Fields
{"notice_id": "9c8f238123cbc6fe","source_state": "CA","source_url": "https://edd.ca.gov/siteassets/files/jobs_and_training/warn/warn_report1.xlsx","employer_name": "Republic National Distributing Company","employer_address": "30825 Wiegman Road","city": "Hayward","county": "Alameda County","state": "CA","zip": "94544","notice_date": "2025-07-01","effective_date": "2025-09-02","affected_workers": 104,"layoff_type": "closure","layoff_type_raw": "Closure Permanent","closure_permanent": true,"region": "","scraped_at": "2026-04-25T23:08:41.544Z"}
| Field | Type | Description |
|---|---|---|
| notice_id | string | Stable hash of (state, employer, notice_date, effective_date). Use it as a primary key for dedupe across runs. |
| source_state | string | Two-letter state code identifying which agency the notice came from. |
| source_url | string | URL of the listing page or source document the notice was parsed from. |
| employer_name | string | Filing employer's legal or DBA name as printed on the notice. |
| employer_address | string | Street address of the layoff or closure site, when reported. |
| city | string | City of the layoff or closure site. |
| county | string | County or region, when the source provides it. |
| state | string | Two-letter state code of the layoff site. |
| zip | string | ZIP/postal code, when reported. |
| notice_date | string | Date the WARN notice was issued or posted (YYYY-MM-DD). |
| effective_date | string | Date the layoff or closure takes effect (YYYY-MM-DD). |
| affected_workers | number | Number of workers affected. |
| layoff_type | string | Normalized type: layoff, closure, furlough, or other. |
| layoff_type_raw | string | Raw type/classification string as printed by the source — useful when the normalized value loses nuance. |
| closure_permanent | boolean | True when the notice indicates a permanent closure or non-recall layoff. |
| region | string | Sub-state region (e.g. NY Hudson Valley, Long Island) when the source supplies one. |
| scraped_at | string | ISO-8601 UTC timestamp of when this record was scraped. |
FAQ
How do I scrape WARN Act notices across multiple states?
WARN Layoffs Aggregator handles this. Pass the state codes you care about (or leave them empty for all supported states) and it returns one normalized dataset. No state-specific parsing on your end.
How much does WARN Layoffs Aggregator cost to run?
WARN Layoffs Aggregator uses pay-per-event pricing: $0.10 per actor start plus $0.001 per record. A run that pulls 500 notices across CA, NY, and MD costs about $0.60.
Which states are supported?
WARN Layoffs Aggregator covers California, New York, and Maryland in v1.0. Adding a new state is a one-file change in the source registry — file an issue if you need a specific jurisdiction and we'll prioritize it.
Does WARN Layoffs Aggregator need proxies?
No. State labor agency portals are public and don't require residential proxies. The default proxy configuration is disabled. Enable it only if a particular state's portal starts geo-blocking.
Can I filter by layoff type or company size?
Yes. Set minAffectedWorkers to drop small layoffs and onlyClosures to filter to permanent plant closures only. Combine both for a clean signal on large permanent shutdowns.
How fresh is the data?
WARN Layoffs Aggregator pulls live from each agency's portal on every run. California publishes weekly, New York and Maryland update on rolling cadences. Run nightly if you want continuous coverage.
Need More Features?
Need a state we don't yet support, additional fields, or custom filters? File an issue or get in touch.
Why Use WARN Layoffs Aggregator?
- One schema, three states — California's XLSX, New York's HTML tables, and Maryland's single page collapse into one normalized output, so you don't write three parsers.
- Affordable — Roughly $0.001 per notice, which is cheaper than the time you'd spend reconciling source-specific date formats and column names.
- Stable record IDs — Every notice gets a deterministic
notice_id, so re-running the actor lets you upsert into a database without dedup logic.