WARN Layoff Notices Scraper - Layoffs & Closures, 22 US States avatar

WARN Layoff Notices Scraper - Layoffs & Closures, 22 US States

Pricing

$5.00 / 1,000 warn notices

Go to Apify Store
WARN Layoff Notices Scraper - Layoffs & Closures, 22 US States

WARN Layoff Notices Scraper - Layoffs & Closures, 22 US States

Collect official WARN Act layoff and plant-closure notices from 22 US state labor departments in one normalized dataset: company, location, employees affected, notice and layoff dates, closure or layoff, industry.

Pricing

$5.00 / 1,000 warn notices

Rating

0.0

(0)

Developer

Cobi Hilliard

Cobi Hilliard

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

WARN Notice Scraper: US layoff and plant closure notices from 22 states

Collect official WARN Act layoff and closure notices straight from 22 US state labor departments and get them back in one normalized dataset: company, city, county, employees affected, notice date, layoff date, closure or layoff, reason and industry. Every state publishes WARN data in a different format (Excel files, CSVs, Google Sheets, HTML tables, dashboards); this actor reads them all and gives you the same clean fields for each. No login and no API key.

Built for sales and account intelligence, recruiting, journalists, researchers and investors who want to know which companies are cutting jobs, where, and how many, usually 60 days before it happens.

What data you get

  • State, company name as filed, and a normalized company name (legal suffixes, "Updated" markers and DBA parts removed) for matching and CRM enrichment
  • Location: street address, city, county and ZIP where the state publishes them
  • Employees affected as a number
  • Notice date (when the employer notified the state), received date and the layoff / closure start date, all ISO 8601
  • Closure, layoff, relocation or reduced hours, plus temporary or permanent when the state says so
  • Reason, industry and NAICS code where given
  • Link to the official source and, for some states, to the notice PDF
  • companyDomain: no state publishes the employer's website, so this is null for almost every notice. It is only filled when the company name itself contains a domain (e.g. "Noble.com, LLC"). It is never guessed and no paid lookup is used. Match on companyNameNormalized instead
  • raw: the original source row, so nothing the state publishes is lost (personal contact columns are removed)

Sample result

{
"id": "093ca49209c67f23",
"state": "NY",
"companyName": "SYPartners, LLC",
"companyNameNormalized": "SYPartners",
"companyDomain": null,
"address": "395 Hudson Street 8th Floor New York, NY, 10014",
"city": "New York",
"county": "New York",
"zip": "10014",
"employeesAffected": 31,
"noticeDate": "2026-10-02",
"noticeDatePrecision": "day",
"receivedDate": "2026-10-06",
"effectiveDate": "2026-12-31",
"closureOrLayoff": "layoff",
"permanence": "permanent",
"noticeType": "Layoff Permanent",
"reason": "Economic",
"industry": null,
"naicsCode": null,
"sourceUrl": "https://dol.ny.gov/warn-dashboard",
"noticeDateIsFuture": false,
"raw": { "Business Legal Name": "SYPartners, LLC", "Date of WARN Notice": "2026-10-02", "Number of Affected Workers": "31", "...": "..." },
"scrapedAt": "2026-10-23T01:16:54.206Z"
}

All output fields

FieldDescription
idStable ID of the notice (hash of state, company, date, place and headcount)
stateTwo-letter state code
companyName / companyNameNormalizedName as filed / cleaned name for matching
companyDomainDomain only when it is literally part of the company name, so null on almost every notice. Never guessed
address, city, county, zipLocation of the affected site, where published
employeesAffectedNumber of workers affected (number)
noticeDateDate of the notice (falls back to the date the state received or posted it)
noticeDatePrecisionday, or month when the state only publishes the month (New Jersey, some Pennsylvania rows): the date is then the 1st of that month, and the notice is kept when that month overlaps your window, so its noticeDate can be earlier than noticeDateFrom
noticeDateIsFuturetrue when the state lists a notice date later than the day of the run (a typo or a post-dated filing). The row is kept exactly as published
receivedDateDate the state received or processed the notice, if different
effectiveDateFirst layoff or closure date. effectiveDateText keeps the original text when it is a range or phased schedule, and is null when the state gives one plain date
closureOrLayoffclosure, layoff, relocation, reduced hours or null when the state does not say
permanencepermanent, temporary or null
noticeTypeThe state's own type text or code
reason, industry, naicsCodeWhen the state publishes them
sourceUrl, noticeUrlOfficial source and, where available, the notice document
rawOriginal row from the source

