Home / Recipes / Detect layoff announcements as they are reported
Worked queryDetect layoff announcements as they are reported
/stories in semantic mode. The parameters matter less
than the reasoning behind them, so that is most of what is below.
The request
GET /stories
?q=company cuts jobs restructuring workforce reduction
&mode=semantic
&from=2026-07-22
&to=2026-07-29 Why these parameters
Semantic mode is not optional here, because the vocabulary is the whole problem. The same event is a layoff, a restructuring, a headcount reduction, a workforce realignment or letting people go depending on whether the source is the company, a union statement or a trade publication. A keyword query returns the slice matching whichever phrasing you happened to choose, which correlates with editorial stance rather than with events — and it looks like a complete answer.
The obvious approach, and why it loses
The obvious approach is a keyword query on the word layoffs, and its failure is systematic rather than random. Which word is used depends on who is speaking: the company says restructuring or realignment, the union says job cuts, the trade press says headcount reduction, and local reporting often just says the plant is closing. A keyword query therefore returns a sample biased toward one type of source, and because every result is genuinely about a layoff, nothing about the output signals the bias. The second instinct — an OR list of every phrasing — does better on recall and still cannot cover the phrasings nobody on the team thought of, which are disproportionately the non-English ones.
When it returns too much, or too little
Too much usually means the query is catching commentary about labour markets rather than reports of specific events. Adding the labor signal with a lower bound biases toward workforce reporting; adding a sector or a country narrows it further without touching the verbs. Too little is more often a window problem than a query problem, because announcements cluster around results days and quarter ends. Widen to a fortnight before loosening the terms. If you are watching one company, run a name query alongside this rather than relying on the topic language to surface it, since a small reduction at a mid-size firm often gets one paragraph in one outlet.
How you would know it is working
Reconcile against something that is not news. Pick a sector and a quarter where a regulator, a statistics agency or a works-council process produces a record, and compare what this surfaced against that record. The gap is the recipe's real recall, it is always larger than it feels, and knowing its size is what lets you use the output without overclaiming. Track it over time rather than once: recall moves with how newsworthy a sector currently is, which means the same monitor gets better and worse for reasons that have nothing to do with the underlying rate of layoffs.
When this is the wrong tool
This will not reliably catch layoffs that were never announced. A great many workforce reductions happen through attrition, quiet non-renewal or rolling small cuts that no publication covers, and a news-derived signal is structurally blind to all of them. Treat what this produces as a lower bound on activity rather than a measure of it, and be careful about inferring trends from it — an increase may reflect more reporting rather than more layoffs, particularly when a sector becomes newsworthy. If you need completeness rather than timeliness, regulatory filings are the better source and this recipe is a supplement to them, not a replacement. It is also poorly suited to private companies below a certain size, where coverage is sparse enough that absence of results carries almost no information.
Running it for real
Response fields, failure modes, adaptations and scheduling cost: Detect layoff announcements as they are reported, in the docs.