Recipes / Detect layoff announcements as they are reported

Detect 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.

What comes back

Story clusters covering announcements in the window. Company statements and press coverage of the same announcement collapse together, so you get the event once rather than the release plus everyone who rewrote it.

How this goes wrong

Building this on a keyword alert for the word "layoffs". It works in testing because your test case used that word, and then misses announcements phrased as restructuring — which is most of the ones a company would prefer you did not notice.

Adapting it

The same pattern covers plant closures, office relocations and hiring freezes — all are events with a formal announcement and an informal vocabulary. Narrow to a sector by adding industry terms to the query rather than by filtering outlets, since layoff coverage crosses from trade press to general news the moment the numbers are large enough. To watch one company specifically, add its name and widen the window, because these are announced infrequently and a short window usually returns nothing.

Running it for real

Poll every few hours rather than continuously; announcements cluster around market open and company reporting calendars, and a tighter loop mostly spends requests on empty windows. Treat the first hour after an announcement as unreliable for outlet counts — syndication has not propagated yet, so a story that looks minor at minute five can be everywhere by minute ninety. If you are feeding this to an alerting channel, wait for the second poll before escalating.

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.

Related recipes