Polymarket Scraper - Events, Odds & Trading Data avatar

Polymarket Scraper - Events, Odds & Trading Data

Pricing

from $1.10 / 1,000 results

Go to Apify Store
Polymarket Scraper - Events, Odds & Trading Data

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

kane liu

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

11 hours ago

Last modified

Features

Limited permissions

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: flattenMarkets emits separately billed market rows; expandEvents returns events from sports or series. Both default to false. includeMarkets and enrichPriceHistory add fields to existing rows and also default to false.

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

FieldDescriptionExample
recordTypeRow kindevent
idEntity identifier12345
localeRequested languageen
scrapedAtCollection timestamp2026-10-24T00:00:00+00:00
emailsOrganization contacts, not commenter emails[{"value":"name@example.com","type":"support"}]
leadAbsencesReasons 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

FieldDescriptionExample
titleEvent questionWill the example proposal pass?
slugEvent URL identifierexample-proposal
urlEvent linkhttps://polymarket.com/event/example-proposal
volumeTotal volume120000
volume24hr24-hour volume2500
liquidityAvailable liquidity15000
marketCountNumber of markets2
topOutcomesFirst market only: labels, prices, token IDs[{"label":"Yes","price":0.62,"tokenId":"123"}]
rawMarketsNested market data when requested[]

Market rows

FieldDescriptionExample
questionMarket questionWill the proposal pass?
conditionIdMarket condition identifier0x...
clobTokenIdsOrder-book token identifiers["123","456"]
positionIdsPosition identifiers, not CLOB token IDs["789"]
bestBidBest displayed bid0.61
bestAskBest displayed ask0.63
priceHistoryOptional timestamp/price samples[{"t":1792800000,"p":0.62}]

Tag rows

FieldDescriptionExample
slugCategory identifiercrypto
labelDisplay labelCrypto

Series rows

FieldDescriptionExample
titleSeries titleExample series
recurrencePublished recurrenceweekly

Sport rows

FieldDescriptionExample
sportSport codenba
tagsAssociated tag identifiers1,2

Team rows

FieldDescriptionExample
nameTeam or competitor nameExample Team
leagueLeague codenba

Comment rows

FieldDescriptionExample
bodyComment textExample public comment.
userNamePublic display nameJane Doe
xUsernamePublished X handleexample_user
positionsOptional position information[]

Catalog rows

FieldDescriptionExample
supportedLocalesAccepted language codes["en","es"]
seedTagSlugsKnown category identifiers["crypto","politics"]

CLOB market rows

FieldDescriptionExample
tokensOutcome-token data[]
minimumTickSizeMinimum price increment0.01

Book rows

FieldDescriptionExample
bidsUp to 50 bid levels[{"price":"0.61","size":"10"}]
asksUp to 50 ask levels[{"price":"0.63","size":"12"}]
bidCountBid levels in the source response72
bidsTruncatedWhether bids were clippedtrue

Leaderboard rows

FieldDescriptionExample
rankPublished ranking1
pnlProfit/loss value125.5

Position rows

FieldDescriptionExample
sizePosition size10
avgPriceAverage entry price0.52
currentValueCurrent position value6.2

Trade rows

FieldDescriptionExample
sideTrade directionBUY
priceExecution price0.62
transactionHashTransaction identifier0x...

Holder rows

FieldDescriptionExample
proxyWalletPublic wallet identifier0x...
amountReported holdings10

Resolution rows

FieldDescriptionExample
statusPublished resolution statusresolved
wasDisputedDispute indicatorfalse

Perpetual-contract instrument rows

FieldDescriptionExample
baseAssetBase assetBTC
quoteAssetQuote assetUSD

Data-status rows

FieldDescriptionExample
computedAtPublished computation time2026-10-24T00:00:00Z
lagSecondsReported data delay2

How to scrape Polymarket

  1. Open Polymarket Scraper in Apify Console.
  2. Fill a target field, such as query with bitcoin.
  3. Set maxItems to 3 and review the maximum run cost.
  4. Click Start and wait for completion.
  5. 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.

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

FieldWhat to enterDefault
modeOne mode listed aboveauto
querySearch words; English recommendedSample: bitcoin
tagSlug, tagSlugsOne tag or up to 20 tagsEmpty
eventSlug, eventSlugsOne slug or up to 50 slugsEmpty
eventId, eventIdsOne ID or up to 50 IDsEmpty
seriesSlugSeries identifierEmpty
sport, leagueSport or teams-league codeEmpty
tokenId, conditionId, userToken, condition or wallet identifierEmpty
parentEntityIdComments parent identifierEmpty
parentEntityTypeEvent, Series or PerpsAssetEvent
localeen, zh, es, de, fr, pt, ru, ko, jaen
maxItemsRows per input, 1–5,00070; form sample 3
ordervolume24hr, volume, liquidity, competitive, startDate, endDate; event listsvolume24hr
ascendingAscending event sortfalse
closedClosed/open filter where supportedfalse
active, featuredOptional activity/featured filters; featured applies to eventsUnset
paginationModekeyset or offset for eventskeyset
includeMarketsInclude nested rawMarkets on eventsfalse
flattenMarketsSeparate markets in events/event modesfalse
expandEventsEvents instead of sports/series rowsfalse
enrichPriceHistoryAdd available first-token historyfalse
priceHistoryDaysHistory window, 1–90 days7
enrichDetailsAdd published commenter profile detailstrue
getPositions, holdersOnlyComment positions or holders-only filterfalse
featuredTagsOnlyFeatured/navigation tags onlyfalse

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 planStart eventPrice per rowPrice 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.0015 per 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 maxItems between 5 and 20 on exploratory tool calls to keep responses compact, and read RUN_SUMMARY and INPUT_REPORT from the default key-value store to inspect normalized inputs and delivered row counts.

Apify API

from apify_client import ApifyClient
client = 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

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=false is not enforced on that path.
  • Event topOutcomes describes 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/search modes. 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.

More developer and data tools from the same publisher:

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.