Polymarket is a prediction market: people bet real money on elections, sports, crypto prices and world events, and every trade settles on-chain. That makes it unusually transparent. You can see every wallet, every bet and every position.
That transparency is also why people watch the "smart money" there. When a wallet with a long record of profits puts $50,000 on one outcome, it is worth knowing about. This tutorial shows how to follow those wallets without running a blockchain indexer.
What you will build
- A feed of large ("whale") trades as they happen
- The top traders by profit, with their current open positions
- The biggest holders on each side of any market
- A watchlist of specific wallets and their portfolios
The data source
We will use the Polymarket Whale Tracker, which reads Polymarket's public data. It needs no Polymarket account and no API key. It has four modes:
| Mode | Returns |
|---|---|
whales |
large trades: wallet, trader name, side, outcome, price, usdValue, market, and the trader's portfolio value |
top-traders |
the leaderboard by profit or volume, with each trader's top open positions |
market |
a market's prices, volume, liquidity, top holders of each outcome and recent large trades |
wallets |
portfolio value and open positions for wallets you choose |
It costs $3 per 1,000 records.
Step 1: Setup
pip install apify-client pandas
export APIFY_TOKEN="your-token-here" # Apify Console → Settings → API & Integrations
Step 2: Whale trades
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("smartmoney-data/polymarket-smart-money").call(
run_input={"mode": "whales", "minUsd": 10000, "lookbackHours": 24, "maxResults": 100}
)
for t in client.dataset(run["defaultDatasetId"]).iterate_items():
print(t["timestamp"], t["trader"], t["side"], t["outcome"], f'${t["usdValue"]:,.0f}', "on", t["market"])
In a test run on October 13, 2026 with a lower $1,000 minimum, the 20 most recent large trades were all from the previous few minutes and added up to about $40,000. The largest was a $5,000 bet on "No" at 63 cents in a combined Brazil, Israel and US Senate election market. Each row also carries traderPortfolioValue, so you can tell a $5,000 bet from a wallet worth $35,000 (a big conviction bet) from the same bet by a wallet worth $5 million (pocket change).
Filter by topic or side:
run_input = {"mode": "whales", "minUsd": 25000, "marketKeyword": "election", "side": "BUY"}
Step 3: What are the best traders holding?
run = client.actor("smartmoney-data/polymarket-smart-money").call(
run_input={"mode": "top-traders", "timePeriod": "MONTH", "orderBy": "PNL",
"maxResults": 25, "positionsPerTrader": 5}
)
for tr in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f'#{tr["rank"]} {tr["trader"]} profit ${tr["pnlUsd"]:,} volume ${tr["volumeUsd"]:,}')
for p in tr["topPositions"]:
print(f' {p["outcome"]:>4} @ {p["avgPrice"]} now {p["currentPrice"]} ${p["currentValue"]:,.0f} {p["market"]}')
If several of the month's top traders hold the same outcome, that is a crowded smart-money position:
import pandas as pd
from collections import Counter
traders = list(client.dataset(run["defaultDatasetId"]).iterate_items())
crowded = Counter((p["market"], p["outcome"]) for tr in traders for p in tr["topPositions"])
for (market, outcome), n in crowded.most_common(10):
print(n, "top traders hold", outcome, "on", market)
Step 4: Who holds a market?
Pass a Polymarket URL (or slug). An event URL covers all of its open markets:
run = client.actor("smartmoney-data/polymarket-smart-money").call(
run_input={"mode": "market", "markets": ["https://polymarket.com/event/ballon-dor-winner-2026"],
"holdersPerOutcome": 10, "minUsd": 5000}
)
for m in client.dataset(run["defaultDatasetId"]).iterate_items():
print(m["market"], f'volume ${m["volumeUsd"]:,.0f}')
for o in m["outcomes"]:
top = o["topHolders"][0] if o["topHolders"] else None
print(" ", o["outcome"], o["price"], "biggest holder:", top and top["trader"], top and top["shares"])
Step 5: Watch specific wallets
run = client.actor("smartmoney-data/polymarket-smart-money").call(
run_input={"mode": "wallets", "wallets": ["0x...", "0x..."], "positionsPerTrader": 20}
)
Schedule this in Apify Console (every hour, say) and connect Slack, email or Google Sheets to get a running log.
Use it from an AI assistant
https://mcp.apify.com/?tools=smartmoney-data/polymarket-smart-money
Then ask: "What are this month's 10 most profitable Polymarket traders betting on right now?"
FAQ
Do I need a Polymarket account or API key? No. Everything comes from Polymarket's public data endpoints.
How live is it? Trades show up seconds after they happen. Each run is a snapshot, so schedule it for an ongoing feed.
Why do some traders show a wallet address instead of a name? Polymarket only shows a username if the trader set one. Otherwise the actor uses Polymarket's generated pseudonym.
Is this legal to use? Yes. It reads public on-chain and public API data. Check whether Polymarket is available where you live before trading on it.
Data is for informational purposes only and is not investment or betting advice.
Top comments (0)