Polymarket Scraper: Markets, Order Books & Top Holders
Pricing
$2.20 / 1,000 items
Polymarket Scraper: Markets, Order Books & Top Holders
Polymarket markets ranked by 24h volume or liquidity, or any market in depth: order book per outcome, 24h price range, recent trades, top holders and open interest. $1.75 per 1,000 results, one flat rate, error rows free.
Pricing
$2.20 / 1,000 items
Rating
0.0
(0)
Developer
itnlab
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 hours ago
Last modified
Categories
Share
Get Polymarket prediction-market data as clean dataset rows, in one of two ways:
- Market list. Every open market ranked by 24-hour volume (or by liquidity), as many as you want, up to 10,000 per run.
- Market insight. The markets you name, each read in depth. You get the order book for every outcome, the 24-hour price range, the latest trades, the biggest holders and the open interest, all in one row.
It costs $1.75 per 1,000 results, one flat rate for every plan. Rows that explain a failure are free.
What you get
Market list rows (type: "market") carry, for each market:
- the question, event, URL, slug and ids;
- outcome names and prices;
- 24-hour and all-time volume;
- liquidity, best bid and ask, and spread;
- the last trade price and the 1-hour and 24-hour price change;
- start and end dates and status.
Insight rows (type: "insight") carry all of the above, plus:
outcomeStats, per outcome:book: best bid and ask, spread, mid, notional depth on each side, and the top price levels (5 by default, up to 50);price24h: open, close, change, low and high over the last day.
recentTrades: the newest trades (15 by default, up to 500), with time, side, outcome, price, size, wallet and the public name Polymarket shows.topHolders: the largest positions per outcome (10 by default, up to 20), by wallet and public name.openInterest: the value of all open positions in USDC.sectionErrors: any section that could not be read this time. The rest of the row is still delivered.
How to use
- Pick What to collect: Market list or Market insight.
- For a list, set Markets to list and Rank by. For insight, paste market URLs such as
https://polymarket.com/event/<event>/<market>, market slugs or numeric ids. - Run it, then download the dataset as JSON, CSV or Excel, or read it through the Apify API.
An event URL works when the event holds a single market. For an event with several markets, such as an election with one market per candidate, open the candidate you want and paste that URL.
Pricing
$1.75 per 1,000 results, charged as each row lands in your dataset:
| You collect | You pay |
|---|---|
| The top 100 markets by 24h volume | $0.175 |
| 1,000 markets | $1.75 |
| 10 markets in depth | $0.0175 |
The spending limit you set on a run is respected before a row is written, never after. An insight row counts as one result however many trades and holders are nested in it. Error rows are not charged.
Input example
{"mode": "insight","markets": ["https://polymarket.com/event/nba-2027-champion/will-oklahoma-city-thunder-win-the-2027-nba-finals"],"bookDepth": 5,"tradesLimit": 15,"holdersLimit": 10}
Output example
A real row from 2026-09-30, cut down to one price level, one trade and one holder. Wallets are shortened here and the public names replaced; the dataset has them in full.
{"type": "insight","id": "2243320","question": "Will Oklahoma City Thunder win the 2027 NBA Finals?","url": "https://polymarket.com/event/nba-2027-champion/will-oklahoma-city-thunder-win-the-2027-nba-finals","eventTitle": "NBA: 2027 Champion","outcomes": ["Yes", "No"],"outcomePrices": [0.185, 0.815],"volume": 651438.30,"volume24h": 80452.79,"liquidity": 295013.75,"bestBid": 0.18,"bestAsk": 0.19,"oneDayPriceChange": -0.01,"endDate": "2027-07-01T03:59:00Z","openInterest": 109722.04,"outcomeStats": [{"outcome": "Yes","price": 0.185,"book": {"bestBid": 0.18, "bestAsk": 0.19, "spread": 0.01, "mid": 0.185,"bidDepth": 16615.85, "askDepth": 10935.50,"bids": [{"price": 0.18, "size": 41765.54}], "asks": [{"price": 0.19, "size": 49649.18}]},"price24h": {"points": 25, "open": 0.195, "close": 0.185, "change": -0.01, "low": 0.185, "high": 0.195}}],"recentTrades": [{"time": "2026-09-30T07:02:03Z", "side": "SELL", "outcome": "Yes", "price": 0.18,"size": 30895.0, "wallet": "0x2b51…", "name": "trader-a"}],"topHolders": [{"outcome": "Yes", "wallet": "0xcbba…", "name": "trader-b", "amount": 81651.53}],"sectionErrors": [],"collectedAt": "2026-09-30T15:05:49Z"}
FAQ
Where does the data come from? From Polymarket's own public market-data APIs, read live at run time. Nothing is served from a cache. collectedAt says when each row was read.
Do I need a Polymarket account or an API key? No. Everything here is public and read-only. The Actor never trades.
How fresh is it? Prices and books are read when your run asks for them, usually a second or two before the row lands.
What about wallets? Trades and holders show the wallet address and the public name Polymarket displays next to it. Nothing else about the person is collected: no bios and no pictures.
Why did a market come back as an error row? The error row says why, for example a URL that names an event with several markets, or a market that does not exist. Error rows are free. A line that is not a Polymarket URL, slug or id at all is refused by the input form before the run starts, so it costs nothing.