Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
Polymarket Whale Tracker icon

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.

16 runs on Apify $0.0021 per trade ($2.1 / 1,000)
Run this in the cloudRun on Apify →

Developer & Research Tools

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust minTradeSize, sizeBasis, side (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export 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 forWhenPrice
Trade returnedOne 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

FieldWhat it doesType
minTradeSizeOnly 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
sizeBasisUSDC 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
sideKeep only buys, only sells, or both. Buy and sell are from the taker's point of view.string
sinceHoursAgoLeave 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
marketsNarrow 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
tradersNarrow 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
maxTradesStop after this many. A run tops out at 50,000; past that, add a time window or a market and run it again.integer
includeTraderPositionAdds 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
includeMarketHoldersAdds 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
topHoldersPerMarketOnly 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:

tradedAtmarketQuestionoutcomesidesizeUsdcsharespricetraderAddresstraderDisplayNametransactionUrlmarketUrl

Export 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 iconDeveloper & Research Tools

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.

18 use cases

Stack Overflow / Stack Exchange Scraper iconDeveloper & Research Tools

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.

2 use cases

Package Registry Scraper (npm + PyPI) iconDeveloper & Research Tools

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.

2 use cases

arXiv Scraper iconDeveloper & Research Tools

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.

2 use cases

OpenAlex Scholarly Works Scraper iconDeveloper & Research Tools

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.

2 use cases

Crossref Scholarly Works Scraper iconDeveloper & Research Tools

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.

2 use cases

See all 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
}
FieldWhat it does
minTradeSizeThe threshold. Trades below it are never fetched and never charged.
sizeBasisusdc 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.
sideBUY, SELL or both.
sinceHoursAgoA time window. Leave it empty for none.
marketsPolymarket links, slugs or condition ids. Empty means every market at once.
tradersWallet addresses to follow.
maxTradesWhere to stop. Up to 50,000 in one run.
includeTraderPositionAdds what that wallet currently holds in that market: shares, average entry, current value, open profit or loss.
includeMarketHoldersAdds the biggest holders of each outcome in the markets your trades touch.
topHoldersPerMarketHow 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. sinceHoursAgo is 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.

  • sizeUsdc is 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.