Everything you need to know about WARN Firehose, the WARN Act, and our platform.
id - Unique deterministic identifiercompany_name - Company filing the noticecity - City of the affected sitecounty - County (when available)state - Two-letter state codeemployees_affected - Number of employees impactednotice_date - Date the WARN notice was filedeffective_date - Date layoffs are scheduled to beginlayoff_type - Type: Layoff, Closure, or Bothnaics_code - NAICS industry code (auto-classified)industry - Industry sector namelatitude / longitude - Geocoded coordinates for mappingsource_url - Link to original state filingscraped_at - When we last updated this recordcurl -X POST "https://warnfirehose.com/api/keys" -H "Content-Type: application/json" -d '{"email":"you@example.com"}'
Paid tiers: Sign up through the Pricing page. You'll receive your API key immediately after checkout.
X-API-Key header:
curl -H "X-API-Key: your-key-here" "https://warnfirehose.com/api/records?state=CA"
Unauthenticated requests use the free tier limits (100 requests/day, 50 records per request).
GET /api/records - Query records with filters (state, company, city, county, date range), pagination, and sortingGET /api/stats - Aggregate statistics (total records, employees, states)GET /api/states - List all states with record countsGET /api/trends - Monthly trend data (optionally by state)GET /api/top-companies - Largest layoff filersGET /api/yearly - Year-over-year statisticsGET /api/company/{name} - Company detail with fuzzy matchingGET /api/state/{code} - State-level statistics and recent recordsGET /api/export/{format} - Bulk exports (CSV, JSON, Parquet, JSON-LD)POST /api/filters - Create saved search filtersPOST /api/webhooks - Register webhook notificationsGET /api/reports/monthly - Monthly summary reports/api/records endpoint supports these query parameters:
state - Filter by state code (e.g., CA, TX, NY)company - Search company name (partial match)city - Filter by city namecounty - Filter by county namedate_from - Notice date from (YYYY-MM-DD)date_to - Notice date to (YYYY-MM-DD)sort - Sort field (notice_date, company_name, state, employees_affected)order - Sort order (asc or desc)limit - Records per page (1-10000)offset - Pagination offsetGET /api/records?state=TX&date_from=2025-01-01&sort=employees_affected&order=desc&limit=100
X-RateLimit-Remaining, X-RateLimit-Reset) are included in API responses.
POST /api/webhooks/test.
curl -H "X-API-Key: YOUR_KEY" "https://warnfirehose.com/api/export/csv?state=CA" -o ca_warn.csv
Or for a date range:
curl -H "X-API-Key: YOUR_KEY" "https://warnfirehose.com/api/export/json?state=TX&date_from=2025-01-01&date_to=2025-12-31" -o tx_2025.json
You can also download from the Data page using the export buttons (requires Starter tier or above).
limit parameter controls the number of records per request.
/api/records response includes pagination metadata:
{
"records": [...],
"total": 109707,
"limit": 50,
"offset": 0,
"tier": "pro"
}
warnfirehose.com and localhost origins, so you can make API calls from browser-based applications during development and from our dashboard. For production use from other domains, call the API server-side or contact us to whitelist your domain.
429 Too Many Requests response with headers indicating when your limit resets:
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1707300000
Retry-After: 3600
Rate limits reset at midnight UTC. Consider upgrading your plan if you consistently hit limits.
# Python
import requests
r = requests.get("https://warnfirehose.com/api/records",
headers={"X-API-Key": "YOUR_KEY"},
params={"state": "CA", "limit": 100})
data = r.json()
# JavaScript
const resp = await fetch("https://warnfirehose.com/api/records?state=CA&limit=100", {
headers: { "X-API-Key": "YOUR_KEY" }
});
const data = await resp.json();
Full interactive documentation is available at /docs.
Our team is here to help. Reach out and we'll get back to you within 1-2 business days.
Contact Us