Polymarket Markets & Events Scraper
Pricing
from $0.60 / 1,000 item processeds
Polymarket Markets & Events Scraper
Export public Polymarket markets, outcome prices, volume, liquidity, tags, and event context. Filter records and download CSV, Excel, or JSON, or use the API.
Pricing
from $0.60 / 1,000 item processeds
Rating
0.0
(0)
Developer
Hanna Nosova
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
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.
Output fields
| JSON key | Type | Meaning |
|---|---|---|
marketId | string | Public market identifier. |
conditionId | string / null | Market condition identifier when supplied. |
question | string | Public market question or title. |
slug | string / null | Human-readable market identifier when supplied. |
url | string / null | Public market URL assembled from event and market slugs. |
eventId | string / null | Identifier of the first associated event, when available. |
eventTitle | string / null | Title of the first associated event, when available. |
eventSlug | string / null | Slug of the first associated event, when available. |
active | boolean / null | Source active flag; null means unavailable. |
closed | boolean / null | Source closed flag; null means unavailable. |
status | string | Derived status: closed, active, archived, or inactive. |
outcomes | array | Outcomes aligned with their quoted prices and token identifiers. |
outcomePrices | array | Quoted prices in source outcome order. |
bestOutcome | string / null | Name of the highest-priced available outcome; not a trading recommendation. |
volume | number / null | Market volume reported by the source, not computed by this Actor. |
volume24hr | number / null | Trailing-24-hour volume when supplied by the source. |
liquidity | number / null | Market liquidity reported by the source. |
startDate | string / null | Source start date when available. |
endDate | string / null | Source closing date when available; not a guaranteed resolution date. |
category | string / null | Market category or first-event category when supplied. |
tags | array | Distinct tags from the market and its associated events. |
clobTokenIds | array | Public CLOB token identifiers in source order. |
description | string / null | Public market description when available. |
resolutionSource | string / null | Public resolution-source text when supplied. |
fetchedAt | string | UTC timestamp when this market record was collected. |
source | string | Public data-source URL. |
raw | object | Unmodified source market object; included only when includeRaw is true. |
Pricing
The start event is charged when the run begins. The item event is charged per saved market record. A run with no matching markets can still incur its start charge. The run summary is not a market result.
See the live Pricing tab for current rates and discounts. Check the cost shown for your account before scaling a run; any applicable platform usage is shown by Apify separately.
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 jsonimport osfrom apify_client import ApifyClientclient = 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.
FAQ
Does it return live trading signals?
No. It returns public market records observed during collection. Quoted prices are not guarantees or recommendations.
Why did my query return no markets?
It may have no match inside the bounded collected sample. Test without text/category filters and inspect RUN-SUMMARY; do not interpret an empty dataset as proof that the market does not exist.
Does it require a Polymarket account?
No Polymarket login or wallet is used for this public-data export. Calling the Actor through Apify API still requires your Apify token.
Can I export to CSV or call an API?
Yes. Use the dataset export controls or Apify Dataset API. JSON retains nested outcomes; choose and flatten fields as needed for a spreadsheet.
Related Actors
- CoinMarketCap Crypto Prices Scraper
- Google Trends Scraper
- Google News Scraper
- Reddit Scraper
- X / Twitter Posts Scraper
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.