Polymarket Scraper — Resolved Markets & Price Before Close avatar

Polymarket Scraper — Resolved Markets & Price Before Close

Pricing

from $2.00 / 1,000 market rows

Go to Apify Store
Polymarket Scraper — Resolved Markets & Price Before Close

Polymarket Scraper — Resolved Markets & Price Before Close

Polymarket scraper for resolved markets: the outcome plus the Yes price 1h/6h/24h/72h/7d before close, final price, min/max, volume and tags. Filter by tag, date range, event or market slug; optional full price series. Public APIs, no proxy, no login. For backtests and calibration studies.

Pricing

from $2.00 / 1,000 market rows

Rating

0.0

(0)

Developer

Viktor Dubnytskiy

Viktor Dubnytskiy

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

A Polymarket scraper for markets that have already closed: what the outcome was, and what the market priced 1 hour, 6 hours, 1 day, 3 days and 7 days before it closed. Filter by tag (weather, sports, politics, crypto …), date window, event or market slug — the Polymarket UI shows none of this once a market resolves.

What you get (example output)

Real rows from the example dataset (weather tag, markets closed after 20 August):

FieldExample valueWhat it is
marketId / slug1360605 / will-any-month-of-2026-be-the-hottest-on-recordPolymarket market id and slug (url is the full link)
questionWill any month of 2026 be the hottest on record?Market question
winner / yesResolvedYes / trueThe outcome that resolved true
pricesBefore{"1h": 0.9995, "6h": 0.948, "24h": 0.954, "72h": 0.965, "168h": 0.93}Yes price at each hour offset before close (null where there were no trades)
priceFinal0.9995Last Yes price before the market closed
priceMin / priceMax0.9195 / 0.9995Range of the Yes price over the retrieved history
volume154744.66Traded volume in USD
closedTime / endDate2026-08-11T17:03:27+00:00 / 2027-01-10T00:00:00ZWhen the market actually closed, and its scheduled end
historyPoints180How many price points backed the snapshots

Every row also carries eventSlug, eventTitle, tags[], outcomes[], winnerIndex, resolved, startDate, liquidity, negRisk, yesTokenId, historyFrom / historyTo, series (with includeSeries), resolutionSource, umaResolutionStatus and scrapedAt.

Use cases

  • Backtesting a strategy — join the outcome with the price 24 or 72 hours before close and measure what a rule would have earned.
  • Calibration studies — the classic "is 80% really 80%?" question, answered over thousands of resolved markets at a fixed offset before close.
  • Research and dashboards — a permanent archive of resolutions, prices and volumes for markets that have vanished from the Polymarket front end.

How it works

Market metadata and resolutions come from Polymarket's public Gamma API, filtered by tag, closing-date window, event slug or market slug. For each market the actor pulls the CLOB price history for the Yes token at the chosen fidelity and reads off the price at every offset in hoursBefore, plus the final, minimum and maximum price. Everything is a public HTTP API — no proxy, no login, no anti-bot. In monitor mode a saved Task returns only markets that resolved since the previous run.

Input

FieldMeaningDefault
tagIdGamma tag id, e.g. 84 = weather, 1 = sports, 2 = politics, 21 = crypto84
tagSlugTag by name instead of id, e.g. weather, nba, fed-rates; used only when tagId is emptyweather
closedAfterKeep markets ending on or after this ISO date, e.g. 2026-08-202026-08-20
closedBeforeKeep markets ending on or before this ISO date, e.g. 2026-09-01empty
marketSlugsSpecific markets by slug (polymarket.com/market/<slug>)empty
eventSlugsEvery market of these events (polymarket.com/event/<slug>)empty
onlyResolvedSkip markets that are closed but not yet resolved, and open marketstrue
hoursBeforeHour offsets before close at which to snapshot the Yes price[1, 6, 24, 72, 168]
fidelityMinutesResolution of the CLOB price history, in minutes60
includeSeriesAttach the complete [[timestamp, price], …] series to each row (large)false
minVolumeSkip markets below this USD volumeempty
maxItemsStop after this many pushed rows20
modescrape = every match; monitor = only markets resolved since the previous run of this Taskscrape
monitorKeyState key for monitor mode when not running as a saved Taskempty
webhookUrlURL that receives a POST with the change summary in monitor modeempty
telegramBotToken / telegramChatIdOptional Telegram destination for monitor-mode summariesempty

Pricing

EventPrice
result$0.002 per market ($2 per 1,000)
monitor-check$0.005 per monitor run
change$0.002 per newly resolved market

Charged only for markets actually pushed. No proxy needed.

Why this actor

  • Data the Polymarket UI deletes — once a market resolves, its price history disappears from the front end; this returns it as a flat row.
  • Price before close at your own offsetshoursBefore is configurable, so a backtest at 12 h or 48 h needs no re-scraping of the raw series.
  • Outcome and price in one row — no joining resolutions to a separate price export.
  • No proxy, no login, no anti-bot — public APIs only, so runs are cheap and reliable.
  • $2 per 1,000 markets, and no charge for empty runs — you pay per pushed row.
  • Every run leaves a RUN_SUMMARY record in the key-value store with the reason for an empty result, so a zero-row run is diagnosable.

Limits

  • Price points come from Polymarket's CLOB history at the chosen fidelity; a market with no trades at an offset returns null for that offset (thin markets often return null at 72 h and 168 h).
  • Gamma lists at most 5,000 markets per filter (50 pages × 100), so narrow the date window for large tags.
  • Multi-outcome (neg-risk) events appear as one row per market, because each market is itself a Yes/No pair.
  • liquidity and resolutionSource are often null on closed markets — Polymarket stops reporting them.
  • No trader, wallet or person-level data is collected.

FAQ

How do I get historical Polymarket prices after a market closed? Filter by tagId/tagSlug and a closedAfter / closedBefore window, or pass exact marketSlugs. Each row carries pricesBefore, priceFinal, priceMin and priceMax; set includeSeries: true for the full series.

Can I check whether Polymarket odds are calibrated? That is what the actor is built for: take pricesBefore["24h"] as the forecast and yesResolved as the outcome over a few thousand markets, then bucket by price.

Which tag ids are available? Any Gamma tag. Common ones are 84 (weather), 1 (sports), 2 (politics) and 21 (crypto); if you only know the name, put it in tagSlug and leave tagId empty.

Changelog

  • 0.1: initial release.

If this actor is useful, a review on its Apify Store page genuinely helps other buyers find it. Found a bug or need a field that is missing? Open a ticket on the Issues tab of the actor and it will be looked at.