Layoffs data
Layoffs / WARN notices API
Layoffs by company, place, industry and date: state WARN notices, SEC Form 8-K Item 2.05 filings and news reports, merged so each layoff is listed once with all of its sources. Available through our REST API and as a tool for ChatGPT, Claude and other AI assistants through our MCP server.
What the data covers
- About 39,000 layoff events (as of October 2026), with WARN notices from 31 states and Washington, D.C.
- Each event: company, ticker when listed, country, state, county and city, industry, announced and effective dates, workers affected as the sources state them (never estimated), closure or layoff, and its sources.
- Each event is Confirmed (a WARN notice or an SEC filing exists) or Reported (news reports only, until an official source confirms it).
- Counts by state, county, industry, country, month, year or company, and the official monthly US layoffs (JOLTS) and weekly unemployment claims for context.
How often it updates
- State WARN notices: every day.
- SEC Form 8-K Item 2.05 filings: every 30 minutes.
- News reports: every 15 minutes.
- Official numbers: JOLTS every month and initial unemployment claims every week, when the government publishes them.
The same data is on the website: Layoffs.
Endpoints
GET /layoffs/eventsLayoff events, filtered by company, ticker, state, county, city, industry, country, dates, source and status.GET /layoffs/events/{event_id}One event with all of its sources: WARN notice sites, SEC filings and news links.GET /layoffs/summaryEvents and workers counted by state, county, industry, country, month, year, source, status or ticker.GET /layoffs/companiesCompanies ranked by layoff events or workers over 30, 90 or 365 days.GET /layoffs/official/joltsMonthly US layoffs and discharges (JOLTS).GET /layoffs/official/claimsWeekly initial unemployment insurance claims.
Every parameter and field is in the API Docs and in the OpenAPI file. Send your key in an apikey header (or ?apikey=).
Sample response
A real answer of this request on October 22, 2026, shortened: the first 2 of 32,809 layoffs with a WARN notice, without the filters and the "about" note.
GET https://api.dataporium.io/layoffs/events?source_type=warn&status=confirmed&limit=2{
"total": 32809,
"limit": 2,
"offset": 0,
"sort": "date",
"order": "desc",
"as_of": {
"events": 39177,
"newest_event": "2026-10-22",
"newest_sec_filing": "2026-10-20",
"newest_warn_notice": "2026-10-21",
"newest_news": "2026-10-22"
},
"rows": [
{
"event_id": 39176,
"company": "Cycling Sports Group, Inc.",
"ticker": null,
"listed_company": null,
"country": "US",
"state": "CT",
"county": null,
"city": "Wilton",
"naics": null,
"announced_date": "2026-10-21",
"effective_date": "2026-12-21",
"workers": 143,
"workforce_pct": null,
"layoff_type": "closure",
"status": "confirmed",
"source_types": [
"warn"
],
"sources": 1,
"flagged": false,
"first_seen": "2026-10-21T20:21:13.554713+00:00",
"country_name": "United States",
"state_name": "Connecticut",
"industry": null
},
{
"event_id": 39170,
"company": "DSquared Hospitality Company",
"ticker": null,
"listed_company": null,
"country": "US",
"state": "WA",
"county": null,
"city": "Bellevue",
"naics": null,
"announced_date": "2026-10-21",
"effective_date": "2026-12-20",
"workers": 83,
"workforce_pct": null,
"layoff_type": "closure",
"status": "confirmed",
"source_types": [
"warn"
],
"sources": 1,
"flagged": false,
"first_seen": "2026-10-21T20:17:04.481827+00:00",
"country_name": "United States",
"state_name": "Washington",
"industry": null
}
]
}Code examples
curl -H "apikey: YOUR_API_KEY" \
"https://api.dataporium.io/layoffs/events?source_type=warn&status=confirmed&limit=2"import requests
r = requests.get(
"https://api.dataporium.io/layoffs/events",
params={"source_type": "warn", "status": "confirmed", "limit": 2},
headers={"apikey": "YOUR_API_KEY"},
timeout=30,
)
for row in r.json()["rows"]:
print(row["announced_date"], row["company"], row["state"], row["workers"])const res = await fetch(
'https://api.dataporium.io/layoffs/events?source_type=warn&status=confirmed&limit=2',
{ headers: { apikey: 'YOUR_API_KEY' } },
);
const { rows } = await res.json();
for (const row of rows) {
console.log(row.announced_date, row.company, row.state, row.workers);
}Use it in ChatGPT or Claude (MCP)
Our MCP server gives AI assistants this data as a tool (get_economic_metrics ("layoffs")), with the same API key and the same plan limits as the REST API.
Server address
https://mcp.dataporium.io/mcpTransport: Streamable HTTP.
Your API key
Send it as Authorization: Bearer YOUR_API_KEY, as X-API-Key, or in the address as ?apikey=YOUR_API_KEY for apps that only accept a URL.
Set up in your AI app
Set up in Claude
Claude.ai, Claude Desktop and the Claude mobile apps. Custom connectors need a paid Claude plan.
- 1Open Settings, then Connectors, then Add custom connector.
- 2Name: Dataporium. Remote MCP server URL: paste the address below (it contains your API key).
- 3Click Add, then turn Dataporium on in a chat's tools menu.
https://mcp.dataporium.io/mcp?apikey=YOUR_API_KEYSet up in ChatGPT
ChatGPT Plus, Pro, Business and Enterprise accept custom MCP connectors through Developer mode.
- 1Open Settings, then Apps & Connectors, then Advanced settings, and turn on Developer mode.
- 2Create a connector. Name: Dataporium. MCP server URL: paste the address below. Authentication: none.
- 3In a new chat, choose Developer mode in the tools menu and enable Dataporium.
https://mcp.dataporium.io/mcp?apikey=YOUR_API_KEYQuestions to try
- Which companies filed WARN notices in California in the last 30 days?
- How many workers were affected by layoffs in Texas this year, by month?
- Which industries had the most layoffs in the last 90 days?
Treat an address that contains your API key like a password: do not share screenshots of it. If it leaks, create a new key in your account settings.
Claude Code, Cursor, VS Code, Gemini CLI and other apps: see the MCP setup guide.
Price and API key
- REST API access to this dataset and every other DataPorium dataset
- API access (600 calls/min)
- The MCP server for ChatGPT, Claude and other AI apps, with the same key
- Your API key is in your account settings once you subscribe