Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 

Repository files navigation

Polymarket Scraper

Extract structured data from polymarket.com — polymarket.com prediction markets as structured JSON. Every row carries the question with its outcomes and live prices, the volume and liquidity behind them, plus tags and resolution dates. Filter before the run costs anything. Order book and trades on request.

Polymarket Scraper on Apify →


🚀 How to use this actor

💚 $5 free Apify credits — every month

No credit card required. No commitment. Cancel anytime.

  1. Click sign up — pick GitHub, Google, or email; takes ~30 seconds
  2. Open this actor — input is pre-filled with a working example
  3. Click Start — export results as JSON, CSV, or Excel

Your $5 monthly platform credit is enough to run this actor right away — and again every month — scraping typically several hundred to several thousand results per run, depending on your input.

Key features

Search with filters — Search by keyword. Filter by 📊 market status, ⏱️ price history window, description format, and more.

Multiple input modes — markets or wallet positions & pnl or wallet p&l analysis (win rate, realised profit). Switch modes without re-scraping.

Incremental mode — Only get new or changed listings since your last run. Content hash per listing — no duplicates, no re-processing.

Change classification — Track unchanged, expired, cross-run duplicate detection across runs. Build audit trails of how listings evolve over time.

Compact output — Emit core fields only (AI-agent / MCP-friendly). Keeps response size small for LLM workflows.

Description truncation — Cap description length per ${NOUN} to control output size and cost.

Result cap — Stop after N listings (up to 250.000). Set to 0 for the full catalog.

Export anywhere — Download as JSON, CSV, or Excel. Stream via Apify API, webhooks, or integrations with Make, Zapier, Airbyte, Keboola.

Structured data — Every listing returns the same schema with consistent field naming. All fields always present — null when unavailable, never omitted.


Use cases

Data pipeline automation Integrate with your ETL pipeline to collect structured listings from polymarket.com on a schedule. Export to CSV, JSON, or directly to your database. Use compact mode to control output size.

Market research Monitor listings, track trends, and analyze market dynamics with structured, deduplicated data from polymarket.com.

Change monitoring Run daily or hourly in incremental mode to capture only new, updated, or expired ${NOUNS}. Perfect for price-tracking, churn analysis, and alerting pipelines.

AI / LLM training data Structured JSON per listing is ready for RAG pipelines, embeddings, and agent workflows. Compact mode trims tokens for LLM context windows.


Quick start

{
  "query": "election",
  "status": "open",
  "minVolume24h": 1000,
  "maxResults": 50,
  "compact": false,
  "excludeEmptyFields": false,
  "incrementalMode": false,
  "notificationLimit": 5,
  "notifyOnlyChanges": false,
  "descriptionFormat": "all",
  "emitUnchanged": false,
  "emitExpired": false,
  "skipReposts": false
}

Input parameters

