Polymarket Whale Tracker - Large Trades & Holders
Pricing
from $2.04 / 1,000 trades
Polymarket Whale Tracker - Large Trades & Holders
Large Polymarket trades as rows: market question, outcome, side, size in USDC, fill price, time, transaction hash and the wallet that signed it. You set the size threshold. Trader positions and biggest market holders on request. No account, no wallet. $2.10 per 1,000 trades.
Pricing
from $2.04 / 1,000 trades
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
8 days ago
Last modified
Categories
Share
Set a size threshold and get the Polymarket trades at or above it, newest first: the market question, the outcome, the side, the USDC that changed hands, the fill price, the time, the transaction hash and the wallet that signed it. Narrow it to certain markets or wallets, and add the trader's current position or the market's biggest holders when you want the context.
How far back you can see depends on the threshold, because Polymarket's public trade history stops at about 50 days and a low threshold fills your row cap long before that. And a big trade is a fact, not a tip: nothing here predicts anything.
| Input | A size threshold, plus optional markets, wallets, side and time window |
| Output | One row per trade at or above the threshold: market, outcome, side, USDC size, shares, price, time, transaction hash, wallet and its public labels |
| Ceiling | 50,000 trades per run, and about 50 days of Polymarket history |
| Account needed | None: no Polymarket account, no wallet, no key |
| Price | $2.10 per 1,000 trades, flat on every plan. The free plan's $5 a month covers about 2,300 |
🔍 What Polymarket Whale Tracker does
Polymarket applies the size threshold itself, so smaller trades never reach you and are never charged. Each trade that does arrive is checked again on size, side and time window, and a fill seen twice comes back once.
Polymarket has no date filter, so sinceHoursAgo works by reading newest first and stopping once it
is past your window. That is also why there is no "trades from last March" option: reaching it would
mean paging through everything since. Measured on 19 September 2026, 10,000 trades at a $10,000
threshold covered about 15 days, and at $25,000 the 50-day limit came before the row cap did.
Markets can be Polymarket links, market slugs or condition ids, mixed. Wallets must be 0x addresses. A mistyped one is skipped and reported, never turned into a search of every market.
The two extras are looked up once per wallet and market, or once per market, and reused within the run. So one wallet's forty trades in one market take one extra lookup, not forty. Both make a run slower, and both are off unless you turn them on.
traderDisplayName and traderPseudonym are the labels Polymarket shows next to a wallet: a handle
someone typed and a nickname the site generated. Neither is verified, and a wallet is not a person.
This never tries to work out who a wallet belongs to. When Polymarket builds a "name" out of the
address itself, the field is left null.
📋 What data you get from each Polymarket trade
| What you get | Field |
|---|---|
| When it happened | tradedAt, timestamp |
| The market, and which outcome was traded | marketQuestion, outcome, outcomeIndex |
| Buy or sell, from the taker's side | side |
| The money that changed hands, the contract count and the fill price | sizeUsdc, shares, price |
| The wallet, and the labels Polymarket shows for it | traderAddress, traderDisplayName, traderPseudonym |
| The on-chain transaction, with a link | transactionHash, transactionUrl |
| The market, three ways | conditionId, marketSlug, marketUrl |
| With the extras on: the wallet's position, and the market's top holders | traderPosition, marketTopHolders |
▶️ How to track large Polymarket trades
- Open Polymarket Whale Tracker and click Try for free.
- Set Minimum trade size, and Measure the size in if you want shares instead of USDC.
- Narrow it with Markets (optional) or Trader addresses (optional), and set Only trades from the last N hours.
- Set Maximum trades, and tick the position or holder extras if you want them.
- Click Start, then download the dataset as JSON, CSV or Excel, or read it from the API.
💰 How much does it cost to track large Polymarket trades?
$2.10 per 1,000 trades. Flat on every Apify plan, no volume tiers. On the free plan, the $5 Apify gives you each month covers about 2,300 trades. The position and holder extras ride on the rows you already pay for and cost nothing more.
Not charged: the sample row, the diagnostic row, and trades below your threshold or outside your filters, since they never become rows. If you set a maximum charge for the run, it stops at the last trade that fits.
📥 What you give it
{"minTradeSize": 25000,"sizeBasis": "usdc","sinceHoursAgo": 24,"maxTrades": 500}
Following particular wallets, with their positions:
{"traders": ["0x67542c3219b37fd1610aad290676ff91cdbfe3bc"],"minTradeSize": 1000,"includeTraderPosition": true}
| Field | Default | What it is |
|---|---|---|
minTradeSize | 0, every trade, the form starts at 10000 | Only trades at or above this size. |
sizeBasis | usdc | usdc measures the money that changed hands. shares measures the contract count, which catches big positions bought cheaply at long odds: 100,000 shares at 3 cents is $3,000 on a 33-to-1 shot. |
side | any | any, BUY or SELL, from the taker's side. |
sinceHoursAgo | none, the form starts at 24 | Only trades from the last N hours. Empty means no window. More than a year is read as a year. |
markets | none | Polymarket links, market slugs or condition ids. Empty watches every market at once. |
traders | none | Wallets to follow, as 0x addresses. |
maxTrades | 500, the form starts at 200 | Where to stop, 1 to 50,000. |
includeTraderPosition | false | Adds what that wallet holds in that market now: shares, average entry, current value, and profit or loss. |
includeMarketHolders | false | Adds the market's largest holders across all its outcomes, biggest first. |
topHoldersPerMarket | 10 | How many holders, 1 to 500. Only read when the holders are on. |
📤 What you get back
A real row from a run on 29 September 2026:
{"tradedAt": "2026-09-29T13:26:48.000Z","timestamp": 1790688408,"marketQuestion": "Dota 2: LGD Gaming vs Xtreme Gaming (BO3) - BLAST Slam Group A","outcome": "LGD Gaming","outcomeIndex": 0,"side": "BUY","sizeUsdc": 30550.83,"shares": 45000,"price": 0.6789073733,"traderAddress": "0x1eeaf77002cf1eef5305abae702ddc3ccc86db08","traderDisplayName": "110thst","traderPseudonym": "Snoopy-Statin-Spool","transactionHash": "0x6497570c8e9ec9f21666d247c17839d0e9db04329a546e682924d33a023b7054","transactionUrl": "https://polygonscan.com/tx/0x6497570c8e9ec9f21666d247c17839d0e9db04329a546e682924d33a023b7054","conditionId": "0xf5514cca9e1a1879e8901c35d33714d446a47613ed39eeab30166eee5c89a6f8","tokenId": "104036161673518535467152916057562873523320038948071879753857499152088151012316","marketSlug": "dota2-lgd-xtreme-2026-09-29","eventSlug": "dota2-lgd-xtreme-2026-09-29","marketUrl": "https://polymarket.com/event/dota2-lgd-xtreme-2026-09-29","fetchedAt": "2026-09-29T13:27:49.321Z"}
With the extras on, a row also carries these, shown here from two runs on 20 September:
{"traderPosition": {"shares": 13513.7,"avgPrice": 0.7299,"currentPrice": 0.725,"entryCostUsd": 9864.9874,"currentValueUsd": 9797.4325,"realizedPnlUsd": 0,"unrealizedPnlUsd": -67.5549,"totalPnlUsd": -67.5549,"percentPnl": -0.6847,"outcome": "Arman Tsarukyan","redeemable": false},"marketTopHolders": [{"address": "0x224a89dbe0db0d6124b335edabd15b3f877da3d5","displayName": "wr0ngw4yb3tt0r","pseudonym": "Unwieldy-Supporter","shares": 445858.326032,"outcomeIndex": 0,"avgPrice": 0.177,"currentValueUsd": 222.9291,"totalPnlUsd": -78732.3384}]}
| Field | How to read it |
|---|---|
sizeUsdc, shares, price | The money that changed hands (shares times price, to the cent), the contract count, and the fill price. |
side | BUY or SELL, from the taker's side. A big sell is a big trade too. |
outcome, outcomeIndex | Which outcome was traded. outcome is null on combination markets, which Polymarket leaves unlabelled, and outcomeIndex is null on the rolling up-or-down markets. |
transactionHash, transactionUrl | The on-chain transaction, with a link to it. One order filled against several counterparties is several rows sharing one hash. |
traderPosition | Null when Polymarket shows no current position for that wallet in that market, and missing when the lookup failed. |
marketTopHolders | Null when the market's holders could not be read. |
🧾 Reading the output
The free sample row is a complete, real-looking trade, so no ordinary field tells it apart. Look for the flags:
| Row | How to spot it | Billed |
|---|---|---|
| A trade | No _sample or _diagnostic field | yes |
| The sample row | _sample: true, charged: false. Written when the input asks for nothing, or when a field holds a value that cannot work, with a note saying which | no |
| The diagnostic row | _diagnostic: true, charged: false, a note, and the badTraders, badMarkets and marketsNotFound it could not use. Written when none of the markets or wallets you gave could be used | no |
There are no error codes. Every run also writes RUN_REPORT to its key-value store: what each
search listed and returned, how many trades fell below the threshold or outside the window, which
markets could not be found, and why the run stopped.
A run ends as Failed only when none of its searches could be read, when the run's price could not be
read, or when your maximum charge does not cover a single trade. To keep only trades, drop every row
carrying _sample or _diagnostic.
💡 What people use it for
- A feed of every fill over $25,000 in the last day, across all markets, in one spreadsheet.
- Following a handful of wallets you already track, with what each still holds after the trade.
- Checking who else holds a market before reading much into one big buy. A $60,000 buy looks different from a wallet already holding half a million shares.
- Spotting long-odds swings, with
sizeBasis: "shares"and a high share count.
🚧 What it does not do
- One row is one fill, not one order. A large order split across six counterparties is six rows.
sizeUsdcis money moved, not conviction or profit. Selling a position is a large trade too.- No order book, price history or market catalogue. Trades and holders only.
- No identity. Wallets, and the labels Polymarket shows, nothing more.
- No advice and no trading. It reads. There is no wallet or key here, no order placement and no signal.
- It is not an official Polymarket tool. Dami's Studio is independent and is not affiliated with or endorsed by Polymarket, or by any other company named on this page.
🧭 Which prediction market or sports data scraper do you need?
| If you want | Use |
|---|---|
| Kalshi markets with prices, volume, open interest and results | Kalshi Markets Scraper |
| Large Polymarket trades, the wallets behind them and the biggest holders | This one |
| Pre-game sportsbook odds and player props | Sports Odds Scraper |
| Fixtures, live scores, results and league tables across 21 sports | Sofascore Scraper |
| Tennis results and average odds, from the ATP to the ITF | Tennis Results & Odds Scraper |
❓ Questions people ask
Do I need a Polymarket account or an API key?
No. Nothing to sign up for, and this asks you for no key.
What counts as a whale?
You decide; that is what minTradeSize is. $10,000 is a sensible start.
How do I run it on a schedule without gaps?
sinceHoursAgo is built for it. Set the window a little longer than the schedule, say one hour every
15 minutes, so a slow run never leaves a gap. A trade seen by two runs comes back in both, so
de-duplicate on the six fields a run uses itself: transactionHash, traderAddress, tokenId,
side, shares and price.
Why do two rows share a transaction hash?
One order can fill against several counterparties in the same transaction. Each fill is its own row, with its own size and price.
Should I measure size in shares or USDC?
usdc for who is moving real money. shares for who is taking a big swing at long odds, where the
stake is small and the position is huge.
Can I call it from code or connect it to an AI assistant?
Yes. The API tab has ready-made
code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect
https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/polymarket-whale-tracker. Either way
the run happens on your Apify account at the same price.
Is it legal to scrape Polymarket trades?
The trades are public on Polymarket and on the blockchain, and the rows carry wallets, not names. A handle someone chose can still identify them, so have a reason for keeping it. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page. Send the input and the run ID; RUN_REPORT usually shows
where the run stopped and why.