Click any column to sort · ★ adds to watchlist · click a row for detail
Magic Formula map
Joel Greenblatt's two factors — cheapness (earnings yield) vs quality (return on capital) · click a bubble for detail
Momentum score 0 100◯ size = market capaxes = percentile ranks within the eligible universefinancials & utilities excluded, per the formula
Magic Formula rankings
Rank = earnings-yield rank + return-on-capital rank, lower is better · ★ adds to watchlist · click a row for detail
Quality — Piotroski F-score
Nine pass/fail tests of profitability, balance-sheet strength, and efficiency (9 = strongest) · Altman Z gauges bankruptcy risk · ★ adds to watchlist · click a row for detail
Dividend screen
Income names ranked by yield — check payout for sustainability (under ~60% is comfortable for most businesses) · ★ adds to watchlist
Estimate revisions
Stocks whose expectations are rising — earnings surprises, analyst rating changes, and the trend in forward EPS consensus · ★ adds to watchlist · click a row for detail
Conviction dashboard
Where the screens agree — each stock's rank in the Composite, Magic Formula, Quality, and Revisions screens · green = top quartile · the badge counts top-quartile appearances · ★ adds to watchlist · click a row for detail
Strategy backtest
How a momentum-decile strategy would have performed on today's universe — point-in-time from historical prices · a discipline check, not a promise
Signal track record
Do the app's own scores actually predict outperformance? Measured from your saved daily snapshots — bias-free (each date uses only what was known then), and it sharpens as history builds
Custom screens
Build your own screen from any metrics — rules combine with AND · saved screens live in the dropdown
Settings
Your API key is stored encrypted on this computer and never leaves it except to call FMP.
Optional — powers the Options tab with your Schwab/thinkorswim account's data. Register a personal app at developer.schwab.com (callback URL https://127.0.0.1), paste its key and secret here, then Connect. Schwab requires a quick re-connect once a week.
Full refresh makes ~5 API calls per stock at up to 600/min:
500 stocks ≈ 4 min · 1,000 ≈ 9 min · 3,000 ≈ 25 min. Quote refreshes stay fast at any size.
For 3,000 stocks, drop the market-cap floor to $300M or lower.
The volume floor is often the tighter constraint below the mega-caps — many solid $2–10B
companies trade under 1M shares/day. If your universe comes up short of the size you asked for, lower this first.
Off = ranked against the whole universe (a bank looks cheap, software looks expensive).
On = ranked against sector peers, so you find the best value/growth/momentum within each sector
instead of tilting toward perennially-cheap sectors. Applies instantly, no refresh needed.
When Claude gives you a small update file, save it anywhere, click the button, and choose it — the app restarts itself on the new version. Your data and settings are untouched.