How we score
Universe
All current constituents of the S&P 500 index, from a public constituent list that is refreshed with each nightly build.
Fundamental data
Financial statement figures come from the SEC's EDGAR XBRL company facts API, which carries the tagged numbers companies file with their reports. We use annual figures from 10-K filings only. For each fiscal year we take the figure from the most recent 10-K that reports it, so restatements are picked up.
- Fiscal years are labelled by the calendar year in which they end. Years ending in the first ten days of January are counted as the previous year (a 52/53-week year ending 3 January 2021 is FY2020).
- Stock splits: older filings report EPS and share counts before later splits. We detect splits from the share-count history and restate older years onto today's basis.
- Total debt = short-term borrowings and commercial paper + current portion of long-term debt + non-current long-term debt. Leases are excluded.
- Return on equity uses average equity over the year. Return on assets (Piotroski) uses assets at the start of the year, as in the original paper.
- Free cash flow = cash from operations − purchases of property, plant and equipment.
- Owner earnings = net income + depreciation and amortisation − all capital expenditure.
Price data
Daily split-adjusted closing prices from Marketstack end-of-day prices, about 420 calendar days of history per stock. Market value = latest close × the share count on the cover of the company's latest filing.
Scoring
Each test is pass, fail or n/a. "n/a" means a figure we need wasn't reported or there isn't enough history; it's left out of the score instead of being counted as a fail. A method's score is tests passed out of tests evaluated, and the page always shows how many weren't evaluated.
Updates
The site rebuilds every night after the US market close. Price-based tests can change daily; fundamental tests change when a company files a new 10-K. Every page shows the last update date and the date of the price used.
Errors
Everything here is computed automatically from data as filed. Unusual tagging in a filing can produce a wrong figure. If you find one, please tell us.