Polymarket Markets & Odds Scraper
Pricing
Pay per event
Polymarket Markets & Odds Scraper
Polymarket markets scraper for prediction-market research. Export market questions, outcomes, prices, volume and liquidity as JSON, with optional order books, price history and recent trades.
Polymarket scraper returns public market questions, outcomes, prices, volume, and liquidity. Polymarket API queries can also return order books, price history, and recent trades when requested.
Input example
{"searchQueries": ["bitcoin"],"maxItems": 20}
The input keys and allowed values follow .actor/input_schema.json.
Output fields
| Field | Type | Example or excerpt from sample |
|---|---|---|
record_type | string | "market" |
market_id | string | "601819" |
condition_id | string | "0xdf8e2dc5860027decbe6164555c3c1c9645c3bd33e16b9dc57ca87125047d4a8" |
slug | string | "will-luiz-incio-lula-da-silva-win-the-2026-brazilian-presidential-election" |
url | string | "https://polymarket.com/event/brazil-presidential-election/will-luiz-incio-lula-da-si… |
question | string | "Will Luiz Inácio Lula da Silva win the 2026 Brazilian presidential election?" |
group_item_title | string | "Luiz Inácio Lula da Silva" |
event_id | string | "45915" |
event_slug | string | "brazil-presidential-election" |
event_title | string | "Brazil Presidential Election" |
tags | array | ["Politics", "Macro Election 2", "Main Election", "Global Elections", "Brazil", "Worl… |
description | string | "A presidential election is scheduled to take place in Brazil on October 4, 2026.\n\n… |
resolution_source | string or null | null |
outcomes | array | ["Yes", "No"] |
outcome_prices | array | [0.165, 0.835] |
token_ids | array | ["30630994248667897740988010928640156931882346081873066002335460180076741328029", "79… |
yes_probability | number | 0.165 |
no_probability | number | 0.835 |
last_trade_price | number | 0.17 |
best_bid | number | 0.16 |
best_ask | number | 0.17 |
spread | number | 0.01 |
price_change_1h | number or null | -0.01 |
price_change_1d | number | -0.2 |
price_change_1w | number | -0.26 |
volume_total_usd | number | 16965396.630232994 |
volume_24h_usd | number | 2247216.9937190013 |
volume_1w_usd | number | 4542325.957223994 |
liquidity_usd | number | 895451.8545 |
start_date | string | "2025-09-18T20:07:59Z" |
end_date | string | "2026-10-05T03:59:00Z" |
created_at | string | "2025-09-17T18:40:08Z" |
updated_at | string | "2026-10-05T10:57:06Z" |
closed_at | string or null | null |
active | boolean | true |
closed | boolean | false |
accepting_orders | boolean | true |
resolution_status | string or null | null |
resolved | boolean | false |
winning_outcome | string or null | null |
neg_risk | boolean | true |
tick_size | number | 0.01 |
min_order_size | number | 5.0 |
image | string | "https://polymarket-upload.s3.us-east-2.amazonaws.com/will-luiz-incio-lula-da-silva-w… |
order_book | array | [{"outcome": "Yes", "token_id": "3063099424866789774098801092864015693188234608187306… |
source | string | "detail" |
query | string or null | null |
scraped_at | string | "2026-10-05T11:02:18Z" |
outcome | string | "Yes" |
token_id | string | "12403602920039269077597917340921667997547115084613238528792639013246536343316" |
timestamp | string | "2026-10-04T12:00:28Z" |
price | number | 0.9595 |
side | string | "BUY" |
size | number | 5.68 |
usd_value | number | 5.4528 |
transaction_hash | string | "0x0fb03f4acb1095187270f5f12d962fdabcf5e265dceb7b2f337890daf3c80530" |
Output example
Trimmed from sample_output.json; omitted fields remain available in the dataset.
{"record_type": "market","market_id": "601819","condition_id": "0xdf8e2dc5860027decbe6164555c3c1c9645c3bd33e16b9dc57ca87125047d4a8","slug": "will-luiz-incio-lula-da-silva-win-the-2026-brazilian-presidential-election","url": "https://polymarket.com/event/brazil-presidential-election/will-luiz-incio-lula-da-silva-win-the-2026-brazilian-presidential-election","question": "Will Luiz Inácio Lula da Silva win the 2026 Brazilian presidential election?","group_item_title": "Luiz Inácio Lula da Silva"}
Limits
- Data is whatever Polymarket's public APIs return at run time; prices move constantly.
scraped_atmarks the fetch. best_bid,best_ask,spreadcome from Polymarket's market data and describe the first outcome (usually Yes). Use "Include order book" for both outcomes.- Keyword search returns Polymarket's relevance order;
sortByapplies to category and browse modes. With several keywords and a smallmaxItems, whichever keyword is read first can fill the cap. - Price history for a very long window with a very fine resolution can come back thin or be rejected by Polymarket; use
historyFidelity1440 withmax. - Trades are the most recent ones the public data API serves; it is not a full archive.
- Polymarket rate-limits heavy callers; the actor retries with backoff on 429/5xx. Keep
maxConcurrencylow for very large runs. - Not for trading. No orders, wallets or keys are used. This is not financial advice.
FAQ
What are the output limits? maxItems caps emitted rows; history and trades can consume that cap. Public trade history is not a complete archive.
Do I need a proxy or login? Public read endpoints need no login, wallet, or proxy.
How is this priced? Proposed pay per event: $0.0012 per market row, $0.008 per block of 100 history-point rows per outcome series, and $0.0005 per trade row. Error rows are uncharged. These are proposals in PRICING.md; the owner must configure Store billing.
How are rate limits handled? The client limits work with maxConcurrency and backs off on HTTP 429 and server errors.
How fresh is the data? Market prices and availability can change between requests. scraped_at marks collection time. These are public market data, not trading instructions or financial advice.
Use with AI agents / MCP
After the actor is published, connect your agent to the Apify MCP server with an Apify API token. Use call-actor with the published actor identifier and the JSON input shown above. Read the returned dataset with get-dataset-items; the run response itself contains status and storage IDs, not the result rows. Alternatively, use the Apify API to start a run and read its default dataset. Keep the actor input bounded with maxItems, and inspect source links and any error fields before using results in an answer.