StockScore

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.

FactorMeasureFormulaBetter
ProfitabilityReturn on assetsNet income ÷ total assetsHigher
Net marginNet income ÷ revenueHigher
GrowthRevenue growth, 3 yearsYearly rate from revenue three annual reports agoHigher
Earnings per share growth, 3 yearsYearly rate from earnings per share three reports ago, split-adjustedHigher
ValuePrice to earningsMarket value ÷ net income; ranked lower is better, and a loss ranks lastLower
Free cash flow yield(Operating cash flow − capital spending) ÷ market valueHigher
Balance sheetLiabilities ÷ assetsTotal liabilities ÷ total assets; lower is saferLower
Current ratioCurrent assets ÷ current liabilitiesHigher
MomentumTotal return, 6 monthsChange in price plus dividends over 6 monthsHigher
Total return, 12 monthsChange in price plus dividends over 12 monthsHigher

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.