SVB's 2022 annual report contained a sentence that no other bank in our corpus was writing at the time. Our system flagged it in January 2023. The FDIC arrived in March.
That's a striking data point. But it's one case. The question worth asking is: does this pattern hold at scale? We ran the numbers across 4930 public companies and every flag event in the corpus. Here's what we found.
Each year a company files a 10-K. We compare that filing's language against two things simultaneously:
The score is high when a company is simultaneously writing things unusual for itself and unusual across the corpus. Phrase-frequency based, fully deterministic — the same input always produces the same score (with a secondary sentence-embedding signal).
This is different from keyword search (which can't distinguish corpus-wide language shifts from company-specific ones) and different from LLM summarization (which can't compare one filing against the whole corpus of thousands of filings).
SVB is one case. The more useful question is whether the flags, across the whole corpus, tend to land on filings you'd have wanted to read. They do: companies that later ran into well-documented trouble show up disproportionately among the filings that cleared our line in the years before the event. The next section lists a few — with the misses alongside them.
What we deliberately do not do is dress this up as a return. We tested the score as a tradeable factor, and the honest result is that its ranking doesn't hold up as an all-cap return once you add back the companies that have since delisted. So we don't sell a backtest — we sell the measurement, computed transparently, and the flagged filings. Use them to decide what to read, not what to trade.
Companies we flagged before widely-known distress events:
| Company | Event | Lead time |
|---|---|---|
| SVB | Bank collapse Mar 2023 | 14 days (final filing) |
| Bed Bath & Beyond | Bankruptcy Apr 2023 | ~24 months |
| Nikola | Bankruptcy Nov 2023 | ~44 months |
| Rite Aid | Bankruptcy Oct 2023 | 167 days |
Three notable misses worth documenting:
These aren't buried in a footnote. The signal requires multi-year filing history to work. Companies with few historical pairs have lower signal reliability, and we flag this on the company page.
Two problems we know about and haven't solved:
The binomial false-positive problem. The ceiling is set at the 95th percentile of pair scores from labeled stable companies. But if a company has 10 years of filing history, the probability of at least one pair randomly exceeding the 95th percentile is 1-(0.95^10) ≈ 40%. Companies with long histories have a structurally higher false-positive rate. We're working on adaptive per-company thresholds.
No sector normalization. The score is normalized corpus-wide, not within industry sectors — an energy company with routine impairment language is weighted against the same pool as a software company. We tested per-sector (GICS) normalization and it performed worse, so we don't use it, but it means sector base rates of distress vocabulary aren't accounted for. It's also why a company whose distress language is common across the corpus (e.g. Party City) can be missed.
We built FilingDrift to make this signal accessible. Free tier covers our labeled company set (the cases above and more). Researcher, Professional, and Desk plans add watchlist alerts, API access, and the full 4930-company corpus.
The live demo shows SVB's full score history with annotations. The methodology page has the technical detail and the full validation analysis.
Questions about the methodology or specific tickers? Email hello@filingdrift.com