How Rankings Work
What "4+ sources agree" actually means, where the data comes from, and the honest limitations of a free-tier data pipeline.
The short version
Every stock in the tracked universe is checked against four independent data sources. If 4 or more distinctly-named sources (analyst firms or news outlets) currently rate a stock Buy, it lands on the Buy board; the same logic applies for Sell. Boards are ranked by how many sources agree — more agreement, higher rank — not by price movement, trading volume, or how many shares changed hands.
Data sources
SeekingAlpha and Morningstar specifically aren't reachable without violating their terms of service (paywalled ratings, bot-blocked pages), so this app uses four licensed/free APIs instead. Each contributes distinct, named, dated ratings:
| Source | What it contributes | Counts as |
|---|---|---|
| Finnhub | Aggregated analyst recommendation trend (how many firms rate a stock Strong Buy / Buy / Hold / Sell / Strong Sell) and the live price quote | 1 source: "Finnhub Analyst Consensus" |
| Financial Modeling Prep (FMP) | Individual rating actions from named analyst firms (e.g. "Citigroup: maintain Buy", "Keybanc: downgrade to Underweight") | 1 source per firm |
| Alpha Vantage | News sentiment analysis across financial outlets (Benzinga, Seeking Alpha, Reuters, TipRanks, etc.), plus historical price charts | 1 source per outlet with a strongly bullish/bearish article |
| Retail sentiment from finance-focused subreddits (r/wallstreetbets, r/stocks, r/investing, r/StockMarket, r/options), matched by $CASHTAG mentions | 1 source per subreddit with net-bullish/bearish posts |
The consensus rule
- Only ratings from the trailing 90 days count — older ratings age out automatically rather than being deleted, so they can still count again if a source repeats the same call.
- A stock needs 4 or more distinct sources (by name, not by rating count) agreeing on the same direction to qualify for a board. One firm issuing three "maintain Buy" notes in 90 days still counts as one source, not three.
- A stock can appear on both boards at once if different sources are split — e.g. some analysts upgrading it while news sentiment turns bearish. That's a real signal of disagreement, not a bug. These stocks are collected in the Mixed tab, which shows the Buy-side and Sell-side source counts side by side rather than picking one.
- Within each board, stocks are ranked by total agreeing-source count, highest first, capped at the top 20.
Trend indicators
Every Monday, that week's Top 20 Buy and Sell boards are snapshotted. The ▲ / ▼ / – arrow next to a stock compares its rank to the previous week's snapshot, and the number beside it ("3w") is how many consecutive weeks it's held that exact rank. A ★ marks a stock's first week appearing on a board.
Tracked universe
This app tracks the 200 largest S&P 500 companies by market-cap weight, not the full US market. That's a deliberate tradeoff to stay within free-tier API rate limits — a smaller, higher-quality universe means daily call budgets stretch further and more symbols get real multi-source data rather than partial coverage across hundreds of thinly-tracked names.
What this is not
- Not trading volume or order flow. "Sources" here means analyst firms and news outlets issuing Buy/Sell opinions — not how many shares were bought or sold, and not a "most popular trades today" list.
- Not investment advice. This aggregates public opinions from third parties; it doesn't evaluate whether those opinions are correct.
- Reddit sentiment is unverified retail chatter, not professional analysis — classified by a simple keyword heuristic on post text, not a person or an ML model. Treat it as crowd noise alongside the analyst/news sources, not as a substitute for them.
- "Hist. Vol" is historical (realized) volatility, not implied volatility. It's the annualized standard deviation of a stock's actual daily price moves over the last ~20 trading days — a backward-looking measure of how much the stock has been moving, computed from price data already cached for the chart. It is not the options market's forward-looking expected move (implied volatility), which would require options-chain pricing data. That data isn't available on any free tier we could find — every provider we checked (including Alpha Vantage and a dedicated options-data vendor) either has no options data or gates it behind a paid plan ($500/month in one case).
- Prices update live; ratings don't. The Price and Day % columns poll a real-time quote every 30 seconds while this page is open, so those two numbers track the actual market. Everything else — which sources agree, board membership, rank — only changes when a full data collection runs (a weekly scheduled pass, or a manual "Refresh Data" click), because compiling analyst/news consensus is a much heavier operation than fetching one price.
- Not always fully live (ratings/consensus data). Free-tier API rate limits (particularly Alpha Vantage's ~25 requests/day and FMP's daily cap) mean data collection is rationed — news-sentiment checks are prioritized for stocks already one source away from a board, and historical price charts refresh only for stocks currently on a board. A "Refresh Data" click may not update every source for every stock immediately if a provider's daily quota is already spent.