How to scrape business intelligence data from Layoffs.fyi using the Minexa API
- Minexa.ai

- Jun 16
- 2 min read
Layoffs.fyi tracks startup workforce reductions with structured detail that most news sources skip: exact headcount, departments affected, geographic location, and links to crowdsourced employee directories. For developers building workforce intelligence pipelines, competitive research tools, or talent market dashboards, this is a high-value data source with no official API.
This guide shows how to extract that data at scale using the Minexa API. You train a scraper once using the Minexa Chrome extension, then call the API programmatically to pull structured records across as many pages as needed.
Step 1: Open the target page and launch the extension
Navigate to layoffs.fyi/category/layoff-list/ in Chrome. Open the Minexa extension and confirm you are on the correct page.
Click I'm on the right page to proceed. The extension will detect the pagination structure automatically.
Step 2: Confirm pagination and choose scraping mode
The extension surfaces the detected pagination logic. Review it and click Continue. You will then choose between scraping the list only or the list plus linked detail pages.
For this pipeline, the list view already contains all the fields needed. Select the list-only option and continue to the scraping job setup.
Step 3: Select the data container and create the scraper
Minexa highlights the full container holding the layoff records. Confirm the selection. The extension then identifies all data points within that block automatically.
Once the scraper is created, all extracted columns are visible with next/prev navigation to review each field.
What the extracted data looks like
Each record returns structured fields covering the full event context:
[{
"company_name": "Cheetah",
"layoff_headline": "Cheetah conducts layoff, cites challenges facing the restaurant industry",
"announcement_date": "11/04/2020",
"layoff_article_link": "https://layoffs.fyi/2020/11/04/cheetah-conducts-layoff...",
"logo_image_url": "https://layoffs.fyi/wp-content/uploads/2020/11/cheetah-logo.jpeg",
"related_tag_link": "https://layoffs.fyi/tag/cheetah/",
"related_tag_link_2": "https://layoffs.fyi/tag/food/",
"layoff_details": [
{"value": "San Francisco, CA - Unknown # of employees - Multiple departments"},
{"value": "Cheetah laid off an unknown number of employees last month."}
]
}]The layoff_details nested field is the richest column: it bundles location, headcount, departments, narrative text, and links to employee directories into a single traversable object. Use [item["value"] for item in row["layoff_details"]] in Python to flatten it. The dual datetime fields capture both the original publication time and the last-modified timestamp, useful for deduplication across repeated crawls.
Step 4: Get the API request and run at scale
Click API Request in the extension to get the pre-generated Python code. Update the scraper_id and your list of URLs, then run:
data = {
"batches": [{
"scraper_id": 6241,
"columns": ["top_30"],
"urls": ["https://layoffs.fyi/category/layoff-list/page/2/"],
"scraping": {"js_render": True, "proxy": "verified"}
}],
"threads": 5
}Submit up to 50,000 URLs per batch request. The scraper trained here works across all paginated list pages that share the same structure. For ongoing monitoring, set up a cron job to call the API on a schedule and pass updated page URLs each run.
Full API documentation is available at minexa.stoplight.io/docs/minexa. To get started, install the Minexa Chrome extension and train your first scraper directly on the Layoffs.fyi listing page.

Comments