Parameter Type Default Description
query string — What the markets should be about — e.g. "election", "bitcoin", "fed rate cut". Paste a JSON array like ["election","bitcoin"] to run several searches in one go.
mode enum "markets" Markets searches the Polymarket catalogue. Wallet positions reports what each wallet below holds — every position with its size, entry price, current value and profit, both realised and unrealised. Wallet P&L analysis rebuilds each wallet's trading record over the window below: realised profit, win rate, entry prices and every market it traded, one summary row per wallet plus one row per market. Market filters and depth options apply to market searches only.
walletAddresses array — Polymarket wallet addresses (0x followed by 40 hex characters), one per line. Used when What to collect is Wallet positions or Wallet P&L analysis. Every position each wallet holds is returned, including very small ones.
pnlWindowDays integer 30 How many days of trading the Wallet P&L analysis covers, counted back from now. Positions opened before the window are still priced on their full history. Used only with Wallet P&L analysis.
status enum "any" Return only open markets (still trading), only closed ones (settled), or both. Default: both.
tagIds array [] Only markets carrying at least one of these Polymarket tag IDs. Several IDs widen the result (any match), they do not narrow it. Tag IDs appear on every row under "tags".
marketSlugs array [] Fetch exactly these markets by slug, e.g. "xi-jinping-out-before-2027". Exact match.
conditionIds array [] Fetch exactly these markets by on-chain condition ID (0x...). Exact match.
minTotalVolume integer — Skip markets that have traded less than this in total. Leave empty for no floor.
minVolume24h integer — Skip markets that traded less than this in the last 24 hours — the usual way to cut dormant markets.
minLiquidity integer — Skip thin markets with less resting liquidity than this.
endDateMin string — Only markets resolving on or after this date (YYYY-MM-DD).
endDateMax string — Only markets resolving on or before this date (YYYY-MM-DD).
includeOrderBook boolean false Add the live resting order book for every outcome — bids, asks, best prices, spread and the USD resting on each side. Cheap: the whole page is fetched in one batched request.
orderBookDepth integer 10 How many price levels per side to keep. Best-priced first. The USD depth totals always describe the FULL book, not this slice.
includeRecentTrades boolean false Add the most recent trades on each market — wallet, side, size, price and time. Costs one extra request per market.
recentTradesLimit integer 20 How many recent trades to return per market.
includeTopHolders boolean false Add the largest positions in each market — wallet, display name, which outcome they are on, and size. Costs one extra request per market.
topHoldersLimit integer 10 How many of the largest holders to return per market, counted across both outcomes.
includePriceHistory boolean false Add a price series per outcome. This is the most expensive switch: one request per outcome, so a two-outcome market costs two extra requests.
priceHistoryInterval enum "1w" How far back the price series reaches. Hourly points.
includeRawData boolean false Attach the untouched source record to every row. Useful when you want a field this actor does not map yet. It roughly doubles the row size.
maxResults integer 100 Maximum number of markets to return. 0 means every market that matches — about 190,000 open markets, or roughly 490,000 including settled ones. A run also stops at your own cost limit and tells you, so narrow with the filters below and let incremental mode pick up the rest.
descriptionMaxLength integer 0 Truncate the market's resolution rules to N chars. 0 = no truncation.
compact boolean false Core market fields only — question, prices, volume, status (for AI-agent/MCP workflows).
incrementalMode boolean false Compare against previous run state. stateKey is optional — defaults to a value derived from search inputs so different searches never share state.
stateKey string — Optional. Stable identifier for the tracked set of markets. Leave empty to auto-generate from search inputs.
skipReposts boolean false When incremental, skip markets whose content matches an expired market from a prior run (cross-run duplicate detection).
telegramToken string — Telegram bot token (from @BotFather). Required for Telegram notifications.
telegramChatId string — Telegram chat or channel ID (e.g. "-100123456789"). Required when telegramToken is set.
discordWebhookUrl string — Discord incoming webhook URL. Server Settings → Integrations → Webhooks → New Webhook.
slackWebhookUrl string — Slack incoming webhook URL. api.slack.com/messaging/webhooks.
notificationLimit integer 5 Maximum number of markets included in each notification message (1–20).
notifyOnlyChanges boolean false When Incremental Mode is on, only send notifications for NEW and UPDATED markets. Has no effect outside incremental mode.
whatsappAccessToken string — WhatsApp Cloud API permanent access token (System User token from Meta Business). Recipient must have messaged the business number within the last 24h (service-conversation window — free since Nov 2024).
whatsappPhoneNumberId string — Your WhatsApp Business phone-number ID (numeric, from Meta dashboard). Required when whatsappAccessToken is set.
whatsappTo string — Recipient phone in E.164 format without + (e.g. "436641234567"). Recipient must have messaged your business number within last 24h.
webhookUrl string — Receives a JSON POST with {metadata, items} after each run. Universal escape hatch for n8n / Make / Zapier / custom backends.
webhookHeaders object — Optional JSON object of custom headers (e.g. {"Authorization":"Bearer ..."}).
appConnector string — Optional. Pick a connected app under Settings → API & Integrations to receive your results. Best-effort across MCP connectors as Apify expands its catalog.
mcpIssueTeam string — Only when the connected app is an issue tracker: the team (name or ID) the summary issue is created under, if that app requires one.
descriptionFormat enum "all" Pick a single description representation. Polymarket serves plain-text resolution rules, so all and text are equivalent here.
excludeEmptyFields boolean false Drop null, empty-string, and empty-array fields from each record before push. Smaller payloads for AI agents and dashboards.
emitUnchanged boolean false When incremental mode is on, also emit markets whose tracked content has not changed since the last run.
emitExpired boolean false When incremental mode is on, also emit markets that were seen before but are no longer found.

Output fields

