Export public Polymarket markets and event context as structured JSON, CSV, or Excel. Collect questions, outcome prices, volume, liquidity, dates, categories, and tags for research or a downstream data pipeline.
This is a snapshot exporter, not a trading bot, price-history service, or recommendation engine. One dataset row represents one market; event fields describe its first associated event.
Input recipes
Start with a small unfiltered sample. Paste this JSON into the Actor input, run it, then open the dataset to inspect and export the results.
{
"status": "active",
"maxItems": 10,
"sortBy": "volume",
"includeRaw": false
}
Example output
Illustrative, shortened record—not live market data. Actual records include all fields listed below.
{
"marketId": "example-market",
"question": "Example market question?",
"status": "active",
"outcomes": [
{
"name": "Yes",
"price": 0.6,
"tokenId": null
},
{
"name": "No",
"price": 0.4,
"tokenId": null
}
],
"bestOutcome": "Yes",
"volume": 12500,
"liquidity": 3500,
"eventTitle": "Example event",
"category": null,
"tags": [],
"fetchedAt": "2026-08-31T00:00:00.000Z"
}
What data does it export?
- Market identifiers, question, description, public URL, and status.
- Outcome names, quoted prices, and public token identifiers.
- Volume, 24-hour volume, and liquidity when supplied.
- Associated event context, dates, categories, tags, and resolution-source text.
Who is it for?
- Researchers: build market snapshots for comparative analysis.
- Data teams: load public market records into spreadsheets or databases.
- Monitoring workflows: schedule repeated snapshots and compare records by
marketIddownstream. - AI-assisted research: retrieve source-linked records without treating market prices as established facts.
Input settings
| Setting | JSON key | Type / default | What it does |
|---|---|---|---|
| Search query | query |
string / not set | Optional text to match in market question, slug, description, or event title. |
| Market status | status |
string / "active" |
Which markets to fetch. Values: active, closed, all. |
| Maximum markets | maxItems |
integer / 25 |
Maximum number of market records to save. Minimum 1; maximum 10000. |
| Sort by | sortBy |
string / "volume" |
Sort the collected sample, not the full Polymarket catalog: volume, liquidity, newest, or closingSoon. Values: volume, liquidity, newest, closingSoon. |
| Category or tag | categoryOrTag |
string / not set | Optional category/tag filter. |
| Minimum volume | minVolume |
number / not set | Only keep markets with at least this volume. Minimum 0. |
| Minimum liquidity | minLiquidity |
number / not set | Only keep markets with at least this liquidity. Minimum 0. |
| Include raw API response | includeRaw |
boolean / false |
Include the raw Polymarket API object on each dataset item. |
Filtering and coverage limits
query is a case-insensitive text match over the collected market question, slug, description, and event context. categoryOrTag matches category, tags, and event title/slug; it is not an exact category-ID selector.
sortBy orders the collected sample after filtering. It does not guarantee the highest-volume or soonest-closing markets across all of Polymarket. The current collection is bounded to 2,500 source records per open/closed group, so restrictive filters or a large maxItems can return fewer matches than requested. With status: "all", open markets are considered before closed markets; a small limit can fill before closed markets are reached.
Missing numeric and optional text values are null; missing arrays are empty. bestOutcome only names the outcome with the highest available quoted price. This Actor does not provide historical odds, order books, wallet positions, trade execution, or predictions. Public source availability and field values can change.
Tips and run summary
Start with maxItems: 10 and no text filter. Add one filter at a time after inspecting the returned data. A zero-result run can be valid: remove restrictive filters and inspect the RUN-SUMMARY key-value record for the saved count, pages checked, and applied input.
For monitoring, schedule the same input and store dated snapshots externally; the Actor does not calculate changes between runs. Use only public data you are permitted to process. This tool is not affiliated with Polymarket.
API usage
Use your Apify API token through the APIFY_TOKEN environment variable. Node.js and Python examples wait for the run and read its first dataset page; paginate the dataset for larger exports.
Node.js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/polymarket-markets-events-scraper').call({
"status": "active",
"maxItems": 10,
"sortBy": "volume",
"includeRaw": false
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
Python
import json
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run_input = json.loads('''{
"status": "active",
"maxItems": 10,
"sortBy": "volume",
"includeRaw": false
}''')
run = client.actor("fetch_cat/polymarket-markets-events-scraper").call(run_input=run_input)
print(client.dataset(run["defaultDatasetId"]).list_items().items)
cURL
Save the quickstart JSON as input.json. This request starts a run asynchronously; use its returned run ID to check completion and its defaultDatasetId to retrieve results.
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~polymarket-markets-events-scraper/runs" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
--data-binary @input.json
MCP and AI agents
Use the official Apify MCP server, not a separate custom server. The focused URL below selects this Actor. Authenticate with Apify when your client prompts you; configuration syntax and OAuth support depend on the client.
Claude Code
claude mcp add --transport http apify "https://mcp.apify.com?tools=fetch_cat/polymarket-markets-events-scraper"
HTTP-capable MCP client configuration
{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=fetch_cat/polymarket-markets-events-scraper"
}
}
}
Example prompt: "Export up to 10 active Polymarket markets. Show their questions, outcome prices, volume, liquidity, and source URLs; label missing values and do not treat prices as predictions."
Use the same input keys as the input table. Review the returned source URLs and any error or availability fields before using results in an automated summary.
Support
If a run fails or output looks wrong, open an issue from the Actor page. Include the Apify run ID or run URL, non-sensitive input JSON, expected output, actual output, and one reproducible public URL (or the exact search input). Do not share tokens, cookies, passwords, or private data.