Prediction Markets Scraper - Polymarket, Kalshi, Limitless avatar

Prediction Markets Scraper - Polymarket, Kalshi, Limitless

Pricing

from $1.10 / 1,000 result items

Go to Apify Store
Prediction Markets Scraper - Polymarket, Kalshi, Limitless

Prediction Markets Scraper - Polymarket, Kalshi, Limitless

Scrape live prediction market events, prices, and liquidity across 13 exchanges: Polymarket, Kalshi, Limitless, Metaculus, Smarkets, and more

Pricing

from $1.10 / 1,000 result items

Rating

0.0

(0)

Developer

Jan Turoň

Jan Turoň

Maintained by Community

Actor stats

0

Bookmarked

6

Total users

0

Monthly active users

6 days ago

Last modified

Categories

Share

One actor. Every market. AI-ready.

Scrape live prediction market events, prices, and liquidity across 13 exchanges — Polymarket, Kalshi, Limitless, Metaculus, Smarkets, and more — powered by the pmxtjs unified API.

Runs as an Apify actor for scheduled scraping and one-off runs. Because Apify connects native MCP integration, the data this actor collects is immediately consumable by AI agents like Claude and Cursor — no extra server required.


Supported Exchanges

ExchangeRegionType
PolymarketGlobalCrypto
Polymarket USUSRegulated
KalshiUSRegulated (CFTC)
Kalshi DemoUSDemo
LimitlessGlobalCrypto
MetaculusGlobalForecasting
SmarketsEuropeExchange
MyriadGlobalCrypto
ProbableGlobalCrypto
OpinionGlobalSocial
HyperliquidGlobalDeFi
Gemini TitanUSRegulated
SuiBetsGlobalCrypto

Apify Platform Capabilities

Running this as an Apify Actor gives you the full Apify infrastructure stack on top of the scraping logic:

  • Scheduled runs — trigger on any cron schedule (hourly snapshots, daily digests, weekly archives) via the Apify Console or API.
  • Webhooks — fire a POST to any endpoint when a run finishes, enabling downstream pipelines (Slack alerts, database writes, further actors).
  • Dataset storage — all output lands in a structured Apify Dataset, queryable via REST API, exportable as JSON/CSV/XLSX, and viewable in the Console.
  • Key-value store — the actor writes a run summary (record count, exchanges queried, finish time) to the default KV store after each run.
  • Apify API — call the actor programmatically from any language, pass input overrides per run, and read results back without ever touching the Console.
  • Actor-to-actor chaining — pipe this actor's dataset output directly into downstream actors (e.g. an LLM summariser, a notifier, a database sync actor) using Apify's dataset getItems API or the Actor.metamorph() pattern.
  • MCP integration — Apify's native Model Context Protocol support lets Claude, Cursor, and other AI agents call this actor as a tool directly from the chat — no extra server or wrapper needed.
  • Monitoring & alerts — set run-failure notifications and memory/timeout limits in the Console.
  • Proxy support — plug in Apify's residential or datacenter proxies if any exchange starts rate-limiting headless requests.

Pricing

This actor uses pay-per-dataset-row billing — you only pay for the records actually delivered.

EventWhen charged
prediction-market-eventPer row pushed to the dataset

Volume discounts — the per-row price drops automatically with your Apify plan:

Apify plan (discount tier)Price per rowPer 1,000 rowsDiscount
Free$0.0020$2.00—
Starter (Bronze)$0.0017$1.7015%
Scale (Silver)$0.0014$1.4030%
Business (Gold)$0.0011$1.1045%

The number of rows depends on outputFormat:

outputFormatRows per scraped event
events (default)1 row per event
markets1 row per market (multiple per event)
flat1 row per outcome (Yes / No / multi-outcome)

Example costs (events format):

RunRowsFreeBusiness (Gold)
50 events from 1 exchange50~$0.10~$0.055
150 events from 3 exchanges150~$0.30~$0.165
500 events, deduped cross-venue500~$1.00~$0.55

The actor respects your maxTotalChargeUsd budget — if the limit is reached, it delivers however many rows fit within budget and exits cleanly without losing partial results.


Input

Configure the actor in Apify Console or pass a JSON input file:

