# Texas WARN Act Mass Layoff & Plant Closure Notices (`usta/texas-warn-layoff-notices`) Actor

One row per Texas WARN Act mass-layoff or plant-closure notice: employer, city, county, workforce area, employees affected, notice date, and layoff date. Read live from the state's own open-data API.

- **URL**: https://apify.com/usta/texas-warn-layoff-notices.md
- **Developed by:** [US Tech Automations](https://apify.com/usta) (community)
- **Categories:** Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$8.00 / 1,000 result rows

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

## Track Every Texas Mass-Layoff and Plant-Closure Notice

**For outplacement firms and employment attorneys:** get every Texas WARN Act mass-layoff or plant-closure notice as one row, with the employer and both key dates already parsed out.

Pick a window and get one row for every Texas WARN Act mass-layoff or
plant-closure notice the Texas Workforce Commission received in it: the
employer, the city and county, the workforce area, how many employees are
affected, the date the notice was received, and the date the layoff or
closure takes effect.

### Introduction

Texas employers covered by the federal Worker Adjustment and Retraining
Notification (WARN) Act have to notify the state, in most cases 60 days
before a mass layoff or plant closure. The Texas Workforce Commission (TWC)
collects those notices and publishes them as a structured dataset on the
State of Texas's own open-data portal. This Actor reads that dataset live on
every run — it does not scrape a webpage or open individual PDF letters.

A WARN notice is a rare, high-signal event: it names a specific employer at
a specific address who is about to release a specific number of workers, 60
days before it happens. That lead time is the point of this Actor.

### Tutorial

1. Set **Notice received on or after** and **Notice received on or before**
   to your window (both days included). Leave both blank for the last 180
   days.
2. Optionally set **Texas county** (e.g. `Dallas`) to restrict to one county.
3. Optionally set **Minimum employees affected** to skip small notices.
4. Set **Maximum rows** to your spend cap. Every row bills, so this is also
   the most a single run can cost.
5. Optionally put your own address in **Contact email** — it is sent in this
   Actor's own declared User-Agent header as a courtesy to the state's data
   portal; it is not required.
6. Click **Start**. Results land in the dataset.

### Pricing

**$0.008 per row. No start fee.**

This dataset is small: statewide, it has held about 2,300 WARN notices since
2019 — roughly 26 a month. A run over a busy month might return 20–40 rows
and cost under 30 cents; a quiet county in a quiet week can return zero rows
and cost nothing.

**Maximum rows** is the spend cap: the run cannot cost more than that number
multiplied by $0.008, whatever the window holds.

### Input and output examples

Input:

```json
{"noticedAfter": "2026-01-01", "noticedBefore": "2026-09-15", "maxItems": 10}
```

Output (one row, from a live run on 2026-09-15):

```json
{
  "employer_name": "JPMorgan Chase & Co.",
  "city": "Plano",
  "county": "Collin",
  "workforce_development_area": "North Central Texas WDA",
  "employees_affected": 244,
  "notice_received_date": "2026-06-23",
  "layoff_effective_date": "2026-08-21",
  "twc_row_id": "row-abcd.1234-efgh",
  "source_url": "https://data.texas.gov/resource/8w53-c4f6.json?$where=%3Aid%3D%27row-abcd.1234-efgh%27",
  "fetched_at": "2026-09-15T15:31:24Z"
}
```

Every field in a row:

| Field | What it holds |
|---|---|
| `employer_name` | The employer or filing entity named on the notice. TWC's own column for this is named `JOB_SITE_NAME`, described by TWC as "Location of layoffs" — in practice every value observed is a company name, not a place, so this Actor names the field for what it actually holds. |
| `city` | City where the layoffs or closure will occur, as TWC recorded it. |
| `county` | Texas county where the layoffs or closure will occur. |
| `workforce_development_area` | The Texas Workforce Development Area (WDA) covering that location. |
| `employees_affected` | Total number of employees TWC recorded as affected. `null` when TWC's own record does not state a number. |
| `notice_received_date` | The date TWC recorded as when the layoff notice was received from the employer. |
| `layoff_effective_date` | The date TWC recorded as when the layoff or closure takes effect. |
| `twc_row_id` | TWC's own internal row identifier for this record on the open-data portal. |
| `source_url` | A direct, load-bearing link back to this exact record on `data.texas.gov` — fetching it returns this one row. |
| `fetched_at` | When this run read the portal, in UTC. |

### Recommendations

Run weekly with **Notice received on or after** set to 7–10 days back, with
some overlap, so a notice that TWC enters a little late is never missed.
Set **Minimum employees affected** if you only act on larger layoffs — a
30-person layoff and a 3,000-person plant closure are very different leads.

### Limitations

**Only what TWC's own dataset states.** No employee names or employer
contact details are collected — TWC's dataset carries none, and none is
invented or joined in from anywhere else.

**Texas only, not nationwide.** This Actor reads one state's WARN dataset.
It does not cover any other state's layoffs.

**TWC's own catalog description says "current calendar year," but the data
observed live goes back further.** As read on 2026-09-15, the dataset
actually held notices from 2019-01-04 through 2026-06-23 — about a
three-month gap behind the run date. TWC refreshes this dataset on its own
schedule, not in real time; this Actor does not know about a notice before
TWC itself publishes it, and cannot shorten that lag.

**A record TWC has not entered yet is not in this dataset.** A run that finds
zero rows for a window is reporting an honest, complete answer for what TWC
has published so far — not a guarantee that no employer filed a notice in
that window.

### FAQ

**Where does the data come from?**
The Texas Workforce Commission's WARN Act notices dataset, published on the
State of Texas's own open-data portal at `data.texas.gov` (Socrata resource
`8w53-c4f6`), read live through its public API on every run.