Every listing returns the same 65-field schema. Missing values are null — never omitted.

  • marketId
  • conditionId
  • questionId
  • slug
  • url
  • portalUrl
  • question
  • title
  • description
  • resolutionSource
  • image
  • icon
  • active
  • closed
  • archived
  • acceptingOrders
  • featured
  • restricted
  • funded
  • enableOrderBook
  • negRisk
  • startDate
  • endDate
  • createdAt
  • updatedAt
  • volume
  • volume24hr
  • volume1wk
  • volume1mo
  • volume1yr
  • liquidity
  • bestBid
  • bestAsk
  • lastTradePrice
  • spread
  • oneDayPriceChange
  • oneWeekPriceChange
  • competitive
  • orderPriceMinTickSize
  • orderMinSize
  • outcomes
  • outcomePrices
  • clobTokenIds
  • outcomeDetails
  • ticker
  • eventId
  • eventSlug
  • eventTitle
  • openInterest
  • commentCount
  • events
  • raw
  • tags
  • orderBooks
  • priceHistory
  • recentTrades
  • sourceApiUrl
  • listingId
  • searchQuery
  • contentQuality
  • detailFetched
  • scrapedAt
  • source
  • contentHash
  • changeType

Sample output

One object per listing. Here is a real example from a production run:

{
  "marketId": "2491900",
  "conditionId": "0x476ed5ed3b72d010a060063964553f4f8bcbd525a7751da7117448638b941f85",
  "questionId": "0x5575d258374e9f58857347c89999a4b6ab6527e6f49ad09a66aba0686d8ce300",
  "slug": "will-trump-endorse-likud-in-the-2026-israeli-election-20260608183908858",
  "url": "https://polymarket.com/event/which-party-will-trump-endorse-in-the-2026-israeli-election-20260610144125261/will-trump-endorse-likud-in-the-2026-israeli-election-20260608183908858",
  "portalUrl": "https://polymarket.com/event/which-party-will-trump-endorse-in-the-2026-israeli-election-20260610144125261/will-trump-endorse-likud-in-the-2026-israeli-election-20260608183908858",
  "question": "Will Trump endorse Likud in the 2026 Israeli Election?",
  "title": "Will Trump endorse Likud in the 2026 Israeli Election?",
  "description": "Legislative elections are scheduled to be held in Israel by October 27, 2026.\n\nThis market will resolve based on which party Donald Trump announces that he supports, endorses, or o…",
  "resolutionSource": null,
  "image": "https://polymarket-upload.s3.us-east-2.amazonaws.com/who-will-trump-endorse-in-the-2026-israeli-election-20260608183907960-QeXr8ObEt0Rg.jpg",
  "icon": "https://polymarket-upload.s3.us-east-2.amazonaws.com/who-will-trump-endorse-in-the-2026-israeli-election-20260608183907960-QeXr8ObEt0Rg.jpg"
}

Truncated — full records contain 65 fields. See Output fields for the complete schema.

Try Polymarket Scraper now — $5 free credit, no credit card →


Pricing

Pay only for what you extract. No subscription required — Apify's free $5 credit covers thousands of results.

Event Price (USD)
Actor Start $0.0005
Result $0.0025

See the actor on Apify for current pricing.


FAQ

How do I scrape polymarket.com? Use this actor on Apify to extract structured data from polymarket.com. Configure your search query and filters in the input, then click Start — no coding required.

How do I get polymarket.com data as JSON, CSV, or Excel? The actor writes each listing to Apify's dataset. Download as JSON, CSV, or Excel from the Console, stream via the API, or push to Make, Zapier, Airbyte, or Keboola.

Is it legal to scrape polymarket.com? Web scraping of publicly available data is generally legal. This actor only accesses publicly visible information. Always check polymarket.com's terms of service for your specific use case.

How much does it cost? Pay-per-event pricing — you only pay for ${NOUNS} extracted. Apify's free $5 credit is enough to run thousands of results before you pay anything.

How does incremental mode work? Each listing gets a content hash. On subsequent runs, only new or changed listings are emitted — saving time, compute, and storage. Expired listings can be tracked separately.

Do I need an API key or credentials? No. Just sign up for Apify, paste your input, and click Start. No credit card required.


Related products by Black Falcon Data

Browse all Black Falcon Data actors →


Getting started with Apify

New to Apify? Create a free account with $5 credit — no credit card required.

  1. Sign up — $5 platform credit included
  2. Open Polymarket Scraper and configure your input
  3. Click Start — export results as JSON, CSV, or Excel

Need more later? See Apify pricing.


About Black Falcon Data

Black Falcon Data builds production-grade web scrapers for job boards and marketplace data. Browse our full actor catalog at www.blackfalcondata.com.


Last updated: 2026 09

About

Scrape polymarket.com prediction markets as structured JSON. Every row carries the question with its outcomes and live prices, the volume and liquidity behind them, plus tags and resolution dates. Filter before the run costs anything. Order book and trades on request.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors