Value investing method
Deep value: 2 of 5,257 listings survive
Four deep value filters run in sequence against 5,257 US listings on 2026-09-07 leave two. The third filter removes 58 companies for having no score at all.
By Javier SanzPublished Updated : The price-staleness sentence is removed, because it was false. It said every price here was more than seven days old and that the market data had last been refreshed on 2026-08-26; the refresh ran on 2026-09-11 and the sentence went on saying otherwise, as a computed fact typed into prose will. The scope caveat it sat in is unchanged, and the build date on the funnel is unchanged at 2026-09-07.
Founder of ValueScreener. Built Ninety Nine, a securities services provider, and sold it to a tier-one global bank; ran operations and internationalization at Alpaca, the brokerage API.
Who writes thisEditorial processLinkedIn (opens in a new tab)X (opens in a new tab)
Run the classic deep value stack against the 5,257 US listings in this product's pool on 2026-09-07 and two survive. The four filters are cheap on assets, cheap on earnings, not going bankrupt and improving, applied in that order:
| Filter | Listings remaining |
|---|---|
| Price to book at or below 1.0 | 1,006 |
| Price to earnings at or below 10 | 164 |
| Altman Z at or above 2.99 | 24 |
| Piotroski F-Score at or above 7 | 2 |
Counted with POST /api/screener/search on 2026-09-07. The public endpoint reports at most fifty matching rows, so a query that comes back under fifty is reporting a true count. The pool was split by sector and then by market capitalisation until every part came back under fifty, and the parts were added.
Two listings out of 5,257 is 0.04 percent. That number is the least interesting thing on this page, and the third row is the most interesting.
The third filter removes 58 companies that have no score
Of the 164 listings that are cheap on both book value and earnings, 106 hold an Altman Z-Score at all. The other 58 hold none, so the filter removes them without ever comparing them to 2.99.
Fifty of those 58 are in Financial Services or Real Estate. The Altman Z-Score is withheld for banks, insurers, brokers, equity REITs, mortgage REITs and specialty finance, because the model was fitted on manufacturers and produces a distress reading for a healthy bank by construction. So an Altman filter placed at the end of a deep value screen quietly deletes the two sectors that deep value screens have always been full of.
| Sector | Cheap on both | Holds an Altman Z | In the safe zone |
|---|---|---|---|
| Financial Services | 40 | 11 | 1 |
| Real Estate | 24 | 3 | 1 |
| Industrials | 21 | 18 | 6 |
| Technology | 20 | 19 | 6 |
| Communication Services | 16 | 15 | 3 |
| Consumer Cyclical | 14 | 13 | 1 |
| Consumer Defensive | 9 | 9 | 3 |
| Healthcare | 8 | 8 | 0 |
| Energy | 8 | 7 | 2 |
| Basic Materials | 3 | 2 | 1 |
| Utilities | 1 | 1 | 0 |
| Total | 164 | 106 | 24 |
Read the first column against the second. In Financial Services 29 of 40 are dropped for having no score, and in Real Estate 21 of 24. Everywhere else the two columns are nearly identical.
Among the 106 that do hold a score, 24 are in the safe zone. That is 23 percent, against 15 percent if you compute it against 164 as a screener would report it. The second number is not a fact about distress. It is a fact about which companies the model applies to.
Where the first two filters actually bite
Price to book at or below 1.0 leaves 1,006 listings, which is 25 percent of the 3,972 listings holding a price to book at all. That is not a demanding filter. A quarter of the measurable market trades below stated book value, and book value is an accounting figure that has been getting less informative for decades as more of what companies own has stopped appearing on balance sheets.
Price to earnings at or below 10 is the filter that does the work: 1,006 down to 164. It is also the filter that hides the most, for the same reason as the Altman step. Only 2,360 of the 5,257 listings hold a price to earnings ratio, because a company with no positive earnings has none, so a screen containing this filter is a screen over that smaller population whether the person running it knows or not.
The last filter is doing something different from the other three
Piotroski at 7 or better takes 24 down to 2. That looks like the harshest filter in the stack and in one sense it is: across the whole market, 169 listings score 8 or 9, and the published percentiles put a score of 7 or better somewhere between the top tenth and the top quarter.
But it is also the only filter in the stack that is about direction rather than level. Six of the nine Piotroski signals compare this year against last: return on assets up, operating cash flow above net income, leverage down, current ratio up, no shares issued, gross margin up, asset turnover up. A company scoring 7 is one where most things got better last year.
That is precisely the combination the deep value literature is about. A company that is cheap and getting worse and a company that is cheap and getting better look identical on the first two filters and are not the same proposition. Piotroski's own paper was about separating exactly those two populations inside the cheapest quintile of the market.
Two listings clearing all four is not a finding about those two companies, and this page does not name them. It is a statement about how narrow the intersection of four unrelated conditions is when each of them is uncommon on its own.
The filter that could not be included
The classic stack often ends with a net-net test: price below net current assets less all liabilities, Graham's own deepest value criterion. This product holds a net-net figure for 4,363 listings, so the data exists, and it is not in the funnel above.
The reason is the public interface rather than the data. The screener's expression form accepts three conditions from an anonymous caller, and the backward-compatible flat form that accepts more does not include the net-net field. A five-step funnel including it cannot be built from the public endpoints, so it is not built here and it is not estimated.
What this leaves out
Every count is of listings in the pool as it stood on 2026-09-07, not of deduplicated companies. The pool contains more listings than companies, because a company with two share classes appears twice.
Screener filters match stored values before the applicability gate runs. A listing whose Altman Z the product would refuse to display still matches an Altman filter if a value is stored, so the counts above are not the same as what the product would show on those companies' own pages.
The four thresholds are conventions from the deep value literature, not boundaries this product estimated. Altman's 2.99 is his original safe-zone floor for the original model on public manufacturers. Piotroski's 7 is the top of the middling band on the nine-point scale.
Two of the four filters depend on a share price, and the Altman Z-Score contains one price term as well. Those three describe the market as it was priced when the build ran on 2026-09-07, not as it is priced on the day you read this. The date of the market data behind a figure is printed beside that figure, and /coverage carries the current one.
Nothing here is a recommendation, and no company is named. A screen is a way of shortening a reading list.