**Does it need an API key or a login?**
No. **Contact email** is optional and is only used to identify this Actor's
requests to the state's data portal.

**What happens if the portal is down or changes shape?**
The run pushes no rows, costs nothing, and writes a status of `UNKNOWN` with
the error to `OUTPUT`. It never fills the gap with made-up rows.

**Is there support?**
Yes. Raise it through the Apify Store issues tab for this actor, or email
operations@ustechautomations.com. Replies within 2 business days.

### Refunds and support

Refunds: if a run returns zero rows for a valid input, email operations@ustechautomations.com within 7 days and we refund that run. Support: same address, replies within 2 business days.

# Actor input Schema

## `noticedAfter` (type: `string`):

First WARN-notice-received date to include, written as YYYY-MM-DD. This day is included. Leave both date fields blank for the last 180 days.

## `noticedBefore` (type: `string`):

Last WARN-notice-received date to include, written as YYYY-MM-DD. This day is included.

## `county` (type: `string`):

Restrict to one Texas county, e.g. Dallas or Harris. Matched case-insensitively against TWC's own county name. Leave empty for every county.

## `minEmployeesAffected` (type: `integer`):

Only return notices reporting at least this many affected employees. Leave empty for every notice regardless of size.

## `maxItems` (type: `integer`):

Hard cap on the number of rows this run produces, and therefore on what it can cost. Every row bills at the listed price from row one; there is no start fee.

## `contactEmail` (type: `string`):

Sent in this Actor's own declared User-Agent header as a courtesy to the Texas Workforce Commission's data portal. Your own address is used if you set one; otherwise a fallback address is sent.

## Actor input object example

```json
{
  "noticedAfter": "2026-03-19",
  "noticedBefore": "2026-09-15",
  "maxItems": 100
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `report` (type: `string`):

No description

# 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 = {
    "noticedAfter": "2026-03-19",
    "noticedBefore": "2026-09-15",
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("usta/texas-warn-layoff-notices").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 = {
    "noticedAfter": "2026-03-19",
    "noticedBefore": "2026-09-15",
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("usta/texas-warn-layoff-notices").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 '{
  "noticedAfter": "2026-03-19",
  "noticedBefore": "2026-09-15",
  "maxItems": 100
}' |
apify call usta/texas-warn-layoff-notices --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,usta/texas-warn-layoff-notices"
        }
    }
}
```

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/JgrA42cy12mfy6WYc/builds/eI3flle0jTBePXhHi/openapi.json
