How KOL Tracker Works

Transparent methodology for tracking financial influencer accuracy. No black boxes.

80+
KOLs tracked
900+
Calls recorded
Daily
Pipeline runs at 07:30 ET
Step 1 — Tweet Collection
Daily scraping via Apify · 07:30 ET

Every morning at 07:30 ET, our pipeline runs and scrapes the latest tweets from all 80+ tracked KOLs using the Apify Twitter Scraper API.

Technology
Apify Twitter Scraper
Schedule
Daily at 07:30 ET
KOLs tracked
80+ financial influencers
Data source
Public tweets only

What we collect: tweet text, timestamp, engagement metrics (likes, retweets, replies). We only collect public tweets — nothing private, DM-based, or from protected accounts.

Limitation: If a KOL deletes a tweet after we scrape it, we keep the record. If they delete before our daily scrape, we never capture it. We cannot retroactively recover deleted content.

Not every tweet is a stock call. To keep costs low and accuracy high, we use a two-stage filtering system before calling the AI.

Stage 1 — Regex pre-filter: A tweet must contain both a ticker symbol (e.g. $AAPL) and a directional keyword (BUY, SELL, LONG, SHORT, BULLISH, BEARISH). If it doesn't match both conditions, we skip it entirely — no AI call made.

Stage 2 — Claude Haiku: Tweets that pass the filter are sent to Anthropic's Claude Haiku AI, which extracts structured data from the natural language:

// Example tweet input: "Loading up on $NVDA here, feels like a great BUY under $900. Target $1050 by end of month 🚀" // Claude Haiku output (JSON): { "ticker": "NVDA", "direction": "BUY", "conviction": "HIGH", "target_price": 1050 }
AI model
Anthropic Claude Haiku
Parse accuracy
~95% (sampled)
Directions tracked
BUY / SELL / SHORT / HOLD
Conviction levels
HIGH / MEDIUM / LOW
Known edge cases: Sarcasm ("Oh great, another reason to $BUY more $TSLA 🙄"), jokes, and hypotheticals can be misclassified. Tweets with multiple tickers may only capture the primary one. We audit samples but cannot guarantee perfect accuracy at scale.

For every parsed call, we take 4 price snapshots using Yahoo Finance (yfinance) to measure performance over time:

T0 — At time of tweet
Entry price baseline
T1D — 1 day later
Short-term result
T7D — 7 days later
Weekly result
T30D — 30 days later
Monthly result

Prices are fetched daily as snapshots become due. A call posted today gets its T1D snapshot tomorrow, T7D in a week, and T30D in a month. Until a snapshot is taken, the call shows as Pending.

Limitations: Yahoo Finance data may have 15–20 minute delays during market hours. We use closing prices, not intraday. Halted stocks, delisted stocks, or after-hours moves may not be accurately captured.

Once price snapshots are available, we calculate each KOL's accuracy metrics:

Correct call definition:

  • BUY or LONG call → stock price went UP from T0
  • SELL or SHORT call → stock price went DOWN from T0
Win Rate Formula
Win Rate = (correct calls ÷ total scored calls) × 100%
Average Return Formula
Avg Return = mean of ((price_at_snapshot − price_at_T0) ÷ price_at_T0 × 100)

Star rating system:

⭐⭐⭐⭐⭐ 5 stars
≥ 65% win rate
⭐⭐⭐⭐ 4 stars
55–64% win rate
⭐⭐⭐ 3 stars
45–54% win rate
⭐⭐ 2 stars
35–44% win rate

Rankings are recalculated daily after the pipeline runs. KOLs are sorted by win rate within each selected time period (1D, 7D, 30D).

We DO track:

  • US stocks — NYSE, NASDAQ, AMEX
  • Public tweet-based calls from 80+ tracked KOLs
  • BUY, SELL, LONG, and SHORT directional calls
  • 1-day, 7-day, and 30-day performance windows
  • KOLs across options flow, technical analysis, macro, and swing trading styles

We DON'T track (yet):

  • Options trades — too complex (strike, expiry, contract size)
  • Crypto calls — coming soon
  • Private Discord, Telegram, or newsletter calls
  • Deleted tweets — can't retroactively capture
  • Intraday trades — we use end-of-day prices only
  • Position sizing — we don't know if a KOL put 1% or 50% of their portfolio in

KOL categories we cover:

Options Flow Technical Analysis Macro Swing Trading Momentum Sector Rotation Day Trading Value Investing

We believe transparency about our limitations builds more trust than pretending they don't exist.

  • AI parsing errors (~5%): Our parser can misinterpret sarcasm, vague language, or complex multi-part tweets
  • Timing ambiguity: A tweet at 3:58pm EST — did they buy before market close or the next morning? We don't know
  • Partial positions: A KOL might tweet "buying $AAPL" but only allocate 2% of their portfolio — we can't know
  • Price data delays: Yahoo Finance may have 15–20 minute delays; we use closing prices not real-time
  • Survivorship bias: KOLs who stop tweeting or go private disappear from tracking — their later failures aren't counted
  • Small sample sizes: A KOL with 5–10 calls has a statistically unreliable win rate — don't read too much into it
  • Context missing: A BUY call from a bearish KOL as a hedge means something different than from a pure bull — we don't capture context
Real Examples from Our Database
✓ Example 1 — Correct BUY Call
@InvestorsLive · Feb 17, 2026
CORRECT
KOL tweets something like: "Loading $SNDK here, looks constructive above this level — BUY."

Our parser detects $SNDK + keyword BUY → sends to Claude Haiku → extracts {"ticker": "SNDK", "direction": "BUY"} → we snapshot the price at T0.
Price at call (T0)
$590.59
Price at 7 days (T7D)
$638.52
Return
+8.1%
Result
✓ Correct
✗ Example 2 — Wrong SELL Call
@markminervini · Feb 05, 2026
WRONG
KOL tweets: "Getting cautious on $SLV, this looks extended — SELL / trim here."

Our parser correctly identifies it as a SELL call on $SLV. The call is logged and we track price. But the stock continued higher — the SELL call was wrong.
Price at call (T0)
$66.69
Price at 7 days (T7D)
$67.73
Move
+1.6% (against call)
Result
✗ Wrong
⚡ Example 3 — Ambiguous Case
Edge case: how AI handles unclear language
EDGE CASE
A KOL tweets: "Not sure I'd be a buyer of $TSLA at these levels, but could see a bounce."

This is ambiguous. The tweet contains $TSLA but the sentiment is unclear — "not sure I'd be a buyer" could mean bearish, and "could see a bounce" could mean short-term bullish. Our regex pre-filter might not even pass this through (no explicit BUY/SELL keyword), but if it does, Claude Haiku may classify it as BUY based on "bounce" — which may be wrong.

This is exactly why we audit samples and why you should never rely solely on our parsed data.
Browse the Leaderboard → See Example KOL Profile Read Disclaimer