Polymarket API - Markets, Odds, Order Book & Trades
Pricing
from $1.50 / 1,000 markets
Polymarket API - Markets, Odds, Order Book & Trades
Live and historical Polymarket prediction market data as clean JSON: prices, implied probability, volume, liquidity, order book, trades and price history. No login or API key needed.
Pricing
from $1.50 / 1,000 markets
Rating
0.0
(0)
Developer
TRUONG VAN HOA
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
21 hours ago
Last modified
Categories
Share
Polymarket Markets Scraper — prices, order book, trades & price history
Get Polymarket prediction market data as clean JSON, CSV or Excel: live YES/NO prices, implied probability, volume, liquidity, order book depth, trade fills and price-over-time history — for any market, event, tag/category, or the whole exchange.
- No Polymarket account, login or API key needed. Uses Polymarket's public Gamma, CLOB and Data APIs.
- Stable numeric output. Gamma returns
outcomes,outcomePricesandclobTokenIdsas JSON-encoded strings; this Actor parses them and always returns plain numbers and arrays. - Correctly sorted. Exchange-wide and search scans query markets directly so results are genuinely ranked by 24h volume market-by-market — not just by the volume of the event they belong to.
- Pay only for results. No monthly rental. Order book / trades / price history are optional and charged only when you switch them on.
What can you do with it?
| Use case | How |
|---|---|
| Probability dashboards / newsletters | tagSlug: "politics" or search: "fed rate" returns impliedProbability for every market |
| Backtesting | status: "closed" + closedWithinDays: 365 + includePriceHistory: true gives the result and full price path per market |
| Arbitrage & cross-venue comparison (Polymarket vs Kalshi vs sportsbooks) | live yesPrice/noPrice/orderbook by market on a schedule |
| Liquidity & flow research | includeTrades: true for fills, includeOrderbook: true for depth |
| Event research | eventSlugs: ["your-event-slug"] returns every outcome market of one event, e.g. all brackets of an election or all props of a game |
| AI agents | Simple input, flat JSON output, works through the Apify MCP server |
Input
Pick any one selector — or none to scan the whole exchange:
| Field | Example | Notes |
|---|---|---|
marketSlugs | ["xi-jinping-out-before-2027"] | Exact markets. Status/date filters are ignored for these. Polymarket URLs are accepted too - the last path segment is used. |
marketIds | ["4331478"] | Exact markets by numeric Gamma ID |
conditionIds | ["0x55f72d..."] | Exact markets by on-chain condition ID (the ID used by the CLOB and Data API) |
eventSlugs | ["xi-jinping-out-before-2027"] | All outcome markets of one event. Polymarket URLs accepted too. |
tagSlug | "politics" | Every live market under one Polymarket tag. Polymarket's tag list is large and free-form (thousands of tags, no fixed category list) - check polymarket.com for tag names. |
status | open (default), closed, all | closed includes both trading-ended-awaiting-settlement and already-resolved markets |
search | "bitcoin 150000" | All words must appear in question, event title, slug, description or tags |
closesWithinDays | 7 | Live markets closing in the next N days |
closedWithinDays | 30 | Markets that closed in the last N days (history / backtests) |
minVolume | 1000 | Skip markets with lifetime volume below this many dollars |
minLiquidity | 500 | Skip markets with current liquidity below this many dollars |
maxItems | 100 | Hard cap on saved (and charged) markets |
includeOrderbook, orderbookDepth | true, 10 | Current book per outcome |
includeTrades, maxTradesPerMarket, tradesLookbackHours | true, 100, 24 | Recent fills, public wallet address only |
includePriceHistory, historyInterval, historyFidelityMinutes | true, "1w", 60 | Price-over-time per outcome: 1h, 6h, 1d, 1w, 1m or max |
Example: top 50 open markets by 24h volume
{ "status": "open", "maxItems": 50 }
Example: liquid Bitcoin markets with live order books
{ "search": "bitcoin", "minVolume": 1000, "includeOrderbook": true, "maxItems": 100 }
Example: one event with everything attached
{"eventSlugs": ["xi-jinping-out-before-2027"],"includeOrderbook": true,"includeTrades": true,"includePriceHistory": true,"historyInterval": "1w"}
Output
One record per market. Prices are dollars between 0 and 1 (so they are also probabilities); volume/liquidity are dollars.
{"conditionId": "0xa467b14d51f01b957109d9cbb1d6c124fab2a089d52ed8f471d23c2812e743b7","marketId": "559651","slug": "xi-jinping-out-before-2027","question": "Xi Jinping out before 2027?","eventTitle": "Xi Jinping out before 2027?","eventSlug": "xi-jinping-out-before-2027","tags": ["hfc", "world-affairs", "geopolitics", "world", "earn-4", "macro-geopolitics"],"outcomes": [{ "name": "Yes", "price": 0.0365, "impliedProbability": 0.0365, "tokenId": "32338220190071351435772801779725302244575775216413325951443816017994629993401" },{ "name": "No", "price": 0.9635, "impliedProbability": 0.9635, "tokenId": "25659310674993675562345759665114759892400026242514633218387667107987341231962" }],"yesPrice": 0.0365,"noPrice": 0.9635,"impliedProbability": 0.0365,"status": "open","result": null,"volume": 13517120.788755992,"volume24h": 103739.77267399995,"liquidity": 428144.6475,"openInterest": null,"bestBid": 0.036,"bestAsk": 0.037,"spread": 0.001,"lastTradePrice": 0.036,"startTime": "2025-07-03T20:37:00.228Z","closeTime": "2027-01-01T04:59:00Z","resolutionSource": null,"description": "This market will resolve to \"Yes\" if China's General Secretary of the Communist Party, Xi Jinping, is removed from power for any length of time between July 3, 2025, and December 31, 2026, 11:59 PM ET. Otherwise, this market will resolve to \"No\".\n\n...","url": "https://polymarket.com/event/xi-jinping-out-before-2027","scrapedAt": "2026-09-18T12:21:23.469Z"}
Field notes:
outcomes— one entry per outcome (2 for a normal Yes/No market, N for a genuine multi-outcome market).yesPrice/noPrice/impliedProbabilityare only populated for 2-outcome markets.impliedProbability— the YES price for a 2-outcome market;nullfor genuine multi-outcome markets, where a single "implied probability of YES" is not meaningful.status—open,closed(trading ended, not yet resolved) orresolved. Polymarket has no single status field; this is derived fromclosedplus whether an outcome has settled to a price of exactly 1.result— the winning outcome name once resolved, derived the same way.nulluntil then.openInterest— Polymarket only exposes this per event (aggregated across every outcome), not per market; attached here for context.tags— the market's Polymarket tag slugs (category, sport, topic, etc.).orderbook(optional) — one entry per outcome:bids,asks(best first),bestBid,bestAsk,bidDepth,askDepth.trades(optional) —proxyWallet(public on-chain address only — no display name, bio or profile image),side,outcome,outcomeIndex,tokenId,price,size,timestamp,transactionHash.priceHistory(optional) — one entry per outcome:name,tokenId,history: [{time, price}].
Pricing
Pay per event — you are charged only for what is saved:
| Event | When |
|---|---|
market-record | Each market saved to the dataset |
market-enrichment | Each market that got order book and/or trades and/or price history attached (one charge per market, not per enrichment type) |
Filtered-out markets and failed requests are free. Set Max total charge on the run to cap spend; the Actor stops cleanly when the cap is reached.
Scheduling & integrations
Run on a schedule (e.g. every 5 minutes for live prices), then pull results via the Apify API, webhooks, Google Sheets, Make, n8n or Zapier. Each record has scrapedAt, so scheduled runs can be appended into a time series.
Limits & good citizenship
The Actor throttles itself to 8 requests/second across all three Polymarket APIs it uses, well under any documented limit, and retries on 429/5xx with back-off. Data is public market data; trade fills are stripped of the wallet pseudonym, bio and profile-image fields Polymarket's API otherwise includes, leaving only the public on-chain address.
Code example
A runnable Python script (only requests needed) that calls this Actor and writes a CSV: polymarket/top_markets_to_csv.py — save the most traded open markets (odds, volume, liquidity) to CSV.
FAQ
Is this affiliated with Polymarket? No. It is an independent tool that reads Polymarket's public APIs. Nothing here is trading advice.
Why is a market's tags array sometimes empty? Only markets fetched through a tag/category or event scan carry tag data directly from Polymarket; if you selected markets by slug/ID/condition ID, tags are still attached via an extra (free) query flag, but very new or unlisted markets may not have any tags assigned yet.
I filtered by tagSlug and the results aren't perfectly sorted by volume. Tag scans go through Polymarket's /events endpoint (the only one that filters by tag), which sorts by event-level volume; markets belonging to the same event are not individually re-sorted. Scans with no tagSlug query markets directly and are sorted market-by-market.
I get zero results for a slug/ID. Resolved markets are hidden when status is open (the default). Use status: "closed" or "all", or pass the identifier in marketSlugs/marketIds/conditionIds, which ignore status entirely.
Something wrong or missing? Open an issue on the Actor's Issues tab — fixes usually ship within a day.