How to Track Smart Money Wallets on Polymarket
Smart money tracking on Polymarket works by reading the public holder list for a market, looking up each wallet's lifetime realized profit and loss, and counting how many historically profitable wallets sit on each side. PolyLab samples the top 20 holders per outcome, so the counts are context for further research, not a signal.
Polymarket position data is on-chain, so any wallet holding an outcome can be listed and its trading history reconstructed. The common approach is to rank holders by whether they have made money historically, then check whether those wallets cluster on one side of a market. This page documents exactly how PolyLab implements that, including where the method breaks down.
What Smart Money means in PolyLab today
In the current implementation, Smart Money is a descriptive enrichment layer built from sampled holder rows and wallet PnL sign. It is not a model of informed flow, not a prediction engine, and not a complete reconstruction of market positioning.
Current count logic
The scanner computes counts by joining holder rows with wallet stats and applying simple sign rules:
- profitable means
ws.total_pnl > 0 - losing means
ws.total_pnl < 0
That produces fields such as:
yes_profitable_countyes_losing_countyes_totalno_profitable_countno_losing_countno_total
Outcome-specific semantics
For a YES row:
min_profitablechecks holder rows on YES wherews.total_pnl > 0min_losing_oppositechecks holder rows on NO wherews.total_pnl < 0
For a NO row, the opposite-outcome logic flips accordingly through 1 - amo.outcome_index.
Source limits matter
Top 20 holders per outcome
The current holders client caps the effective sample to top 20 holders per outcome. Even when the scraper requests a much larger limit upstream, the client reduces it to a per-outcome maximum of 20 and re-sorts locally.
This is the single most important caveat in the smart-money layer.
Wallet PnL is a separate source
Wallet profitability is not inferred from the market itself. It comes from a separate wallet-PnL API and is then joined back onto sampled holder addresses.
smart_money_win_rate is not a current public filter
Background jobs still compute a smart_money_win_rate value into market_smart_money_stats, but that field is not exposed as a live public scanner filter in the current app contract. Public docs must not describe it as an active user-facing control.
Known data anomalies
- a profitable wallet can be profitable for reasons unrelated to the current market
- a losing wallet can still be directionally correct here but wrong elsewhere
- the same wallet may hedge or net across venues
- aliases may be missing or stale
- holder sampling may miss smaller but relevant wallets
- a system wallet can appear in the data, and PolyLab marks a known system wallet explicitly
system wallet
PolyLab currently inserts a known rewards/system wallet and tags it with wallet_tag = SYSTEM. This is useful for operational transparency, but it is not evidence of directionality.
Do not treat Smart Money counts as proof
Use the counts as context only:
- they can help you find markets worth opening
- they can help you compare sides inside the same market
- they cannot validate a trade by themselves