The model
The Bull Rankings score is a deterministic quality-growth screen — the classic GARP idea, “growth at a reasonable price” — a single 0–100 number built from three pillars. Quality rewards durable returns on capital, healthy margins, low leverage, and clean, cash-backed earnings. Growth measures revenue and earnings expansion. Value grades valuation against sector peers — the PEG ratio, earnings and cash-flow multiples. A high score means a strong, growing business trading at a fair price.
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) on the quality-growth model, and surfaces the strongest 30. The same code runs against every name; nothing is hand-curated. Banks, insurers and REITs run on a different financial model, so they're graded on a sector-appropriate card rather than the quality-growth score.
About the grade card. Beneath the headline score, the three quality-growth pillars (Quality, Growth, Value) break down how the number was reached. Each name also carries a grade card of the underlying fundamentals: 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), with the full set — FCF yield, ROE and more — in the expanded score-breakdown tooltip and the compare-page deep-dive.
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 Value pillar and its PEG grade reward valuations anchored to actual earnings growth, not extrapolated narratives.
- Concentration over breadth. A focused list of thirty 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. We audited this and it is total: zero of the ~5,000 price histories end early, so the backtest sees only survivors, and any historical return it produces is overstated. We've quantified the effect rather than just naming it: calibrated to the delisting-to-zero hazard of the strategy's actual holdings, it haircuts the back-test by roughly 3 points a year (e.g. an out-of-sample CAGR of ~33% / ~15%-a-year alpha becomes ~30% / ~12% after the haircut — a real edge, smaller than the raw figure). The haircut is modest for a specific, checkable reason: every one of the strategy's holdings generates positive free cash flow, so it structurally avoids the cash-burning companies that actually go to zero. (We verified this directly — a bankruptcy-risk screen for levered cash-burners removed none of the picks.) We disclose this haircut alongside any back-test number, and are scoping a point-in-time constituent dataset (Russell 3000 / S&P 500 historical membership) to retire the bias entirely.
- 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.
Where the data comes from
Every number on the site is traceable to a named source, and the grade card tags each value with where it came from and the period it covers:
- SEC EDGAR — official, as-filed company financials (10-K / 10-Q XBRL data). For US filers we reconcile the income, cash-flow, and balance-sheet figures against EDGAR so the fundamentals rest on the primary regulatory filing, not a third-party rounding of it.
- Yahoo Finance — quarterly and annual statements, live and historical prices, and sell-side analyst estimates used for forward-looking signals and price targets.
- Finnhub — a fallback quote and fundamentals source when the primary feed is unavailable, so a name still resolves rather than erroring.
- NASDAQ Trader — the daily US-listed symbol file that defines the universe we screen (every common stock on NYSE, NASDAQ, NYSE American, and NYSE Arca).
How we keep it accurate
Bad data is worse than no data on a finance site, so accuracy is enforced mechanically rather than trusted:
- A daily data-quality gate. Before any new edition ships, an automated validator checks it — list completeness, positive prices, day-over-day ticker-count stability, and per-field coverage regressions. If a data-source hiccup truncates or degrades the scan, the run is aborted and the last good edition stays live rather than shipping broken numbers.
- EDGAR reconciliation. US-filer fundamentals are cross-checked against the as-filed SEC data, and values that look implausible (trough-earnings P/Es, buyback-distorted ROE, FX-unit mismatches on ADRs) are flagged or suppressed rather than scored as if real.
- Out-of-sample discipline. No change that affects the score or the picks ships without being validated on data the change wasn't tuned on — and we publish the negative results too. Several intuitively-appealing signals were tested and rejected because they didn't hold up out-of-sample; we'd rather ship a smaller, honest edge than a flattering, over-fit one.
Who's behind The Bull Rankings
The Bull Rankings is an independent, self-funded research project run by its editorial team. The model, the code, and the writing are ours; the site is built in the open, the scoring is fully auditable, and every methodology choice above is documented rather than asserted. We have no business relationship with any company we score, and we are not compensated to feature any stock.
Found an error, or want to reach us? Contact the team — corrections to the underlying data or the methodology are genuinely welcome, and we'd rather hear about a wrong number than leave it live.