Polymarket Markets Scraper
Pricing
from $2.10 / 1,000 results
Polymarket Markets Scraper
Prediction markets from Polymarket's public API: every active event and its Yes/No markets with live prices, bid/ask, spread, volume, liquidity, end date and resolution state, plus event tags. Walk by tag, search by text, or fetch specific events. Flags markets that have already ended.
Pricing
from $2.10 / 1,000 results
Rating
0.0
(0)
Developer
Ibnu Adzim
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Prediction markets from Polymarket, straight from its public Gamma API: every active event and each of its Yes/No markets with live prices (outcome prices, best bid/ask, spread, last trade, 1-day and 1-week change), volume (total, 24h, 1-week), liquidity, start/end dates, resolution state, CLOB token ids, and the event's title, slug, tags and market count on every row.
HTTP only, no key, no login, no browser. One request per 100 events.
What it is for
- Odds monitoring — run on a schedule, keep
yesPricebymarketId. - Category dashboards — walk
politics,crypto,sports, … by tag. - Arbitrage / research feeds —
clobTokenIdsandconditionIdon every row link straight to the order book.
Input
| field | what it does |
|---|---|
tags | Tag slugs to walk (politics, crypto, nba, …). Empty = every active event. |
searchTerms | Free-text search over event titles. |
eventSlugs | Specific events, by slug or URL. |
includeClosed, excludeEnded | Status filters — see below. |
sortBy, ascending, minVolume, minLiquidity, endingAfter, endingBefore | Ordering and filters. |
includeEventRows | Also emit one EVENT row per event. |
maxItems, maxConcurrency, minRequestInterval, proxyConfiguration | Limits. |
Each tag, search term and event slug is its own target with its own
SEARCH_SUMMARY.
Four things about this API worth knowing before you trust a run
1. "Active" includes markets that have already ended
active=true&closed=false is the API's live set — and 17 of the top 100
markets by 24-hour volume on the day this was built had an endDate in the
past: the day's Fed-decision markets, ended, awaiting resolution, still
trading. A monitor that reads "active" as "open question" reports settled
questions as live odds. Every row carries hasEnded and acceptingOrders;
excludeEnded drops them and the summary counts them.
2. A multi-outcome question is N binary markets, not one market
Every Polymarket market has exactly two outcomes. "Fed Decision in
September?" is an event with seven Yes/No markets ("50+ bps decrease",
"25 bps decrease", …) whose Yes prices sum to ~1. Read flat, they look like
seven unrelated questions. Every MARKET row carries eventId,
eventTitle, eventSlug, outcomeLabel and eventMarketCount so you can
regroup; includeEventRows adds an EVENT row with the outcome/price
summary in one place.
3. Page size is capped at 100 and offset stops at 2,000 — silently, then loudly
Ask for limit=5000, get 100 with HTTP 200. Ask for offset=2001, get a
422. This Actor uses the API's keyset cursor instead, which walks all ~21,000
active events (210 pages, measured), so a tag walk is never truncated.
4. Nine fields are JSON inside JSON
outcomes, outcomePrices and clobTokenIds arrive as strings:
"[\"0.115\", \"0.885\"]". Read naively, the first outcome price is the
character [. Parsed here; outcomePrices is a list of floats, yesPrice
and noPrice are floats, and a row whose price list does not parse is
refused and counted rather than shipped with a probability of [.
Other things measured
sortBytakes only the seven fields the API accepts; anything else is answered with a 422 upstream and refused here.- An unknown tag returns nothing (
no_matches), not everything. - The API's own
liquidity_minparameter answers HTTP 500;minLiquidityis applied locally instead.volume_min,end_date_min/maxwork upstream. - On the search endpoint the
activeparameter is silently ignored (16 of 20 results came back closed);events_status=activeis what narrows it, and the Actor also drops any closed event the search still returns. volumeandliquidityarrive as 18-decimal strings beside float twins; floats are emitted.volumeis null on brand-new markets with no trades.bestBid/bestAskare null on ~10% of rows (no order book).
Output
MARKET—marketId,conditionId,question,slug,url,outcomeLabel,outcomes,outcomePrices,yesPrice,noPrice,impliedProbability,bestBid,bestAsk,spread,lastTradePrice,oneDayPriceChange,oneWeekPriceChange,volume,volume24hr,volume1wk,liquidity,startDate,endDate,hasEnded,acceptingOrders,active,closed,negRisk,resolutionSource,umaResolutionStatus,clobTokenIds,description,eventId,eventTitle,eventSlug,eventUrl,eventMarketCount,eventVolume,eventVolume24hr,eventLiquidity,eventEndDate,eventTags.EVENT(optional) —eventId,title,slug,url,marketCount,outcomes(label + yesPrice per market),volume,volume24hr,liquidity,startDate,endDate,hasEnded,negRisk,tags.SEARCH_SUMMARY— one per target:eventsSeen,eventsReturned,marketsReturned,pagesFetched,stoppedReason,filteredOut,endedRows,negRiskRows,rowsWithoutOrderBook,rowsRefusedUnparsablePrices,totalClaimedBySite(search only).ERROR—invalid_input,bad_request,payload_shape_changed,fetch_failed, with detail.
Known limits
- Prices are the API's snapshot at fetch time; no order-book depth or price history (the CLOB API has both — a natural follow-up).
- Search is Polymarket's own title search; it does not search descriptions.
- Closed markets are walkable with
includeClosedbut there are far more of them than active ones; setmaxItemsaccordingly.