Polymarket Whale Tracker
Track large Polymarket trades. Set a USDC threshold and get the market, outcome, side, size, price, time, transaction hash and wallet. No API key needed.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
minTradeSize,sizeBasis,side(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.0021 per trade = $2.1 per 1,000
| You are charged for | When | Price |
|---|---|---|
| Trade returned | One trade returned in the dataset. Diagnostic rows and the labelled sample row are not charged. | $0.0021 |
Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-09-20, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
minTradeSize | Only return trades at or above this size. Measured in USDC by default, so 10000 means trades where at least $10,000 changed hands. Polymarket applies this on its side, so smaller trades are never fetched and never charged. | integer |
sizeBasis | USDC measures the money that changed hands (shares x price). Shares measures the contract count, which picks up big positions bought cheaply at long odds. | string |
side | Keep only buys, only sells, or both. Buy and sell are from the taker's point of view. | string |
sinceHoursAgo | Leave empty for no time limit. Polymarket has no date parameter, so the run reads newest first and stops once it is past your window. | integer |
markets | Narrow the search to particular markets. Paste Polymarket links (https://polymarket.com/event/...), market slugs, or raw condition ids. Leave empty to watch every market at once. | array |
traders | Narrow the search to particular wallets, as 0x addresses. Anything that is not a 0x address is skipped and reported rather than quietly widening the search. | array |
maxTrades | Stop after this many. A run tops out at 50,000; past that, add a time window or a market and run it again. | integer |
includeTraderPosition | Adds shares held, average entry price, current value and open profit or loss, as Polymarket publishes them. Costs one extra request per trader and market, so it makes a run slower. | boolean |
includeMarketHolders | Adds the biggest holders of each outcome in the markets your trades touch. One extra request per market, whatever the number of trades in it. | boolean |
topHoldersPerMarket | Only used when the largest holders are switched on. Polymarket returns at most 500 per outcome. | integer |
What you get
A structured dataset — each result includes fields like:
tradedAtmarketQuestionoutcomesidesizeUsdcsharespricetraderAddresstraderDisplayNametransactionUrlmarketUrlExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
Related tools in Developer & Research Tools
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
GitHub Scraper
Search GitHub repos and users: stars, forks, language, topics, licence, plus user bio, company and followers. No token needed. $0.90 per 1,000 rows.
Stack Overflow / Stack Exchange Scraper
Search Stack Overflow and Stack Exchange by keyword or tag. Score, answer count, views, reputation and body text. $2 per 1,000 questions.
Package Registry Scraper (npm + PyPI)
Get npm and PyPI package metadata as JSON. Version, license, author, repo, keywords and npm monthly downloads. $2 per 1,000 packages.
arXiv Scraper
Search arXiv papers by title, author, abstract or category. Get full abstracts, authors, categories, DOI, dates and PDF links. $2 per 1,000 papers.
OpenAlex Scholarly Works Scraper
Search 250M+ OpenAlex papers with no API key. Get titles, authors, venue, year, citations, DOI, OA links and full abstracts. $2.00 per 1,000 papers.
Crossref Scholarly Works Scraper
Search 150M+ papers on Crossref: DOI, title, authors, journal, publisher, date, citations and abstract. No API key. $1.00 per 1,000 works.
Where this tool sits
- Categories
- Developer & Research Tools
Polymarket Whale Tracker: large trades and large holders
Every trade on Polymarket is public. That is the point of the thing. What is awkward is that the site shows you the feed and not much else: you cannot ask it for "every fill over $25,000 in the last six hours, across all markets, as a spreadsheet". This actor does that.
Give it a size threshold. It comes back with one row per trade at or above it: the market question, which outcome was bought or sold, the side, the USDC that changed hands, the fill price, the time, the transaction hash and the wallet that signed it. Newest first. No API key, no login, no wallet.
Measured on 19 September 2026: at a $10,000 threshold the feed reaches back about 15 days; at $25,000, about 50 days, which is as far as Polymarket's public trade history goes. A 1,000-row pull took 0.4 seconds and 790 KB.
What a row looks like
A real one, pulled on 19 September 2026:
{
"tradedAt": "2026-09-20T00:46:16.000Z",
"timestamp": 1789865176,
"marketQuestion": "San Francisco Giants vs. Los Angeles Dodgers",
"outcome": "Los Angeles Dodgers",
"outcomeIndex": 1,
"side": "BUY",
"sizeUsdc": 57915,
"shares": 74250,
"price": 0.78,
"traderAddress": "0x67542c3219b37fd1610aad290676ff91cdbfe3bc",
"traderDisplayName": "maz26",
"traderPseudonym": "Boring-Musician",
"transactionHash": "0x39d38c0c8c689f442400b3af49fb9e8c1108591997e72d3832aa1c7f7bcc14c6",
"transactionUrl": "https://polygonscan.com/tx/0x39d38c0c8c689f442400b3af49fb9e8c1108591997e72d3832aa1c7f7bcc14c6",
"conditionId": "0xf44e25ab6dca8a223af837ccc4e9b7de449a416cdf73497ccc2949edb4aad278",
"tokenId": "78251986380619051387635942808796998910249321744606630518939476508285601480362",
"marketSlug": "mlb-sf-lad-2026-09-19",
"eventSlug": "mlb-sf-lad-2026-09-19",
"marketUrl": "https://polymarket.com/event/mlb-sf-lad-2026-09-19",
"fetchedAt": "2026-09-20T00:46:31.000Z"
}
74,250 shares of the Dodgers at 78 cents. $57,915 on one ticket, and you can click straight through to the transaction.
Input
The only field you really need is the threshold.
{
"minTradeSize": 25000,
"sizeBasis": "usdc",
"sinceHoursAgo": 24,
"maxTrades": 500
}
Watching three particular markets instead, paste the links:
{
"minTradeSize": 5000,
"markets": [
"https://polymarket.com/event/will-the-us-invade-iran-in-2026",
"cfb-flst-ala-2026-09-19",
"0xf44e25ab6dca8a223af837ccc4e9b7de449a416cdf73497ccc2949edb4aad278"
],
"maxTrades": 1000
}
Links, bare slugs and raw condition ids all work, mixed together.
Following particular wallets:
{
"traders": ["0x67542c3219b37fd1610aad290676ff91cdbfe3bc"],
"minTradeSize": 1000,
"includeTraderPosition": true
}
| Field | What it does |
|---|---|
minTradeSize | The threshold. Trades below it are never fetched and never charged. |
sizeBasis | 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 of stake on a 33-to-1 shot. |
side | BUY, SELL or both. |
sinceHoursAgo | A time window. Leave it empty for none. |
markets | Polymarket links, slugs or condition ids. Empty means every market at once. |
traders | Wallet addresses to follow. |
maxTrades | Where to stop. Up to 50,000 in one run. |
includeTraderPosition | Adds what that wallet currently holds in that market: shares, average entry, current value, open profit or loss. |
includeMarketHolders | Adds the biggest holders of each outcome in the markets your trades touch. |
topHoldersPerMarket | How many of them. |
The two extras cost requests
includeTraderPosition asks Polymarket once per wallet-and-market pair, and includeMarketHolders once per market. Both are cached inside a run, so following one wallet across forty of its trades in one market is one extra request, not forty. Both are off unless you turn them on.
Large holders
With includeMarketHolders on, each row carries the biggest holders of that market:
"marketTopHolders": [
{ "address": "0x2c3350...", "displayName": null, "pseudonym": "Substantial-Service",
"shares": 327378.01, "outcomeIndex": 0, "avgPrice": 0.4123,
"currentValueUsd": 176785.2, "totalPnlUsd": 41712.6 }
]
That is the other half of the question. A $60,000 buy reads very differently depending on whether the wallet behind it already held half a million shares or is arriving for the first time.
About the addresses
A Polymarket trade is signed by a wallet, and a wallet is not a person.
traderAddress is a public blockchain address. traderDisplayName and traderPseudonym are the labels Polymarket itself publishes next to that address on its own public feed: a handle somebody typed into a profile box, and a nickname the site generated. Neither is verified, neither is checked against anything, and two rows carrying the same display name do not have to be the same person.
This actor never tries to work out who a wallet belongs to. It looks addresses up nowhere except Polymarket's own public feed. No name services, no labelling databases, no clustering, no linking addresses to social accounts or anything else. If you need that, this is not the tool, and you should think hard about whether you need it at all.
Some wallets come back with a display name Polymarket generated out of the address itself, like 0x2c335066FE58...-1759935795465. That is not a name, so the field is left null.
Pricing
You pay per trade returned. Nothing else.
- Sample rows are free. Run it with empty input and you get one labelled sample row showing the
shape, uncharged.
- Trades that miss your filters are free, because they are never returned. The size threshold runs
on Polymarket's side, so smaller trades do not even cross the wire.
- A run that finds nothing costs nothing beyond starting the run.
- The extras are free. Positions and holder lists ride along on the rows you already paid for.
What this does not do
Worth knowing before you buy.
- Polymarket's public trade history stops at about 50 days. Past that the trades are still on the
Polygon blockchain, but they are not in the feed this reads, and no setting here will reach them.
- How far back a run reaches depends on your threshold, because the depth is counted in trades,
not in days. At $1,000 a run of 10,000 trades covers about 15 hours. At $10,000 it covers about 15 days. At $25,000 you hit the 50-day wall before you run out of rows.
- There is no date filter on Polymarket's side.
sinceHoursAgois applied as the trades come in,
newest first, and the run stops once it is past your window. Asking for "trades from last March" would mean paging through everything since, so the actor does not offer it.
- Combination markets come without an outcome label. A market like "X wins AND Y wins" returns the
question and the size but an empty outcome on Polymarket's side, so outcome is null. About 1 row in 100 at a $5,000 threshold.
- One row is one fill, not one order. A large order filled against six counterparties is six rows
sharing a transaction hash. That is genuinely six trades; it is also why the row count can be higher than the number of orders you were expecting.
sizeUsdcis the money that moved, not a profit or a conviction. Somebody selling a position is
a large trade too. side tells you which.
- No orderbook, no price history, no market list. This returns trades and holders. If you want the
full market catalogue with odds and volume, that is a different job.
- It reads. It does not trade. There is no wallet here, no key, no order placement, and there
never will be.
Questions people ask
Do I need a Polymarket account or an API key? No. This reads Polymarket's public data API, which answers without any credential. The actor holds no keys and asks you for none.
How fresh is the data? The newest trade in a run was 0 seconds old on every check made on 19 September 2026. There is an older, cached version of Polymarket's feed that runs about four minutes behind; this actor does not use it.
What counts as a whale? You decide. That is what minTradeSize is. $10,000 is a reasonable starting point; the largest single fill seen while building this was $57,915.
Can I run it on a schedule? Yes, and sinceHoursAgo is built for it. Set it a little longer than your schedule interval. Every 15 minutes with a 1-hour window means a slow run never leaves a gap.
Why are two rows sharing 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.
Is shares or usdc the right threshold? usdc for "who is moving real money". shares for "who is taking a big swing at long odds", where the stake is small but the position is enormous.
Does it work on every market? Every market on Polymarket, including sports, politics, crypto and the rolling 15-minute markets. The rolling markets do not carry an outcome index, so that field comes back null on them.
Output
Rows land in the dataset. The run also writes a RUN_REPORT record to the key-value store with 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. When something is missing, that is where it says so.