Polymarket & Kalshi Scraper - Odds, Markets & Arbitrage
Pricing
from $3.00 / 1,000 market scrapeds
Polymarket & Kalshi Scraper - Odds, Markets & Arbitrage
Scrape Polymarket & Kalshi prediction markets: live odds & implied probability, 24h/weekly volume, liquidity, order flow (trades), top holders, wallet P&L, price history, and cross-platform arbitrage. Keyless, no browser. Monitor mode tracks odds moves and new markets. Export to JSON, CSV or Excel.
Pricing
from $3.00 / 1,000 market scrapeds
Rating
0.0
(0)
Developer
Scrape Sage
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Polymarket & Kalshi Scraper — Live Odds, Markets, Order Flow & Arbitrage
Extract complete prediction-market data from Polymarket and Kalshi in one actor — live odds and implied probability for every outcome, 24h/weekly/monthly volume, liquidity, order flow (trades), top holders (smart money), wallet P&L, full price-history time-series, and cross-platform arbitrage that flags the same question priced differently on each venue.
No login, no API key, no browser — fast, reliable extraction straight from each platform's public data API. A monitor mode tracks odds moves and new markets so you can pull only what changed between runs.
Why this prediction-markets scraper?
Most scrapers cover a single platform and a handful of fields. This actor reads Polymarket's Gamma, CLOB and Data APIs and Kalshi's public market API, ships the richest record in the category (60+ fields per market), and is the only one that matches Polymarket against Kalshi to surface arbitrage.
| Data | Typical scrapers | This actor |
|---|---|---|
| Polymarket markets & events | ✅ | ✅ |
| Kalshi markets (same schema) | ❌ | ✅ |
| Live odds + implied probability per outcome | partial | ✅ |
| 24h / 7d / 30d / total volume + liquidity | partial | ✅ |
| Best bid / ask / spread + 1d/1w/1m price change | ❌ | ✅ |
| Price-history time-series (chart data) | ❌ | ✅ |
| Trades / order flow (by market or wallet) | ❌ | ✅ |
| Top holders (whale / smart-money positions) | ❌ | ✅ |
| Wallet profiles (positions, value, realized/unrealized P&L) | ❌ | ✅ |
| Cross-platform arbitrage (Polymarket ⇄ Kalshi) | ❌ | ✅ |
| Monitor mode — only new / changed odds | ❌ | ✅ |
| Keyless, no browser | — | ✅ |
Use cases
- Quant & trading research — pull live odds, spreads and history across both venues to backtest signals, build dashboards, or feed a model.
- Odds & price monitoring — schedule the actor and use monitor mode to get alerted only when a market is new, its odds move, its volume spikes, or it resolves.
- Arbitrage detection — find the same question priced differently on Polymarket vs Kalshi, with the spread and a theoretical risk-free return.
- Smart-money tracking — surface the largest holders in a market and profile any wallet's positions and P&L.
- News, politics & forecasting — prediction markets are real-time, money-weighted forecasts for elections, the economy, crypto, sports and tech. Power newsletters, research and AI agents with structured forecast data.
- AI agents — clean, LLM-ready JSON for any agent that needs "what does the market think will happen?"
How to use
- Sign up for Apify — the free plan is enough to try this actor.
- Open the Polymarket & Kalshi Scraper, pick a mode (Markets by default), and optionally add a
query(e.g.election,bitcoin,fed rate) or categorytagSlugs(e.g.politics,crypto,sports). - Click Start and watch results stream into the dataset table.
- Export as JSON, CSV, Excel, XML or RSS — or pull results programmatically via the Apify API.
Input
{"mode": "markets","query": "election","tagSlugs": ["politics"],"status": "active","sortBy": "volume24hr","maxItems": 100,"includePriceHistory": false,"monitorMode": false}
Common fields:
- mode (default
markets) —markets,events,kalshi,priceHistory,trades,holders,wallet, orarbitrage. - query — keyword search across Polymarket markets/events. Empty = the top markets by volume.
- tagSlugs — Polymarket category slugs (
politics,crypto,sports,economy,elections,geopolitics,tech,pop-culture…). - startUrls — Polymarket event/market URLs, bare slugs, Kalshi URLs or tickers — each fetched directly.
- status (default
active) —active,closed, orall. - sortBy (default
volume24hr) —volume24hr,volume,liquidity,volume1wk,competitive,startDate,endDate. - conditionIds / marketSlugs / eventSlugs — target exact Polymarket markets/events (used by Trades, Holders, Price-history).
- walletAddresses —
0x…wallets for Wallet mode (P&L) or Trades-by-wallet. - kalshiTickers / kalshiSeriesTickers — target exact Kalshi markets or whole series.
- includePriceHistory / includeTopHolders / includeRecentTrades — enrich each market in Markets mode (bundled into the record at no extra charge).
- monitorMode (default false) — emit only new / changed records between runs (see below).
- maxItems (default 100, 0 = no cap), minVolume24h, minLiquidity, maxConcurrency, proxyConfiguration.
Output
Every row carries a platform (polymarket / kalshi) and a type (market, event, priceHistory, trade, holder, wallet, arbitrage). Use the dataset views (Markets / Events / Trades / Holders / Wallets / Price history / Arbitrage) for clean, dense tables.
A market record (type: "market"):
{"platform": "polymarket","type": "market","question": "Will the Fed cut rates in July?","slug": "fed-decision-in-july","conditionId": "0xd86a816093fcd0a0e1ca440bc5ce199bd3c5a8d6139e044b076958164f8c5423","category": "Economy","outcomes": ["Yes", "No"],"yesPrice": 0.18,"impliedProbabilityPct": 18.0,"odds": [{ "outcome": "Yes", "price": 0.18, "impliedProbabilityPct": 18.0, "clobTokenId": "5904…078" },{ "outcome": "No", "price": 0.82, "impliedProbabilityPct": 82.0, "clobTokenId": "5985…551" }],"lastTradePrice": 0.18, "bestBid": 0.18, "bestAsk": 0.19, "spread": 0.01,"oneDayPriceChange": -0.03,"volume24hr": 1924034.84, "volumeNum": 91275371.43, "liquidityNum": 2461957.42,"startDate": "2026-06-01T00:00:00.000Z", "endDate": "2026-07-31T00:00:00.000Z","status": "active","url": "https://polymarket.com/event/fed-decision-in-july","scrapedAt": "2026-06-17T12:00:00.000Z"}
A Kalshi market uses the same schema (prices are 0–1 probabilities; volume24hr/openInterest are in contracts). Other record types: priceHistory (history array of {t, timestamp, p} plus first/last/min/max/change), trade (wallet, side, outcome, size, price, USD value, time), holder (wallet, trader name, outcome, shares), wallet (portfolio value + positions with P&L), arbitrage (matched question, polymarketYes, kalshiYes, spread, guaranteedReturnPct, best strategy).
What to expect (field coverage)
| Field group | Notes |
|---|---|
| Odds, prices, volume, liquidity, dates, status | Always present when the platform exposes them |
category / tags | Always on Kalshi & Polymarket events; on Polymarket markets when the listing exposes it |
priceHistory / topHolders / recentTrades | Only when you enable the matching enrichment toggle |
conditionId | Polymarket only (Kalshi uses ticker) |
A blank field means the platform didn't expose that value for that record — nothing is dropped, so you always get the richest dataset available.
Monitor mode & scheduling
Monitor mode and Apify Schedules work together — they don't conflict. Apify's Schedules decide when the actor runs; monitor mode decides what each run emits.
- Turn on monitorMode and the actor remembers a fingerprint of every market in a named key-value store. On the next run it emits only markets that are new, whose odds moved (by at least
monitorMinOddsChange), whose 24h volume spiked, or that changed status / resolved — each tagged with achangeType. - Pair it with a Schedule (e.g. every 15 minutes or hourly) and a webhook to push odds alerts into Slack, a CRM, or your own pipeline.
- Leave monitorMode off for a full snapshot every run.
Automate & integrate
Run on autopilot and pull results into your own stack:
- Apify API — start runs, fetch datasets, manage schedules over REST.
- apify-client for JavaScript and Python — official SDKs.
- Schedules — run it on any cron to track odds over time.
- Webhooks — trigger downstream actions the moment a run finishes.
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });const run = await client.actor('scrapesage/prediction-markets-scraper').call({mode: 'markets',query: 'election',status: 'active',maxItems: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Got ${items.length} markets`);
Connect the dataset to 5,000+ apps — no code required:
- Make — multi-step automation scenarios.
- Zapier — push odds moves straight into your tools.
- Slack — get alerted when a monitored market moves or resolves.
- Google Drive / Sheets — auto-export every run to a spreadsheet.
- Airbyte — pipe results into your data warehouse.
- GitHub — trigger runs from commits or releases.
Use with AI assistants (MCP)
The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT, or any agent framework through the Apify MCP server — ask your assistant to "show me the top political markets on Polymarket and Kalshi with their odds" and let it run the scraper for you.
Agent-ready: autonomous payments (x402 & Skyfire)
This actor is agent-ready — AI agents can discover it, run it, and pay for it autonomously, with no Apify account and no human in the loop. It uses pay-per-event pricing and limited permissions, so it qualifies for Apify's agentic-payment standards:
- x402 — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the Apify MCP server — no account, no API key.
- Skyfire — agent-to-service payments for fully autonomous AI-agent workflows.
Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.
More scrapers from scrapesage
Build a complete market-intelligence stack — pair prediction-market odds with prices, filings, news and demand signals:
- CoinGecko Crypto Scraper — coins, prices, exchanges, NFTs and on-chain market data.
- Yahoo Finance Scraper — stocks, ETFs, FX, crypto quotes, financials and analyst ratings.
- SEC EDGAR Scraper — company filings and XBRL financials.
- FEC Campaign Finance Scraper — donors, candidates, committees and lobbying for election markets.
- Google News Scraper — real-time news that moves the markets you track.
- Google Trends Scraper — search-demand signals for any topic, candidate or asset.
Tips
- Start in Markets mode with a
queryortagSlugsfor a clean, fully-populated table that's perfect for export. - Both platforms in one run: run Markets (Polymarket) and Kalshi modes, or use Arbitrage mode to compare them side-by-side.
- Enrichment costs requests:
includePriceHistoryadds one request per outcome token,includeTopHolders/includeRecentTradesone per market — they're bundled into the market record at no extra charge. - Odds alerts: combine
monitorModewith a Schedule and lowermonitorMinOddsChangefor tighter alerting. - Arbitrage is conservative by design: raise
arbMinSimilarityfor stricter question matching andarbMinSpreadfor bigger gaps only.
FAQ
Does it need a Polymarket or Kalshi API key? No. It reads each platform's public market-data API — no key, login or browser required.
What's the difference between markets and events? A Polymarket event groups related markets (e.g. "2028 Election Winner" contains one market per candidate). Events mode returns the group with all nested markets; Markets mode returns the individual markets.
How are odds expressed? As a probability from 0 to 1 (yesPrice) plus impliedProbabilityPct (0–100). Kalshi's native cent prices are normalised the same way.
Can I monitor a market for odds changes? Yes — turn on monitorMode and run on a Schedule. Each run emits only new or changed markets, tagged with a changeType (new, odds_up, odds_down, volume_spike, status_change, resolved).
Does monitor mode conflict with Apify's scheduler? No — they complement each other. The Schedule controls when it runs; monitor mode controls what is emitted. State is kept in a named key-value store, independent of the scheduler.
Is the arbitrage signal guaranteed profit? No. It's a theoretical, pre-fee calculation based on matched questions and current prices. Always verify liquidity, fees and the exact resolution criteria on each platform before trading.
A field is empty — why? The platform didn't expose that value for that record (e.g. category on some Polymarket markets, or a brand-new market with no trades). Fields are blank only when the source omits them — never because the scraper skipped them.
Is scraping this data legal? This actor collects publicly available market data only. You're responsible for using the data in compliance with applicable laws and each platform's terms. Nothing here is financial advice.
Need help?
Open an issue on the actor's Issues tab, or visit the Apify help center. Feature requests are welcome — this actor is actively maintained.