Polymarket prices are probabilities: a YES share at $0.69 means the market gives the event about a 69% chance.
That makes them handy for dashboards, newsletters, research and model features.
Polymarket's own APIs are public and free: the Gamma API for markets and events, the CLOB API for order
books and price history, and a Data API for trades. If you're writing a trading bot, use them directly.
If you just want clean rows in a CSV, on a schedule, there are a few annoying details:
-
outcomes,outcomePricesandclobTokenIdscome back as JSON strings inside JSON and need a second parse. - Pages cap at 100 markets, so you have to paginate.
- There is no server-side text search on
/markets. - Sorting "top markets by volume" through
/eventssorts events, not markets, so small side-markets of a big event jump the queue. - Order books and price history are keyed by outcome token id, not market id.
I packaged all of that into a hosted Actor, so you get one flat record per market.
One request, one CSV
import csv, os, requests
resp = requests.post(
"https://api.apify.com/v2/acts/feedsmith~polymarket-markets-scraper/run-sync-get-dataset-items",
params={"timeout": 300},
headers={"Authorization": f"Bearer {os.environ['APIFY_TOKEN']}"},
json={"status": "open", "search": "bitcoin", "minVolume": 1000, "maxItems": 50},
timeout=330,
)
resp.raise_for_status()
markets = resp.json()
with open("polymarket.csv", "w", newline="") as f:
w = csv.writer(f)
w.writerow(["question", "yes_probability", "volume_24h", "liquidity", "closes", "url"])
for m in markets:
w.writerow([m["question"], m["impliedProbability"], m["volume24h"], m["liquidity"], m["closeTime"], m["url"]])
Output from a real run on 2026-09-18:
98.9% Will the price of Bitcoin be above $76,000 on September 18?
100.0% Will the price of Bitcoin be above $72,000 on September 18?
69.5% Will Bitcoin reach $80,000 in September?
Leave out search and you get the most traded open markets across the exchange, sorted by 24h volume (100
markets in about 8 seconds).
What a record contains
A real record (run on 2026-09-18), with token ids shortened:
{
"question": "Will Bitcoin reach $80,000 in September?",
"outcomes": [
{
"name": "Yes",
"price": 0.695,
"impliedProbability": 0.695,
"tokenId": "463643032374..."
},
{
"name": "No",
"price": 0.305,
"impliedProbability": 0.305,
"tokenId": "742364722558..."
}
],
"yesPrice": 0.695,
"noPrice": 0.305,
"impliedProbability": 0.695,
"volume": 470026.909022,
"volume24h": 73831.21954200002,
"liquidity": 67523.6986,
"bestBid": 0.69,
"bestAsk": 0.7,
"spread": 0.01,
"lastTradePrice": 0.7,
"closeTime": "2026-10-01T04:00:00Z",
"status": "open",
"result": null,
"eventTitle": "What price will Bitcoin hit in September?",
"tags": [
"crypto",
"bitcoin",
"crypto-prices",
"recurring",
"hit-price",
"monthly"
],
"url": "https://polymarket.com/event/what-price-will-bitcoin-hit-in-september-2026",
"scrapedAt": "2026-09-18T13:11:59.342Z"
}
Every numeric field is a real number and every JSON-string field is already parsed. Multi-outcome markets keep the
whole outcomes array. impliedProbability is the YES price for binary markets.
Order book, trades and price history
Add any of these flags. Each enriched market costs one extra charge, whichever flags you turn on:
json={
"search": "bitcoin", "minVolume": 1000, "maxItems": 5,
"includeOrderbook": True, # bids/asks per outcome token, best bid/ask, depth
"includeTrades": True, "maxTradesPerMarket": 50,
"includePriceHistory": True, "historyInterval": "1w",
}
Privacy note: Polymarket's trade feed includes trader pseudonyms, bios and profile pictures. The Actor keeps only
the public wallet address on each trade.
Schedule it
On Apify, save the input as a task and add a schedule (every 15 minutes, hourly, daily). Each run produces a
dataset you can pull as CSV/JSON from a stable URL, or send to Google Sheets, a webhook, Make, Zapier or n8n.
Every record has scrapedAt, so appending runs gives you a time series of odds.
Cost
$1.50 per 1,000 markets, plus $3 per 1,000 markets enriched with order book, trades or history. A top-100 snapshot
every hour for a month (~72,000 records) comes to about $108. Every 6 hours brings it down to about $18.
Links
- Actor: https://apify.com/feedsmith/polymarket-markets-scraper
- Runnable example: https://github.com/ankaibua-spec/feedsmith-examples/blob/master/polymarket/top_markets_to_csv.py
- Polymarket's own docs: https://docs.polymarket.com/
Not affiliated with Polymarket. Nothing here is trading advice. Disclosure: I built this Actor. This article was drafted with AI assistance (Claude); every command, number and output above comes from real runs on 2026-09-18.
Top comments (0)