Polymarket Scraper - Events, Odds & Trading Data
Pricing
from $1.10 / 1,000 results
Polymarket Scraper - Events, Odds & Trading Data
Extract Polymarket events, market prices, volume, liquidity, public comments and trading activity. Pay per delivered row plus a start fee. Unofficial and not affiliated with Polymarket.
Pricing
from $1.10 / 1,000 results
Rating
0.0
(0)
Developer
kane liu
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
11 hours ago
Last modified
Categories
Features
Share
Export Polymarket events, prediction-market prices, trading activity and public comments as structured rows.
- Event questions, outcome prices, volume and liquidity.
- Tags, sports, series and teams for organizing research.
- Order-book snapshots, public wallet activity and resolution information.
- Public comments and published X handles where available.
- Pay $1.50 per 1,000 delivered rows on the Free plan, plus a start fee.
What does Polymarket Scraper do?
Polymarket Scraper collects public data from Polymarket for research, monitoring and exports. It is unofficial and not affiliated with Polymarket. Each row has a recordType; the fields depend on the selected mode.
- Discovery: events, event detail, markets and keyword search.
- Catalogs: tags, categories, series, sports, teams and CLOB markets.
- Activity: comments, order books, leaderboard, positions, trades and holders.
- Additional information: resolutions, perpetual-contract instruments and data freshness.
- Optional output:
flattenMarketsemits separately billed market rows;expandEventsreturns events from sports or series. Both default tofalse.includeMarketsandenrichPriceHistoryadd fields to existing rows and also default tofalse.
What data can you extract from Polymarket?
These are selected fields, not a guarantee that every row contains every value. Examples are illustrative, not live quotes.
Common fields
| Field | Description | Example |
|---|---|---|
recordType | Row kind | event |
id | Entity identifier | 12345 |
locale | Requested language | en |
scrapedAt | Collection timestamp | 2026-10-24T00:00:00+00:00 |
emails | Organization contacts, not commenter emails | [{"value":"name@example.com","type":"support"}] |
leadAbsences | Reasons contact fields are empty | {"geo":{"reason":"not_on_site"}} |
Absence reasons indicate when a contact or location field is not available on this site. phones is empty, address fields are null, and geo is null.
Event rows
| Field | Description | Example |
|---|---|---|
title | Event question | Will the example proposal pass? |
slug | Event URL identifier | example-proposal |
url | Event link | https://polymarket.com/event/example-proposal |
volume | Total volume | 120000 |
volume24hr | 24-hour volume | 2500 |
liquidity | Available liquidity | 15000 |
marketCount | Number of markets | 2 |
topOutcomes | First market only: labels, prices, token IDs | [{"label":"Yes","price":0.62,"tokenId":"123"}] |
rawMarkets | Nested market data when requested | [] |
Market rows
| Field | Description | Example |
|---|---|---|
question | Market question | Will the proposal pass? |
conditionId | Market condition identifier | 0x... |
clobTokenIds | Order-book token identifiers | ["123","456"] |
positionIds | Position identifiers, not CLOB token IDs | ["789"] |
bestBid | Best displayed bid | 0.61 |
bestAsk | Best displayed ask | 0.63 |
priceHistory | Optional timestamp/price samples | [{"t":1792800000,"p":0.62}] |
Tag rows
| Field | Description | Example |
|---|---|---|
slug | Category identifier | crypto |
label | Display label | Crypto |
Series rows
| Field | Description | Example |
|---|---|---|
title | Series title | Example series |
recurrence | Published recurrence | weekly |
Sport rows
| Field | Description | Example |
|---|---|---|
sport | Sport code | nba |
tags | Associated tag identifiers | 1,2 |
Team rows
| Field | Description | Example |
|---|---|---|
name | Team or competitor name | Example Team |
league | League code | nba |
Comment rows
| Field | Description | Example |
|---|---|---|
body | Comment text | Example public comment. |
userName | Public display name | Jane Doe |
xUsername | Published X handle | example_user |
positions | Optional position information | [] |
Catalog rows
| Field | Description | Example |
|---|---|---|
supportedLocales | Accepted language codes | ["en","es"] |
seedTagSlugs | Known category identifiers | ["crypto","politics"] |
CLOB market rows
| Field | Description | Example |
|---|---|---|
tokens | Outcome-token data | [] |
minimumTickSize | Minimum price increment | 0.01 |
Book rows
| Field | Description | Example |
|---|---|---|
bids | Up to 50 bid levels | [{"price":"0.61","size":"10"}] |
asks | Up to 50 ask levels | [{"price":"0.63","size":"12"}] |
bidCount | Bid levels in the source response | 72 |
bidsTruncated | Whether bids were clipped | true |
Leaderboard rows
| Field | Description | Example |
|---|---|---|
rank | Published ranking | 1 |
pnl | Profit/loss value | 125.5 |
Position rows
| Field | Description | Example |
|---|---|---|
size | Position size | 10 |
avgPrice | Average entry price | 0.52 |
currentValue | Current position value | 6.2 |
Trade rows
| Field | Description | Example |
|---|---|---|
side | Trade direction | BUY |
price | Execution price | 0.62 |
transactionHash | Transaction identifier | 0x... |
Holder rows
| Field | Description | Example |
|---|---|---|
proxyWallet | Public wallet identifier | 0x... |
amount | Reported holdings | 10 |
Resolution rows
| Field | Description | Example |
|---|---|---|
status | Published resolution status | resolved |
wasDisputed | Dispute indicator | false |
Perpetual-contract instrument rows
| Field | Description | Example |
|---|---|---|
baseAsset | Base asset | BTC |
quoteAsset | Quote asset | USD |
Data-status rows
| Field | Description | Example |
|---|---|---|
computedAt | Published computation time | 2026-10-24T00:00:00Z |
lagSeconds | Reported data delay | 2 |
How to scrape Polymarket
- Open Polymarket Scraper in Apify Console.
- Fill a target field, such as
querywithbitcoin. - Set
maxItemsto3and review the maximum run cost. - Click Start and wait for completion.
- Open the dataset and download your rows.
Empty input searches the form's sample query, bitcoin, with at most 3 rows. Normal pricing applies. In auto, filling one target field selects a matching mode. Explicit modes that need no target keep their mode and row limit. A mode missing its required target can switch to a compatible mode or the example search; inspect INPUT_REPORT.
events
List events; optionally filter with tagSlugs, seriesSlug or sport.
event
Look up eventSlug or eventId; the plural fields accept multiple inputs.
markets
List markets rather than parent events.
search
Fill query to find matching events.
tags
List category tags; optionally enable featuredTagsOnly.
series
List series, optionally selecting seriesSlug.
sports
List sports, optionally selecting sport.
teams
List teams or competitors, optionally selecting league.
comments
Use parentEntityId or an event slug/ID for public comments.
categories
Get a coverage catalog followed by category rows within your limit.
clob_markets
List market trading metadata and tokens.
book
Provide an actual tokenId from a market row for one snapshot.
leaderboard
Read public trader rankings.
positions
Provide a public wallet in user.
trades
List trades; optionally filter with user or conditionId.
holders
Provide user, conditionId or tokenId for holders.
resolutions
Provide an event slug/ID for resolution information.
perps
List public perpetual-contract instruments.
data_status
Read one public data-freshness row.
What to fill in
| Field | What to enter | Default |
|---|---|---|
mode | One mode listed above | auto |
query | Search words; English recommended | Sample: bitcoin |
tagSlug, tagSlugs | One tag or up to 20 tags | Empty |
eventSlug, eventSlugs | One slug or up to 50 slugs | Empty |
eventId, eventIds | One ID or up to 50 IDs | Empty |
seriesSlug | Series identifier | Empty |
sport, league | Sport or teams-league code | Empty |
tokenId, conditionId, user | Token, condition or wallet identifier | Empty |
parentEntityId | Comments parent identifier | Empty |
parentEntityType | Event, Series or PerpsAsset | Event |
locale | en, zh, es, de, fr, pt, ru, ko, ja | en |
maxItems | Rows per input, 1–5,000 | 70; form sample 3 |
order | volume24hr, volume, liquidity, competitive, startDate, endDate; event lists | volume24hr |
ascending | Ascending event sort | false |
closed | Closed/open filter where supported | false |
active, featured | Optional activity/featured filters; featured applies to events | Unset |
paginationMode | keyset or offset for events | keyset |
includeMarkets | Include nested rawMarkets on events | false |
flattenMarkets | Separate markets in events/event modes | false |
expandEvents | Events instead of sports/series rows | false |
enrichPriceHistory | Add available first-token history | false |
priceHistoryDays | History window, 1–90 days | 7 |
enrichDetails | Add published commenter profile details | true |
getPositions, holdersOnly | Comment positions or holders-only filter | false |
featuredTagsOnly | Featured/navigation tags only | false |
Input examples follow. Replace angle-bracket identifiers before running. The event slug is an older example, not a promise of current activity.
events
{"mode": "events","tagSlug": "crypto","maxItems": 3}
event
{"mode": "event","eventSlug": "fed-decision-in-july-181","maxItems": 1}
markets
{"mode": "markets","maxItems": 3}
search
{"query": "bitcoin","maxItems": 3}
tags
{"mode": "tags","maxItems": 3}
series
{"mode": "series","maxItems": 3}
sports
{"mode": "sports","maxItems": 3}
teams
{"mode": "teams","league": "nba","maxItems": 3}
comments
{"mode": "comments","eventSlug": "fed-decision-in-july-181","maxItems": 3}
categories
{"mode": "categories","maxItems": 3}
clob_markets
{"mode": "clob_markets","maxItems": 3}
book
{"mode": "book","tokenId": "<TOKEN_ID>","maxItems": 1}
leaderboard
{"mode": "leaderboard","maxItems": 3}
positions
{"mode": "positions","user": "<PUBLIC_WALLET>","maxItems": 3}
trades
{"mode": "trades","maxItems": 3}
holders
{"mode": "holders","conditionId": "<CONDITION_ID>","maxItems": 3}
resolutions
{"mode": "resolutions","eventSlug": "fed-decision-in-july-181","maxItems": 1}
perps
{"mode": "perps","maxItems": 3}
data_status
{"mode": "data_status","maxItems": 1}
maxResults and limit are aliases for maxItems. Close field-name misspellings can be corrected; other unknown fields are ignored with a note. Invalid filters fall back to defaults. Every run writes its input interpretation to INPUT_REPORT in the default key-value store. Resolver errors use INVALID_INPUT: <field> — <how to fix> before row delivery; later validation errors may use different wording. The start fee can still apply.
Output example
Illustrative event row, shortened to its main fields:
{"recordType": "event","type": "event","id": "12345","slug": "example-proposal","title": "Will the example proposal pass?","locale": "en","volume": 120000,"volume24hr": 2500,"liquidity": 15000,"marketCount": 1,"topOutcomes": [{"label": "Yes", "price": 0.62, "tokenId": "123"}],"url": "https://polymarket.com/event/example-proposal","scrapedAt": "2026-10-24T00:00:00+00:00"}
Export the dataset as JSON, CSV, Excel, XML, RSS or an HTML table. RUN_SUMMARY contains counts and warnings; ERROR_SUMMARY describes hard failures.
Why use this Polymarket scraper?
- Pay per delivered row: row charges follow dataset delivery, plus the start fee.
- Keep delivered results: rows already written remain available after a stop. Collection interrupted before delivery may produce no rows.
- Inspect errors: input reports and failure summaries help explain empty or failed runs.
- Keep missing values explicit: unavailable source values remain empty; some display fields and identifiers are derived.
- Batch inputs: submit multiple tags or event identifiers together.
- No proxy configuration: you do not need to set up proxies.
How much does it cost to scrape Polymarket?
Pricing is pay-per-event. Platform usage is included in these prices.
| Apify plan | Start event | Price per row | Price per 1,000 rows |
|---|---|---|---|
| Free | $0.005 | $0.0015 | $1.50 |
| Starter | $0.005 | $0.0015 | $1.50 |
| Scale | $0.005 | $0.0013 | $1.30 |
| Business | $0.005 | $0.0011 | $1.10 |
| Platinum | $0.005 | $0.0011 | $1.10 |
| Diamond | $0.005 | $0.0011 | $1.10 |
The start charge counts one event per GB of memory, with a minimum of one. Default memory is 512 MB, so the start charge is $0.005.
maxItems applies to each input, defaults to 70, and supports larger requests in parts of up to 70 where pagination exists. All row types share that input's allowance. Free-plan runs are capped at 200 rows across the whole run and 10 runs of this Actor. The Maximum cost per run setting (maxTotalChargeUsd in the API) caps total charges.
Example: 3 tags delivering 5 rows each means 15 rows. On Free with 512 MB: 15 × $0.0015 + $0.005 = $0.0275. Fewer delivered rows reduce the row charge, not the start fee.
- The Apify Free plan includes $5.00 in monthly usage credit (about 3,333 rows at
$0.0015per row across Free-plan runs capped at 200 rows per run).
Use with AI agents and the API
Apify MCP server
For Claude, ChatGPT, Cursor or VS Code clients supporting remote MCP, add:
https://mcp.apify.com?tools=lentic_clockss/polymarket-scraper
Sign in with Apify through OAuth, or use Authorization: Bearer <YOUR_APIFY_TOKEN>. The tool starts a run and returns run and dataset identifiers; read rows with get-dataset-items.
For clients without remote support, run npx @apify/actors-mcp-server --tools lentic_clockss/polymarket-scraper with APIFY_TOKEN configured.
Example prompt: “Search Polymarket for bitcoin, return three events, and show their titles and volume.”
- Agent execution note: Set
maxItemsbetween5and20on exploratory tool calls to keep responses compact, and readRUN_SUMMARYandINPUT_REPORTfrom the default key-value store to inspect normalized inputs and delivered row counts.
Apify API
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("lentic_clockss/polymarket-scraper").call(run_input={"query": "bitcoin", "maxItems": 3})for row in client.dataset(run["defaultDatasetId"]).iterate_items():print(row)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('lentic_clockss/polymarket-scraper').call({query: 'bitcoin', maxItems: 3});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
HTTP: send input JSON to POST https://api.apify.com/v2/acts/lentic_clockss~polymarket-scraper/runs with an Authorization: Bearer <YOUR_APIFY_TOKEN> header. After completion, read GET https://api.apify.com/v2/datasets/<datasetId>/items?format=json.
Integrations
Use the Integrations tab for Google Sheets, Make, Zapier, n8n, Slack, Airtable or webhooks. Apify Schedules can run recurring collections.
FAQ
Is it legal to scrape Polymarket?
This Actor collects public data. You are responsible for checking Polymarket's terms and applicable data-protection law. Processing personal data requires a lawful basis; public visibility alone does not establish one.
Why did my run end as ABORTED?
Check the run log and status message for the reason, including a manual stop. Do not assume an automatic restart. Inspect any delivered rows before starting another run.
How many results can I get?
Request 1–5,000 rows per input with maxItems. Source availability, pagination, the Free-plan limits and your maximum cost can reduce delivery. A book or data-status lookup normally returns one row.
Why are some fields empty?
Fields vary by row type and source availability. Published X handles and price history may be absent. Company contact information is not the commenter's personal contact information.
Can I get order-book depth?
Yes, with mode=book and a valid tokenId. bids and asks each contain at most 50 levels. bidCount and askCount count source-response levels; bidsTruncated and asksTruncated show clipping.
Which languages work?
The accepted codes are en, zh, es, de, fr, pt, ru, ko and ja. Localized titles depend on availability. locale does not select a country or translate search words.
Are market prices trading advice?
No. They are snapshots for research, not recommendations or guaranteed executable prices. This Actor does not place trades.
Limitations
- Search ranking can differ from the website; search and holders requests have limited pagination.
- Series-scoped event lists use
offset;closed=falseis not enforced on that path. - Event
topOutcomesdescribes only the first market. Use separate market rows for market-level comparisons. - Price history uses the first available token, stores at most 500 points, and covers at most 10 rows per collection part in
events/searchmodes. Availability varies by mode and identifier. - Catalog entries can become outdated. No mode guarantees complete historical coverage.
- This documentation does not promise delivery of unfinished collection work after interruption.
Related scrapers
More developer and data tools from the same publisher:
- Phone Number Validator
- GitHub Scraper
- akamai Session solver
- AWS WAF Scraper
- Cloudflare solver
- DataDome Scraper
- Stealth Web Scraper
- Email Validator
Browse all of our scrapers at apify.com/lentic_clockss.
Support
Report a problem or request a field through the Issues tab of this Actor's page. Include the run ID and the input you used.