States covered

StateOfficial sourceFormatHistory available
CaliforniaEDD WARNXLSXCurrent fiscal year (from July 1)
ColoradoCDLE WARN listGoogle Sheet (CSV)Current year
ConnecticutCT DOL document libraryJSON metadataLatest 500 notices
FloridaFloridaCommerce WARNHTML table, per yearMultiple years
GeorgiaTCSG WARN public viewJSON + HTML entry pagesSince 2023
IllinoisIllinois workNetXLSX exportFull IEBS history
IndianaDWD current WARN noticesHTML tableSince 2008
IowaIWD WARN noticesXLSX event logSince Oct 2021
MarylandMaryland Labor WARNHTML table, per yearMultiple years
MassachusettsMassHire WARN updatesCSV + XLSXCurrent and previous fiscal year
MichiganLEO WARN noticesJSON search feedLatest 2,000 notices
New JerseyNJ DOL WARNXLSX, sheet per yearMultiple years (month-level dates)
New YorkNY DOL WARN dashboardCSV (Tableau Public)Current year
North CarolinaNC Commerce WARN summaryHTML tableCurrent year
OhioODJFS current noticesCSVCurrent year
OregonHECC WARNXLSX downloadAbout ten years
PennsylvaniaPA L&I WARN noticesHTMLSince 2023
TexasTWC WARN noticesXLSX, per yearMultiple years
UtahDWS WARN noticesHTML tables, per yearMultiple years
VirginiaVirginia Works WARNCSVFull list
WashingtonESD WARNHTML table (paginated)About 900 latest notices
WisconsinDWD WARNGoogle Sheet (CSV)Full list

Coming soon: Alabama, Alaska, Arizona, Arkansas, Delaware, District of Columbia, Hawaii, Idaho, Kansas, Kentucky, Louisiana, Maine, Minnesota, Mississippi, Missouri, Montana, Nebraska, Nevada, New Hampshire, New Mexico, North Dakota, Oklahoma, Rhode Island, South Carolina, South Dakota, Tennessee, Vermont, West Virginia and Wyoming. Many of these publish only PDFs or scanned letters; they will be added as reliable sources are confirmed.

How to use

FieldWhat it does
statesStates to include. Empty = all 22 supported states
noticeDateFromOnly notices on or after this date. YYYY-MM-DD or relative: 30 days, 6 months, 1 year. Default: last 30 days. Month-precision notices (NJ, some PA) are kept when their month overlaps the window
companyNameContainsKeep only companies whose name contains this text, e.g. Amazon
minEmployeesKeep only notices affecting at least this many workers
maxItemsStop after this many notices (newest first, default 100)
proxyConfigurationDatacenter proxy by default. State sites are public; if one state fails, try without proxy

Example inputs:

{ "noticeDateFrom": "30 days", "maxItems": 500 }
{ "states": ["CA", "TX", "NY", "WA"], "noticeDateFrom": "90 days", "minEmployees": 100 }
{ "noticeDateFrom": "2026-01-01", "companyNameContains": "Starbucks", "maxItems": 50 }

Results are sorted newest first and deduplicated: when a state lists the same notice twice (for example in a weekly file and a yearly archive, or once per repeated row), you get it once. Amended notices that change the headcount or date are kept as separate rows. A per-state run report (rows parsed, rows in your window, failures) is saved in the key-value store as STATE_SUMMARY. If one state's website is down, the run continues with the others.

Pricing

$5 per 1,000 notices, charged only for notices saved to your dataset. A typical "last 30 days, all states" run returns 150 to 300 notices and costs about $0.75 to $1.50. Use maxItems to cap the cost.

