Polymarket Prediction Markets & Odds Scraper
Pricing
from $9.60 / 1,000 results
Polymarket Prediction Markets & Odds Scraper
Scrape Polymarket prediction markets with live outcome odds, trading volume, liquidity, order book best bid and ask, price changes and resolution details. Filter by status, category or keyword. Export to JSON, CSV or Excel.
Pricing
from $9.60 / 1,000 results
Rating
5.0
(1)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
Polymarket Prediction Markets & Odds Scraper
Here is one real result, with every field the actor returns (long description trimmed for readability; the actor returns the full text):
{"id": "2063134","question": "Will Adanech Abiebie be the next Prime Minister of Ethiopia?","slug": "will-adanech-abiebie-be-the-next-prime-minister-of-ethiopia","url": "https://polymarket.com/event/next-prime-minister-of-ethiopia","category": "Next Prime Minister of Ethiopia?","eventSlug": "next-prime-minister-of-ethiopia","image": "https://polymarket-upload.s3.us-east-2.amazonaws.com/will-adanech-abiebie-be-the-next-prime-minister-of-ethiopia-7nUlSNmvB5IN.png","icon": "https://polymarket-upload.s3.us-east-2.amazonaws.com/will-adanech-abiebie-be-the-next-prime-minister-of-ethiopia-7nUlSNmvB5IN.png","outcomes": [{ "name": "Yes", "price": 0.004 },{ "name": "No", "price": 0.996 }],"volume": 76722451.09993298,"volume24hr": 678363.666,"volume1wk": 3758336.070359,"volume1mo": 38627759.277858,"volume1yr": 76722401.099933,"liquidity": 18399.85922,"openInterest": 33095.619180999995,"bestBid": 0.003,"bestAsk": 0.005,"spread": 0.002,"lastTradePrice": 0.003,"oneDayPriceChange": 0.001,"oneWeekPriceChange": 0.002,"oneMonthPriceChange": 0.0015,"competitive": 0.8025579125789717,"commentCount": 46,"active": true,"closed": false,"acceptingOrders": true,"featured": false,"isNew": false,"restricted": true,"enableOrderBook": true,"negRisk": true,"orderMinSize": 5,"orderPriceMinTickSize": 0.001,"umaBond": 500,"umaReward": 5,"createdAt": "2026-04-23T22:32:51.276002Z","startDate": "2026-04-27","endDate": "2026-06-01","resolutionSource": null,"resolvedBy": "0x69c47De9D4D3Dad79590d61b9e05918E03775f24","eventId": "411239","eventTicker": "next-prime-minister-of-ethiopia","eventTitle": "Next Prime Minister of Ethiopia?","conditionId": "0x7d0aaf81bbd3fd73b6a1651cce08a452c0cbf9c0cbb4520ce0f981065b639d88","clobTokenIds": ["27146956652877944551877724690365745048289675287536243265951843487691050802191","33216695217861742195941369663873573949679634432452142092545486849801915283392"],"description": "General elections are scheduled to be held in Ethiopia on June 1, 2026. This market will resolve to the next individual who officially assumes the office [trimmed]","updatedAt": "2026-08-10T14:15:59.743528Z","source": "Polymarket","observedAt": "2026-08-10T14:17:49.964Z"}
The most complete Polymarket scraper available. It returns every field a Polymarket market exposes, including the outcome prices (odds), full volume history, liquidity, open interest, order book bids and asks, price changes, UMA resolution details and CLOB token ids, and gives you status, sort, keyword and category filters to target exactly the markets you need.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor collects Polymarket prediction markets, applies the status, sort, keyword and category filters you pass, and writes one normalized record per market to the run's dataset. Each record includes the current outcome prices (the odds), the full volume breakdown (24 hours, week, month, year and total), liquidity, open interest, best bid and ask with spread, recent price changes, the market lifecycle dates, the on-chain condition id and CLOB token ids, and the UMA resolution parameters. Missing source values are returned as null, never invented.
Filter by status (active, closed, all), order by sortBy (volume, liquidity, newest, ending soon), and narrow with a searchQuery keyword or a category tagSlug.
Quickstart
Open the actor, paste this into the input, and press Run. It returns the 10 active markets with the highest trading volume.
{"maxMarkets": 10,"status": "active","sortBy": "volume"}
Add a searchQuery (for example bitcoin) or a tagSlug (for example politics) to narrow the results.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
maxMarkets | integer | no | 10 | Maximum number of markets to collect. |
status | enum | no | active | Which markets to return: active (open for trading), closed (resolved), or all. |
sortBy | enum | no | volume | Order the markets by volume, liquidity, newest, or endingSoon. |
searchQuery | string | no | (empty) | Keep only markets whose question or category contains this text, for example election, bitcoin, world cup. |
tagSlug | string | no | (empty) | Restrict to one Polymarket category by its tag slug, for example sports, politics, crypto. |
Filters combine with logical AND.
Output reference
One dataset item per market. Types: string, number, integer, boolean, object[], string[], or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
id | string | Market id (unique). |
question | string | The market question. |
slug | string | Market slug. |
url | string | Market URL on Polymarket. |
category | string | Category or event title. |
eventSlug | string | Slug of the parent event. |
image | string | Market image URL. |
icon | string | Market icon URL. |
outcomes | object[] | Outcomes with name and price (the odds, 0 to 1). |
volume | number | Total traded volume. |
volume24hr | number | Volume in the last 24 hours. |
volume1wk | number | Volume in the last week. |
volume1mo | number | Volume in the last month. |
volume1yr | number | Volume in the last year. |
liquidity | number | Current liquidity. |
openInterest | number | Open interest. |
bestBid | number | Best bid price. |
bestAsk | number | Best ask price. |
spread | number | Bid/ask spread. |
lastTradePrice | number | Price of the last trade. |
oneDayPriceChange | number | Price change over one day. |
oneWeekPriceChange | number | Price change over one week. |
oneMonthPriceChange | number | Price change over one month. |
competitive | number | Polymarket competitiveness score. |
commentCount | integer | Number of comments. |
active | boolean | true when the market is active. |
closed | boolean | true when the market is resolved. |
acceptingOrders | boolean | true when the market accepts orders. |
featured | boolean | true when featured. |
isNew | boolean | true when flagged as new. |
restricted | boolean | true when trading is geo-restricted. |
enableOrderBook | boolean | true when the order book is enabled. |
negRisk | boolean | true when part of a negative-risk market group. |
orderMinSize | number | Minimum order size. |
orderPriceMinTickSize | number | Minimum price tick. |
umaBond | number | UMA dispute bond. |
umaReward | number | UMA resolution reward. |
createdAt | string | Market creation timestamp (ISO 8601). |
startDate | string | Market start date. |
endDate | string | Market end date. |
resolutionSource | string | Named resolution source, or null. |
resolvedBy | string | Resolver address. |
eventId | string | Parent event id. |
eventTicker | string | Parent event ticker. |
eventTitle | string | Parent event title. |
conditionId | string | On-chain condition id. |
clobTokenIds | string[] | CLOB token ids for the outcomes. |
description | string | Full market description and resolution criteria. |
updatedAt | string | Last update timestamp (ISO 8601). |
source | string | Always Polymarket. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
Example output record
Real record from a live run (input {"status": "active", "sortBy": "volume", "maxMarkets": 10}):
{"id": "703258","question": "Will Jesus Christ return before 2027?","slug": "will-jesus-christ-return-before-2027","url": "https://polymarket.com/event/will-jesus-christ-return-before-2027","category": "Will Jesus Christ return before 2027?","eventSlug": "will-jesus-christ-return-before-2027","outcomes": [{ "name": "Yes", "price": 0.0195 },{ "name": "No", "price": 0.9805 }],"volume": 64984006.03862794,"volume24hr": 11954.810526000001,"liquidity": 801916.29596,"bestBid": 0.019,"bestAsk": 0.02,"spread": 0.001,"lastTradePrice": 0.02,"commentCount": 1,"active": true,"closed": false,"startDate": "2025-11-25","endDate": "2026-12-31","eventId": "90178","conditionId": "0x0b4cc3b739e1dfe5d73274740e7308b6fb389c5af040c3a174923d928d134bee","source": "Polymarket","observedAt": "2026-08-10T14:17:49.964Z"}
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~polymarket-markets-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"status":"active","sortBy":"volume","maxMarkets":25}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~polymarket-markets-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"searchQuery":"bitcoin","status":"all","maxMarkets":100}'
Apify CLI:
apify call scrapers_lat/polymarket-markets-scraper \--input '{"tagSlug":"politics","sortBy":"endingSoon"}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per market returned (
resultevent). See the pricing tab for the current per-result price. - No charge on failure. If a run errors, the actor does not charge for failed work. Empty runs cost nothing.
- Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 markets per run. Upgrade for higher
maxMarkets.
FAQ and troubleshooting
A run returned 0 records. Why?
The keyword or tag slug matched nothing, or a closed-only filter with no matching markets. Loosen searchQuery, clear tagSlug, or set status to all. Zero-result runs are not charged.
What do the outcome prices mean?
Each outcomes price is the market-implied probability of that outcome, from 0 to 1. A Yes price of 0.02 means the market prices that outcome at about 2 percent.
How do I get resolved markets?
Set status to closed (only resolved markets) or all (both open and resolved).
Can I focus on one topic?
Yes. Use searchQuery for a keyword across question and category, or tagSlug to restrict to one Polymarket category such as sports or crypto.
Why is resolutionSource null?
Many markets resolve via UMA rather than a named source, so the field is null. The resolvedBy address and UMA parameters are still returned. Missing source values are returned as null, never invented.
Is this an official Polymarket tool? No. This actor is independent and has no affiliation with Polymarket. It reads only data that is publicly available on Polymarket.
Related scrapers
- Kalshi Markets Scraper: Kalshi prediction markets and prices.
- CoinGecko Crypto Scraper: crypto prices and market data.
- DefiLlama Protocols Scraper: DeFi protocol TVL and metrics.
- DexScreener Pairs Scraper: on-chain trading pairs.
- DAO Governance Scraper: DAO proposals and votes.
- Farcaster Casts Scraper: Farcaster social posts.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with Polymarket. Accesses only publicly available market data.
