Polymarket Markets & Events Scraper avatar

Polymarket Markets & Events Scraper

Pricing

from $0.60 / 1,000 item processeds

Go to Apify Store
Polymarket Markets & Events Scraper

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

Hanna Nosova

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

2 days ago

Last modified

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 marketId downstream.
  • AI-assisted research: retrieve source-linked records without treating market prices as established facts.

Input settings

SettingJSON keyType / defaultWhat it does
Search queryquerystring / not setOptional text to match in market question, slug, description, or event title.
Market statusstatusstring / "active"Which markets to fetch. Values: active, closed, all.
Maximum marketsmaxItemsinteger / 25Maximum number of market records to save. Minimum 1; maximum 10000.
Sort bysortBystring / "volume"Sort the collected sample, not the full Polymarket catalog: volume, liquidity, newest, or closingSoon. Values: volume, liquidity, newest, closingSoon.
Category or tagcategoryOrTagstring / not setOptional category/tag filter.
Minimum volumeminVolumenumber / not setOnly keep markets with at least this volume. Minimum 0.
Minimum liquidityminLiquiditynumber / not setOnly keep markets with at least this liquidity. Minimum 0.
Include raw API responseincludeRawboolean / falseInclude 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 keyTypeMeaning
marketIdstringPublic market identifier.
conditionIdstring / nullMarket condition identifier when supplied.
questionstringPublic market question or title.
slugstring / nullHuman-readable market identifier when supplied.
urlstring / nullPublic market URL assembled from event and market slugs.
eventIdstring / nullIdentifier of the first associated event, when available.
eventTitlestring / nullTitle of the first associated event, when available.
eventSlugstring / nullSlug of the first associated event, when available.
activeboolean / nullSource active flag; null means unavailable.
closedboolean / nullSource closed flag; null means unavailable.
statusstringDerived status: closed, active, archived, or inactive.
outcomesarrayOutcomes aligned with their quoted prices and token identifiers.
outcomePricesarrayQuoted prices in source outcome order.
bestOutcomestring / nullName of the highest-priced available outcome; not a trading recommendation.
volumenumber / nullMarket volume reported by the source, not computed by this Actor.
volume24hrnumber / nullTrailing-24-hour volume when supplied by the source.
liquiditynumber / nullMarket liquidity reported by the source.
startDatestring / nullSource start date when available.
endDatestring / nullSource closing date when available; not a guaranteed resolution date.
categorystring / nullMarket category or first-event category when supplied.
tagsarrayDistinct tags from the market and its associated events.
clobTokenIdsarrayPublic CLOB token identifiers in source order.
descriptionstring / nullPublic market description when available.
resolutionSourcestring / nullPublic resolution-source text when supplied.
fetchedAtstringUTC timestamp when this market record was collected.
sourcestringPublic data-source URL.
rawobjectUnmodified 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 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.

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.

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.