Use cases

  • Sales and account intelligence: spot companies restructuring, closing sites or relocating, and time outreach for outplacement, staffing, real estate, equipment or advisory services
  • Recruiting: find pools of experienced workers in a city or industry before the layoff date
  • Journalism and research: track layoffs by state, industry or employer over time
  • Investors and analysts: an early signal of cost cutting and plant closures at public and private companies
  • Clay, n8n, Make and Zapier workflows: run daily with noticeDateFrom: "2 days" and push new notices into your CRM, a spreadsheet or Slack

FAQ

Is it legal? Yes. WARN notices are public records that states publish for anyone to read. The actor only reads those official public pages and files, without logging in, and drops personal contact details (names, phones, emails of employer contacts) from the output. You are responsible for how you use the data.

Why does the log say a state was skipped? Some state sites sometimes refuse requests from cloud servers (Ohio and Texas have done this). The actor then skips that state, finishes the rest, and lists the skipped states at the end of the log. You are only charged for notices actually saved. Run it again later to pick up the skipped state.

Why do some fields come back empty? Each state publishes different columns. Texas, for example, gives no layoff type and Massachusetts no county. The actor never invents values: empty means the state did not publish it. The original row is always in raw.

Why is a New Jersey date always the 1st of the month? New Jersey only publishes the month a notice was posted. Those rows have noticeDatePrecision: "month" and are included whenever that month overlaps your date window. For example, with noticeDateFrom 2026-09-23, a notice posted in September 2026 is included with noticeDate 2026-09-01. Filter on noticeDatePrecision if you only want exact days.

How fresh is the data? As fresh as the state's own page; most states update weekly or several times a week. Some states post notices with a delay, and occasionally a state lists a notice with a future date exactly as filed. Those rows are kept and flagged with noticeDateIsFuture: true.

Can I run it on a schedule? Yes. Use Apify Schedules for a daily or weekly run and connect the dataset to Google Sheets, Slack, a webhook, Clay or n8n through Apify integrations.

Integrations / API

1. Weekly layoff alert for your sales territory (n8n → Slack)

Get a Slack message every Monday listing companies in your states that filed WARN notices for 50+ workers.

  1. Schedule Trigger: every Monday at 08:00.
  2. Apify node: Run an Actor and get dataset items (or an HTTP Request node, see below). Actor wakachobi~warn-layoff-notices, input:
    { "states": ["CA", "WA", "OR"], "noticeDateFrom": "7 days", "maxItems": 500 }
  3. Filter: {{ $json.employeesAffected }} ≥ 50.
  4. Slack: message text {{ $json.companyNameNormalized }} ({{ $json.city }}, {{ $json.state }}): {{ $json.employeesAffected }} workers, {{ $json.closureOrLayoff }} from {{ $json.effectiveDate }}. {{ $json.sourceUrl }}

Cost: a week of notices for 3 states is usually a few dozen results, i.e. cents per run.

2. Flag target accounts that are cutting jobs (Clay)

Use this to mark accounts in a Clay table that recently filed a WARN notice, for recruiting (talent becoming available) or for sales (a churn or vendor-change signal).

  1. In a new Clay table: Import → Pull Data from Apify Actor. Pick WARN Notice Scraper with input { "states": ["NY","NJ","MA"], "noticeDateFrom": "90 days" }. Set it to refresh weekly.
  2. In your accounts table, add a Lookup column that matches your company name against the WARN table's companyNameNormalized. That field drops legal suffixes ("Inc.", "LLC") and "Updated" markers, so "Acme Holdings, Inc." matches "Acme Holdings".
  3. Bring back employeesAffected, noticeDate and effectiveDate, and filter the table to rows that matched.

3. Plain API call (any tool, script or spreadsheet)

curl -X POST "https://api.apify.com/v2/acts/wakachobi~warn-layoff-notices/run-sync-get-dataset-items?format=csv" \
-H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
-d '{ "states": ["TX"], "noticeDateFrom": "30 days", "maxItems": 1000 }' -o texas-warn.csv

Credits

Source discovery for several states was informed by the open-source biglocalnews/warn-scraper project by Big Local News at Stanford. This actor is an independent implementation.