# WARN Act Layoff Notices Monitor (US, multi-state) (`datasignalslab/warn-layoffs-monitor`) Actor

Track US WARN Act layoff and plant closure notices across 12 states in one run: company, location, employees affected, notice and layoff dates, deduplicated and filtered by date window. Pay per notice found.

- **URL**: https://apify.com/datasignalslab/warn-layoffs-monitor.md
- **Developed by:** [DataSignals Lab](https://apify.com/datasignalslab) (community)
- **Categories:** Lead generation, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.00 / 1,000 notice-founds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## WARN Act Layoff Notices Monitor (US, multi-state)

**Know which US companies are laying off staff before the news does.** Under the federal WARN Act (Worker Adjustment and Retraining Notification), employers with 100 or more employees must notify the state 60 days before a plant closure or mass layoff. Every state publishes those notices, but each one does it differently: a Tableau dashboard in New York, an xlsx report in California, a Google spreadsheet in Colorado, an ASP.NET grid in Washington, nested accordions in Pennsylvania. This Actor reads 12 of those sources in one run and returns a single, deduplicated list of notices with company, location, employees affected, notice date and layoff date, filtered to the last N days.

A real run on 23 October 2026 with a 30 day window returned notices such as eBay (229 employees, Santa Clara County, CA), The Washington Post (118, Springfield, VA), Gebbers Farms (3,445, Brewster, WA) and Tyson Foods (2,495, Hillsdale, IL), each with the date the state published it and a link to the state source.

### Who uses WARN data

- **Recruiters and staffing agencies.** A WARN notice names a company, a site and a date on which dozens to thousands of people will be looking for work. Reach them before the layoff date.
- **B2B sales teams.** Companies in reorganization buy outplacement, payroll, legal, real estate and IT services. The notice is the earliest public signal.
- **Journalists and researchers.** Layoff coverage, labor market trends and regional economic reporting, with the primary source attached to every row.
- **Investors and analysts.** Headcount reductions at public companies and their suppliers, often weeks before the earnings call mentions them.
- **Local governments and workforce boards.** Rapid response planning across state lines.

### What you get per notice

```json
{
  "state": "CA",
  "company": "eBay Inc.",
  "city": "San Jose",
  "county": "Santa Clara",
  "location": "San Jose, Santa Clara",
  "address": "2025 Hamilton Ave San Jose CA 95125",
  "employeesAffected": 229,
  "noticeDate": "2026-10-21",
  "noticeDatePrecision": "day",
  "postedDate": "2026-10-21",
  "effectiveDate": "2026-10-21",
  "noticeType": "layoff",
  "naicsOrIndustry": "44-45 Retail Trade",
  "sourceUrl": "https://edd.ca.gov/en/jobs_and_training/Layoff_Services_WARN/",
  "sourceFormat": "xlsx"
}
```

- `noticeDate` is the date on the WARN notice. `postedDate` is the day the state published it, when the state gives one. `effectiveDate` is the first layoff or closure date.
- `noticeType` is `closure`, `layoff` or `unknown` (Texas and New Jersey do not publish the type).
- `noticeDatePrecision` is `month` for New Jersey and Pennsylvania, which only publish the month of posting. Their `noticeDate` is then the first of that month.
- `employeesAffected` is null when the state leaves the cell empty.
- Notices are deduplicated on state, company, notice date and location. Amendments with a new date are kept as separate rows.

### Covered states and sources

| State | Source | Format | Note |
|---|---|---|---|
| NY | dol.ny.gov WARN dashboard (Tableau Public export) | csv | Current year, posted date included |
| CA | edd.ca.gov Latest WARN report | xlsx | Fiscal year from 1 July, processed date included |
| IL | Illinois workNet public WARN search | api | Notices reported to the state |
| WA | esd.wa.gov WARN database (fortress.wa.gov) | html | Paginated grid, link to the notice pdf per row |
| TX | data.texas.gov dataset 8w53-c4f6 (TWC) | api | Published with a delay of several months |
| PA | pa.gov Labor and Industry WARN notices | html | Month of posting only |
| NJ | nj.gov WARN Notice Archive | xlsx | Month of posting only |
| NC | commerce.nc.gov WARN summary list per year | html | Received date included |
| VA | virginiaworks.gov WARN notices export | csv | |
| MD | labor.maryland.gov WARN log per year | html | NAICS code included |
| CO | cdle.colorado.gov Real-Time WARN spreadsheet | csv | Colorado employees counted |
| WI | dwd.wisconsin.gov layoff notices spreadsheet | csv | Original notices only, updates skipped |

A state whose site is down or changed does not fail the run. It is logged and skipped, and the other states are returned. Not covered yet: Florida, Ohio, Michigan and Georgia reject or time out plain requests to their WARN pages, Minnesota sits behind a bot check and Iowa only offers a dashboard without a table export.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `states` | array of codes | all 12 | Two-letter state codes to scan. Empty means all supported states. |
| `daysBack` | integer, 1 to 90 | 7 | Return notices published in the last N days. |
| `minEmployees` | integer | 0 | Only notices affecting at least this many employees. |
| `companyFilter` | string | empty | Case-insensitive substring match on the company name. |
| `maxResults` | integer, 1 to 5000 | 500 | Upper bound on returned notices, newest first. |

### How it works

Each state has its own parser that reads the official publication directly: no third-party aggregator, no news site. The Actor normalizes dates (ISO), counts, counties and notice types, drops duplicates, keeps the notices inside your window and returns them newest first. Every row links to the state source so you can verify it.

### Use with AI agents and automation

- **Scheduled runs.** Run daily with `daysBack: 2` and you get only what the states published since yesterday.
- **No-code automation.** Wire it to Zapier or Make: new notice with 100 or more employees in your state, send a Slack message or add a CRM lead.
- **AI agents.** Call it as a tool over the Apify MCP server, so an assistant can answer "which companies announced layoffs in Illinois this month?" with sourced rows.
- **Pipelines.** JSON output, webhooks on finish, API access to the dataset.

### Pricing

**Pay per notice found: $0.002 per notice returned ($2 per 1,000).** A run that returns nothing costs nothing. On 23 October 2026 a 30 day window across all 12 states returned 204 notices, so a full first load costs about 40 cents and a daily delta run for the same states a few cents. Compare that with WARNTracker at 250 dollars per month for the same public data.

This Actor is built by [DataSignals Lab](https://datasignalslab.com), which also publishes scored signals from SEC, FDA and Congress filings.

#### More from DataSignals Lab

This Actor is one of the pay-per-result data Actors of [DataSignals Lab](https://datasignalslab.com): job listings per ATS platform and job board, app and company reviews, YouTube comments and transcripts, website contacts and tech stacks. Every Actor returns the same clean JSON style and charges only for rows that land in the dataset, so you can combine feeds without remapping fields. All Actors and prices are listed on [datasignalslab.com](https://datasignalslab.com).

### Data source and compliance

All data comes from official state government publications of WARN Act notices, which are public records. The Actor returns company and site information only. Contact persons listed in some state files are not collected or returned.

### FAQ

**Why does a notice show up weeks after its notice date?** States publish with a delay, and New York in particular posts notices months after the notice date. The window counts from the posting date so that you still see them when they appear.

**Why is Texas often empty?** The Texas Workforce Commission publishes to data.texas.gov with a delay of several months. Use a long window for Texas.

**Can I add a state?** Each state is one small parser module. Ask and we add it when the state publishes a list that a plain request can read.

**Is this employment or legal advice?** No. This is public data for research, recruiting, sales and monitoring.

*Keywords: WARN notices, WARN Act, layoff notices, plant closure notices, mass layoff data, layoff tracker, layoffs by state, WARN database, workforce reduction, recruiting leads, layoff API.*

# Actor input Schema

## `states` (type: `array`):

Which states to scan. Supported: NY, CA, IL, WA, TX, PA, NJ, NC, VA, MD, CO, WI. Leave empty to scan all supported states. Unsupported codes are skipped with a warning.

## `daysBack` (type: `integer`):

Return notices the state published in the last N days (counted from the posting date when the state publishes one, otherwise from the notice date). New Jersey and Pennsylvania only publish the month of posting, so their notices stay in the window until that month is older than N days.

## `minEmployees` (type: `integer`):

Only return notices affecting at least this many employees. 0 returns everything, including notices where the state did not publish a number.

## `companyFilter` (type: `string`):

Case-insensitive substring match on the company name, for example 'Starbucks' or 'Logistics'. Leave empty for all companies.

## `maxResults` (type: `integer`):

Upper bound on notices returned, newest first.

## Actor input object example

```json
{
  "states": [
    "NY",
    "CA",
    "IL",
    "WA",
    "TX",
    "PA",
    "NJ",
    "NC",
    "VA",
    "MD",
    "CO",
    "WI"
  ],
  "daysBack": 7,
  "minEmployees": 0,
  "maxResults": 500
}
```

# Actor output Schema

## `notices` (type: `string`):

All notices from this run as JSON, one object per row.

## `noticesCsv` (type: `string`):

The same notices as a CSV download.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "states": [
        "NY",
        "CA",
        "IL",
        "WA",
        "TX",
        "PA",
        "NJ",
        "NC",
        "VA",
        "MD",
        "CO",
        "WI"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("datasignalslab/warn-layoffs-monitor").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "states": [
        "NY",
        "CA",
        "IL",
        "WA",
        "TX",
        "PA",
        "NJ",
        "NC",
        "VA",
        "MD",
        "CO",
        "WI",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("datasignalslab/warn-layoffs-monitor").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "states": [
    "NY",
    "CA",
    "IL",
    "WA",
    "TX",
    "PA",
    "NJ",
    "NC",
    "VA",
    "MD",
    "CO",
    "WI"
  ]
}' |
apify call datasignalslab/warn-layoffs-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,datasignalslab/warn-layoffs-monitor"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/k921c4rUKiIeywAoY/builds/5KmRAJI5KwpmS9toL/openapi.json
