Polymarket API - Markets, Odds, Order Book & Trades avatar

Polymarket API - Markets, Odds, Order Book & Trades

Pricing

from $1.50 / 1,000 markets

Go to Apify Store
Polymarket API - Markets, Odds, Order Book & Trades

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

TRUONG VAN HOA

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

21 hours ago

Last modified

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, outcomePrices and clobTokenIds as 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 caseHow
Probability dashboards / newsletterstagSlug: "politics" or search: "fed rate" returns impliedProbability for every market
Backtestingstatus: "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 researchincludeTrades: true for fills, includeOrderbook: true for depth
Event researcheventSlugs: ["your-event-slug"] returns every outcome market of one event, e.g. all brackets of an election or all props of a game
AI agentsSimple input, flat JSON output, works through the Apify MCP server

Input

Pick any one selector — or none to scan the whole exchange:

FieldExampleNotes
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.
statusopen (default), closed, allclosed 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
closesWithinDays7Live markets closing in the next N days
closedWithinDays30Markets that closed in the last N days (history / backtests)
minVolume1000Skip markets with lifetime volume below this many dollars
minLiquidity500Skip markets with current liquidity below this many dollars
maxItems100Hard cap on saved (and charged) markets
includeOrderbook, orderbookDepthtrue, 10Current book per outcome
includeTrades, maxTradesPerMarket, tradesLookbackHourstrue, 100, 24Recent fills, public wallet address only
includePriceHistory, historyInterval, historyFidelityMinutestrue, "1w", 60Price-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/impliedProbability are only populated for 2-outcome markets.
  • impliedProbability — the YES price for a 2-outcome market; null for genuine multi-outcome markets, where a single "implied probability of YES" is not meaningful.
  • statusopen, closed (trading ended, not yet resolved) or resolved. Polymarket has no single status field; this is derived from closed plus whether an outcome has settled to a price of exactly 1.
  • result — the winning outcome name once resolved, derived the same way. null until 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:

EventWhen
market-recordEach market saved to the dataset
market-enrichmentEach 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.