Layoffs

US WARN Act layoff and closure notices, as state labor agencies publish them, each with the company it names when matched, via GET /v1/layoffs.

GET https://api.jobspipe.dev/v1/layoffs

Under the US WARN Act, an employer must give notice of a mass layoff or a plant closing, and each state labor agency publishes the notices it receives. This endpoint returns those notices, newest first, each with the company it names when that company is matched to the companies behind our job postings. Put a company's layoffs next to its live hiring by passing the matched company.key to the company page, whose layoffs and hiring_monthly sections show both. Requires authentication.

Notices are refreshed weekly. Not every state is covered yet. When a state amends a notice, the latest version is returned under the same id.

Pricing

One credit per notice returned. A notice already paid for this calendar month is free, and an empty page, a 400 and any error cost nothing. metadata.credits_charged and metadata.notices_already_paid say what the page cost.

Request

ParameterInDescription
statequeryUS states by two-letter postal code, comma-separated: CA or CA,TX.
companyqueryA company's key (digits, from any company or job response) or its website domain (google.com). Only notices matched to that company are returned.
notice_date_gtequeryNotices dated on or after this day (YYYY-MM-DD).
notice_date_ltequeryNotices dated on or before this day (YYYY-MM-DD).
min_employeesqueryOnly notices affecting at least this many employees. A notice without a count is left out.
kindquerylayoff, closure (the site or plant closes) or unknown (the notice does not say).
limitqueryNotices per page, 1 to 100; 25 by default.
offsetqueryNotices to skip, up to 10,000; pass the previous page's next_offset.
curl "https://api.jobspipe.dev/v1/layoffs?state=CA&min_employees=100&notice_date_gte=2026-07-01" \
  -H "Authorization: Bearer $JOBSPIPE_API_KEY"
import os, requests

r = requests.get(
    "https://api.jobspipe.dev/v1/layoffs",
    headers={"Authorization": f"Bearer {os.environ['JOBSPIPE_API_KEY']}"},
    params={"state": "CA", "min_employees": 100, "notice_date_gte": "2026-07-01"},
)
for notice in r.json()["data"]:
    print(notice["notice_date"], notice["employer"], notice["employees"], notice["company"])
const res = await fetch(
  "https://api.jobspipe.dev/v1/layoffs?company=google.com",
  { headers: { Authorization: `Bearer ${process.env.JOBSPIPE_API_KEY}` } },
);
const { data, metadata } = await res.json();

Response

{
  "data": [
    {
      "id": "1460324529164711321",
      "state": "CA",
      "employer": "Example Robotics Inc.",
      "address": "100 Market St",
      "city": "San Francisco",
      "county": "San Francisco",
      "zip": "94105",
      "notice_date": "2026-10-14",
      "effective_date": "2026-12-13",
      "employees": 142,
      "kind": "layoff",
      "company": { "key": "3837186692681720328", "name": "Example Robotics", "domain": "examplerobotics.com" }
    }
  ],
  "metadata": {
    "total_results": 1,
    "returned_results": 1,
    "next_offset": null,
    "credits_charged": 1,
    "notices_already_paid": 0
  }
}
FieldMeaning
idThe notice's id. Stays the same when the state amends the notice.
stateTwo-letter postal code of the state that published the notice.
employerThe employer as named on the notice, often its legal name.
address, city, county, zipThe site affected, as the notice gives it; null when not stated.
notice_dateThe day the notice was given or received. Notices sort on it, newest first; a notice without one sorts last.
effective_dateThe day the layoff or closure takes effect, when stated.
employeesEmployees affected, when stated.
kindlayoff, closure, or unknown when the notice does not say.
companyThe company the notice names, with its key, name and domain, when it is matched with confidence; null otherwise.
metadata.total_resultsNotices the filters match.
metadata.next_offsetThe offset of the next page; null on the last page.

How notices are matched to companies

A notice names an employer as it filed ("Example Robotics Inc."); our postings name the company as it hires. A notice is matched when the two names agree and the company's own US job postings back the match. A match we are not confident in is not shown: the notice is still returned, with company: null. A notice filed under a holding company or another legal name the company never posts under is not matched, so filtering by company can miss some of its notices. Filter by state and read employer to see them all.

On this page