Polymarket markets and price history
Pricing
from $10.00 / 1,000 market histories
Polymarket markets and price history
Export Polymarket market metadata, confirmed winners and both token price histories with resumable pagination. Filter by category, date range, tags and resolved-only.
Pricing
from $10.00 / 1,000 market histories
Rating
0.0
(0)
Developer
Om Ray
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Polymarket market history and prices
If you're studying a prediction market, the winner alone doesn't tell you much, and you'll want to see how the price moved before it resolved. This actor exports market details together with confirmed winners and historical prices for both outcome tokens, so you can compare how prices changed with what eventually happened. You can filter the markets before exporting and resume a larger collection from a saved cursor instead of starting again.
A closed market doesn't always have a confirmed result. The actor checks CLOB winner flags and falls back to Gamma only when Gamma reports a resolved market with exact 0 and 1 outcome prices. It won't treat a 99-cent quote as proof of a winner, and it leaves sparse or empty price histories visible rather than filling the gaps. Past performance is not a prediction or a recommendation to trade.
Run the actor
Set the filters in the actor's input to choose the markets you want. The example below requests three confirmed resolutions whose scheduled end dates fall on October 25 or 26, 2026. These dates filter scheduled market endings, not the actual resolution time or the price-history window.
{"startDate": "2026-10-25T00:00:00Z","endDate": "2026-10-26T23:59:59Z","resolvedOnly": true,"fidelityMinutes": 60,"maxMarkets": 3,"maxPages": 10}
For a local run, install the repository dependencies with npm ci at the root, then run the commands below. You don't need an Apify login or a Polymarket API key. Dataset rows go into storage/datasets/default/, and the coverage totals and next cursor appear in storage/key_value_stores/default/OUTPUT.json.
cd actors/polymarket-markets-historynpx apify run --input-file examples/input.json
Choose markets and a history window
The category filter matches an explicit category or a tag ID, label or slug, without regard to case. If you supply tags, every tag must match information in Gamma's market or embedded event records. Missing tags don't match, and the actor doesn't guess a category from the question's wording. Set resolvedOnly to exclude markets without a confirmed winner.
The startDate and endDate filters apply to the market's scheduled endDate. A date without a time means midnight UTC, so include an end-of-day timestamp when you want the full final day. These filters don't trim the token price histories returned for each matching market.
Use fidelityMinutes to request price samples at intervals between 1 and 1,440 minutes. The API may return gaps, so the requested spacing doesn't guarantee a point at every interval. Omit historyStart and historyEnd to request the full history CLOB currently exposes, or set both for a window of up to 366 days. Explicit windows are fetched in seven-day sections.
Read the export
Each row contains the market question and description together with its IDs, dates, tags, volume and liquidity. The resolution field records the winner evidence, and tokens contains each outcome's tokenId and price history with Unix-second timestamps. IDs remain strings so large token IDs aren't rounded. Each token's coverage includes source URLs, point counts, request errors and the actual first and last timestamps returned.
A recorded request for market 601818 on October 27, 2026 returned a confirmed No winner and 188 hourly points for each token. You can inspect the full records in the repository's sample outputs. Other markets can have much less history, so treat that as one example.
Resume a larger export
maxMarkets limits exported rows, while maxPages limits Gamma requests, including pages with no matching markets. Both default to 100, and collection uses /markets/keyset instead of Gamma's offset pagination. The actor scans closed markets first and then open markets, so a small export may contain only closed markets. With resolvedOnly enabled, it scans only the closed phase and checks each market's winner evidence.
Copy OUTPUT.resumeCursor into the next run's resumeCursor input to continue. Keep the category, tags, date filters, history window, resolution filter and fidelity unchanged because a cursor with different filters is rejected. You can change maxMarkets, maxPages or pageSize between runs. The saved cursor includes the phase and keyset position, nextPhase tells you which phase will continue, and exhausted is true only when every requested phase has ended.
The actor shrinks each page to fit the rows or billing budget you have left, so a run that stops normally at its limit doesn't skip the rest of a source page. CHECKPOINT saves the last completed page, but an interruption or billing stop inside a page can cause that page to replay on resume. Rows already exported can then be charged again, and deduplicating by marketId removes duplicate data without refunding those charges. Source records can also change between runs because the API isn't a frozen snapshot.
Limits and charges
Public price history has retention limits and gaps, and an empty history doesn't prove that a market never traded. A failed history request stays in coverage.errors while other tokens and markets can still be exported. Resolution lookup errors remain visible in each row; with resolvedOnly, markets without sufficient winner evidence are skipped and counted in unresolvedSkipped. The 10,000-offset cap on the wallet trade feed doesn't apply here, because this actor reads market price samples rather than wallet trades.
Each market-history event pays for one exported market row and its token histories, including any empty or partial histories reported in that row. The actor stops when its event budget is spent, and paid runs reject a missing event price or a positive automatic dataset-item price that would charge twice. Running it locally costs nothing on Apify. The repository's PUBLISH.md records the pricing and Console setup.
The HTTP client makes sequential requests with a browser User-Agent, stores no cookies and retries transient failures up to three times. A narrow filter can still take a while, because the actor has to check every nonmatching market along the way, so use date filters and resume cursors for larger exports. Run npm test from the repository root to check winner evidence, history windows, filter behavior and billing stops, including pagination across repeated runs.