How the score is worked out
Every rule the engine uses is on this page. Nothing is hidden in a model.
1. The group
70 of the largest US-listed companies, across technology, consumer, health care, industrials, energy, communication, materials and utilities. Banks, insurers and property companies are left out because their accounts don’t fit these measures.
2. Ten measures in five factors
Each measure is ranked across the group from 0 (worst) to 100 (best). A factor is the average of its measures. A company needs at least 4 of the 5 factors to be scored.
| Factor | Measure | Formula | Better |
|---|---|---|---|
| Profitability | Return on assets | Net income ÷ total assets | Higher |
| Net margin | Net income ÷ revenue | Higher | |
| Growth | Revenue growth, 3 years | Yearly rate from revenue three annual reports ago | Higher |
| Earnings per share growth, 3 years | Yearly rate from earnings per share three reports ago, split-adjusted | Higher | |
| Value | Price to earnings | Market value ÷ net income; ranked lower is better, and a loss ranks last | Lower |
| Free cash flow yield | (Operating cash flow − capital spending) ÷ market value | Higher | |
| Balance sheet | Liabilities ÷ assets | Total liabilities ÷ total assets; lower is safer | Lower |
| Current ratio | Current assets ÷ current liabilities | Higher | |
| Momentum | Total return, 6 months | Change in price plus dividends over 6 months | Higher |
| Total return, 12 months | Change in price plus dividends over 12 months | Higher |
The five factors count equally. Their average is ranked across the group once more, so the final score spreads from 0 to 100: the best company scores 100 and the middle one 50.
3. Only what was public at the time
- Figures come from annual reports (10-K) in the SEC’s XBRL company facts. Each figure carries the date its filing was published, and the engine ignores anything published after the date it is scoring.
- Companies restate earlier years in later reports. The engine keeps the first published version, which is what investors saw then.
- Share counts in filings are before later stock splits, while prices are adjusted for them. Share counts are converted into the same units so market values are right, for example Apple before its 2020 split and Nvidia before 2024.
- Some companies only started tagging diluted share counts recently. Where that’s missing, the count comes from net income ÷ diluted earnings per share in the same report.
4. The trust check
Every month-end since 2012, the whole group is scored as above. Each company’s total return over the next twelve months is compared with the S&P 500 fund SPY. Grouping those results by score gives the figure on every stock page: how often companies with a similar score beat the index.
5. Code and data
The engine is plain TypeScript with tests for the no-look-ahead rule, restatements, splits and ranking. The same code scores today’s companies on the server and runs the backtest. Data is refreshed with npm run data:fetch and npm run data:build.