The model
The Bull Rankings score is a deterministic composite of seven fundamental grades — free cash flow, revenue growth, debt-to-equity, earnings multiple, PEG, FCF yield, and ROE — combined with a small set of signed adjustments for synergies (compounder profile, GARP sweet spot, hypergrowth premium) and risks (extreme leverage, cash burn outside the speculative bucket, accruals warning, DCF cross-check).
Every weekday the cron pulls the full NASDAQ Trader US-listed symbol list (~5,000 names across NYSE, NASDAQ, and AMEX), runs each through a market-cap and liquidity screen (drops the smallest / illiquid names, ~2,500 survive), scores the survivors that have complete fundamentals (~1,800 of them), buckets the scored set into growth, value, and speculative, and surfaces the top 5 of each. The same code runs against every name; nothing is hand-curated.
About the grade card. The score combines seven graded signals — FCF, revenue growth, debt-to-equity, P/E (or P/S for unprofitable names), PEG, FCF yield, and ROE — plus the signed synergy / risk adjustments described above. On the row cards across the rankings, watchlist, and individual stock pages, the five most-discriminating grades sit on the compact strip (FCF, Rev, D/E, P/E·or·P/S, PEG); the remaining two (FCF yield and ROE) feed the score but live in the expanded score breakdown tooltip and the compare-page deep-dive. The headline score reflects all seven.
The principles
- Transparency over mystique. Every score is auditable. Click a row and the breakdown shows you exactly which grades and adjustments produced the number.
- Durability first. Return on equity, free-cash-flow yield, and balance-sheet quality dominate the durability inputs — we reward businesses that compound for years, not quarters.
- Pay fair price for real growth. The PEG signal and the GARP synergy bonus reward valuations anchored to actual earnings growth, not extrapolated narratives.
- Concentration over breadth. Five names per bucket reflects the view that the top of the ranking is materially better than the middle — we'd rather surface fewer high-conviction picks than dilute the signal.
What the site is not
This is not personalized advice. The rankings are general information published to a broad audience; nothing on the site is calibrated to any individual's circumstances, risk tolerance, or tax situation. Read the full disclosures at the footer of every page.
Methodology & limitations
We're explicit about the boundaries of what this model can and can't tell you. The screen is mechanical and transparent — and it has known structural limits worth naming.
- Universe is today's universe. The ~5,000-name candidate pool we screen every weekday is sourced from the NASDAQ Trader daily symbol file at run time— which, despite the name, lists every US-listed common stock and ETF across NASDAQ, NYSE, and AMEX, not just NASDAQ-traded names. That means delisted, acquired, or bankrupt names from prior periods don't appear — a structural form of survivorship bias. Any historical backtest computed against this universe overstates expected return for that reason. When we publish backtest figures, we'll disclose this caveat alongside the number, and we're actively scoping a point-in-time constituent dataset (Russell 3000 / S&P 500 historical membership) to retire it.
- Fundamentals depth ≈ 10 years. Yahoo Finance — our primary source — provides ~10 years of quarterly and annual statements for most names, less for recent IPOs. Backtest windows beyond ~2014 thin out materially.
- Foreign listings + ADRs. When a foreign issuer reports financials in a non-USD currency, we convert at the current FX rate. Multi-year backtests that include foreign listings carry residual FX drift.
- Forward EPS estimates are sell-side consensus. The PEG signal and any forward-EPS-derived numbers reflect sell-side analysts, not the company's own guidance. Coverage thins out below ~$2B market cap; we surface that gap by marking such names with a derived or neutral PEG grade rather than penalizing them.
- Forward track record is short. The model is new; we log every pick at its pick-time price the moment the cron commits it, never back-dated, and value the log live against an S&P 500 benchmark on the performance page. Aggregate return / hit-rate figures only appear there once the earliest tracked picks have at least five trading days of history — a one- or two-day return is noise, not signal. Treat early numbers as directional only.