{
"exchanges": ["Polymarket", "Kalshi", "Limitless"],
"query": "US election 2026",
"limit": 100,
"status": "active",
"category": "politics",
"tags": ["US", "election"],
"minVolume": 50000,
"minLiquidity": 10000,
"includeOutcomes": true,
"includeSourceMetadata": false,
"crossVenueDedup": true,
"outputFormat": "events"
}

Input Parameters

ParameterTypeDefaultDescription
exchangesstring[][Polymarket, Kalshi, Limitless]Exchanges to query
querystring—Keyword / natural-language search. Omit for top events by volume.
limitnumber50Max results per exchange (1–1000)
statusstringactiveactive | inactive | closed | all
categorystring—Category filter (e.g. politics, crypto, sports)
tagsstring[]—Tag filter — returns events matching ANY tag
minVolumenumber0Minimum total traded volume (USD)
minLiquiditynumber0Minimum market liquidity (USD)
includeOutcomesbooleantrueInclude full outcomes array (for multi-outcome markets)
includeSourceMetadatabooleanfalseAttach raw venue-specific metadata to each event
crossVenueDedupbooleanfalseMerge same-event records from different exchanges
outputFormatstringeventsevents | markets | flat (see below)

Output Formats

events — One record per event, markets nested

{
"id": "...",
"title": "Will Trump nominate Kevin Warsh as Fed Chair?",
"sourceExchange": "Polymarket",
"volume": 4820000,
"volume24h": 130000,
"category": "politics",
"tags": ["US", "Fed", "economy"],
"markets": [
{
"marketId": "...",
"title": "Kevin Warsh",
"yes": { "price": 0.72, "priceChange24h": -0.03 },
"no": { "price": 0.28, "priceChange24h": 0.03 },
"liquidity": 920000,
"volume": 4820000,
"resolutionDate": "2026-01-31T00:00:00Z",
"status": "active"
}
],
"scrapedAt": "2026-06-02T10:00:00Z"
}

markets — One record per market, event info flattened

{
"marketId": "...",
"eventTitle": "Will Trump nominate Kevin Warsh as Fed Chair?",
"title": "Kevin Warsh",
"yes": { "price": 0.72 },
"no": { "price": 0.28 },
"volume": 4820000,
"liquidity": 920000,
"resolutionDate": "2026-01-31T00:00:00Z",
"sourceExchange": "Polymarket",
"scrapedAt": "2026-06-02T10:00:00Z"
}

flat — One record per outcome (Yes / No / multi-outcome)

Best for price comparison, arbitrage detection, and time-series storage.

{
"eventTitle": "Will Trump nominate Kevin Warsh as Fed Chair?",
"marketTitle": "Kevin Warsh",
"outcomeLabel": "Yes",
"price": 0.72,
"priceChange24h": -0.03,
"volume": 4820000,
"liquidity": 920000,
"resolutionDate": "2026-01-31T00:00:00Z",
"status": "active",
"sourceExchange": "Polymarket",
"url": "https://polymarket.com/...",
"scrapedAt": "2026-06-02T10:00:00Z"
}

All prices are normalized to 0.0–1.0 (implied probability) regardless of venue.


Under the Hood

This actor is built on pmxtjs, the TypeScript SDK of the PMXT unified prediction market API — think of it as the ccxt for prediction markets.

Core Data Flow

fetchEvents(params) ← pmxtjs Exchange class
│
▼
UnifiedEvent[] ← normalized, cross-exchange schema
│
┌───┴──────────────────────────┐
│ filter (volume, liquidity) │
│ dedup (crossVenueDedup) │
└───────────────┬──────────────┘
│
Apify Dataset
(events | markets | flat)

Data Model

UnifiedEvent
├─ id, title, description, slug
├─ url, image, category, tags[]
├─ volume, volume24h
├─ sourceExchange
└─ markets: UnifiedMarket[]
├─ marketId, title, description
├─ resolutionDate, status
├─ volume, volume24h, liquidity, openInterest
├─ yes: MarketOutcome { price, priceChange24h }
├─ no: MarketOutcome { price, priceChange24h }
└─ outcomes: MarketOutcome[] ← multi-outcome markets