Prediction Markets Scraper - Kalshi & Polymarket Odds
Pricing
from $5.10 / 1,000 market summaries
Prediction Markets Scraper - Kalshi & Polymarket Odds
Scrape real-time prediction market odds from Kalshi and Polymarket: current prices, volumes, order book depth, and cross-platform price gaps when the same question trades on both exchanges.
Pricing
from $5.10 / 1,000 market summaries
Rating
0.0
(0)
Developer
PunkRecordsData
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
๐ฏ Prediction Markets Odds Scraper: Kalshi & Polymarket, PunkRecordsData
๐ Real-time prediction market odds from Kalshi and Polymarket in one run. Yes/no prices, order book depth, and the price gap when the same question trades on both exchanges, a cross-platform arb finder, not just a tick feed.
Scrape live prediction market data straight from the exchanges' own public APIs: current yes/no prices, best bid/ask, volumes and open interest for every market, plus the top ten levels of the order book per market. When the same question is listed on both exchanges (e.g. "Will Gavin Newsom be the 2028 Democratic presidential nominee?"), the Actor matches the pair and reports the exact price gap between them.
Built with the Apify platform: run it on a schedule, pull results over the REST API, pipe them into Make/Zapier/Google Sheets, and browse the output in a clean table view, no databases or scrapers of your own required.
๐ What the Prediction Markets Odds Scraper does
Give it the platform(s) and it returns one clean row per market with the normalized price fields both exchanges use (Kalshi calls them dollars, Polymarket calls them prices, this Actor reconciles them to a single schema). Turn on Order book depth for the top ten bids and asks, Price history for a time series you can chart, or Recent trades for the last individual fills. Turn on Cross-platform match and you additionally get one row per question that trades on both Kalshi and Polymarket, with the numeric price gap and which side is cheaper.
You can scrape everything ('bitcoin' to 'Will the Fed cut rates'), or filter by search terms and only pull markets whose question mentions them. Prices are marked by the exchange at run time; volumes and 24h volumes are included so you can filter for genuinely liquid markets.
๐ก Why it matters: most prediction-market scrapers return one exchange's raw tick dump. This Actor normalizes both exchanges into one schema, attaches order book depth per market, and finds same-question cross-exchange pairs so you can spot a price gap before a market maker does.
๐ Cross-platform gap example (verified run)
Real matched pair from a test run: the same question trading on both exchanges:
| Platform | Question | Yes price |
|---|---|---|
| ๐๏ธ Kalshi | Will Gavin Newsom be the Democratic Presidential nominee in 2028? | 0.140 |
| ๐๏ธ Polymarket | Will Gavin Newsom win the 2028 Democratic presidential nomination? | 0.139 |
The Actor reports priceGap: 0.001, spreadPercent: 0.72%, cheaperPlatform: "polymarket".
๐ Output
Two record types, identified by recordType.
market-summary: one row per market
| Field | Type | Example |
|---|---|---|
๐๏ธ platform | string | kalshi or polymarket |
๐ marketId / eventId | string | KXPRESNOMD-28-GN / 559652 |
โ question | string | Will Gavin Newsom be the Democratic Presidential nominee in 2028? |
๐ถ status | string | active / closed |
โ
yesPrice / โ noPrice | number | 0.14 / 0.86 |
๐ผ yesBid / ๐ฝ yesAsk | number | 0.14 / 0.15 |
๐งพ lastPrice | number | 0.15 |
๐ volume / volume24h | number | 9900000 |
๐ฆ openInterest | number | 150000 (Kalshi) |
๐ closeTime | string (ISO) | 2028-11-07T15:00:00Z |
๐ url | string | https://kalshi.com/... |
๐ orderBook | object | {"bids":[10 levels],"asks":[10 levels]} |
๐ priceHistory | array | Time series: {"time":"2026-09-11T06:00:18.000Z","price":0.0385} |
๐ recentTrades | array | Last trades: {"time":"2026-09-12T05:06:48Z","side":"sell","price":0.959,"size":3.47} |
๐ scrapedAt | string (ISO) | 2026-09-12T01:27:09.328Z |
โ error | string or N/A | N/A |
cross-match-record: one row per matched pair
| Field | Type | Example |
|---|---|---|
โ question | string | Kalshi question text |
๐ฏ matchScore | number (0โ100) | 70.1 |
๐๏ธ kalshi | object | {marketId, eventId, question, yesPrice, url} |
๐๏ธ polymarket | object | {marketId, eventId, question, yesPrice, url} |
๐ priceGap / absPriceGap | number | 0.001 |
๐ธ cheaperPlatform | string | kalshi / polymarket / equal |
๐ spreadPercent | number | 0.72 |
Fields that were never requested come back as "Not Requested"; fields a market genuinely doesn't expose come back as "N/A". You always know why a field is empty.
You can download the dataset in various formats such as JSON, HTML, CSV, or Excel, or fetch it over the API.
๐ How it compares to alternatives
Measured against the closest published Kalshi/Polymarket actors on the Apify Store:
| Actor | Primary price | Billable events |
|---|---|---|
| Volume leader, Kalshi only | $1.00 / 1,000 | 1 |
| Kalshi-only scraper | $4.00 / 1,000 | 1 |
| Polymarket real-time monitor (46 users/30d) | $12.00 / 1,000 | 1 |
| This Actor | $6.00 / 1,000 | 5 (market summary, order book, price history, recent trades, cross-platform gap), both platforms in one run |
๐ How to use
- Create a free Apify account. New accounts get $5 in free credit.
- Open the Prediction Markets Odds Scraper. Both platforms are pre-selected; just hit Start for a full sweep.
- Optional: enter search terms (e.g.
bitcoin) to narrow to a topic, toggle Order book depth, or adjustMax markets per platform. - When the run finishes, open the Output tab: the Markets view lists every market, the Cross-platform matches view lists every same-question pair with its gap.
- Download as CSV/Excel/JSON/XML or pull the dataset via the API.
Example input (JSON)
{"platforms": ["kalshi", "polymarket"],"status": "open","searchTerms": ["bitcoin"],"maxPerPlatform": 300,"liquidOnly": false,"maxItems": 100,"includeOrderBook": true,"includeCrossMatch": true,"crossMatchDepth": 3000}
๐ผ Business use cases
Arbitrage & market makers Cross-platform pairs expose price inefficiencies between Kalshi and Polymarket on the same underlying question.
Betting-adjacent research Track how yes/no probabilities, volumes and open interest move across election, macro and sports markets over time.
Finance & crypto dashboards Feed Fed-rate, inflation, bitcoin and ETF markets into pricing dashboards or LLM pipelines that consume structured prediction data.
Agencies & data resellers Deliver a normalized Kalshi + Polymarket feed to clients without maintaining integrations to two different APIs.
๐ Automating the scraper
Connect it to Make, Zapier, Slack or Airbyte to push fresh odds into a spreadsheet, database or channel after every run. Schedule it to run every hour, or every 5 minutes, and route the output dataset anywhere you need.
๐ค Ask an AI assistant about this scraper
Paste the Actor's Store page into ChatGPT, Claude or Perplexity and ask: "How do I get cross-platform price gaps between Kalshi and Polymarket?" The README and input schema are structured so AI assistants can answer accurately from the page alone.
โ Frequently Asked Questions
Do I get every market on both exchanges?
Kalshi has ~20k+ markets, Polymarket ~5k+. Use Max markets per platform (default 300 per platform) and keep in mind Kalshi's listing is ordered so its most-liquid markets sit deep. Raise the limit if you need specific ones, and check status if you need closed markets too.
Why are the prices on the two exchanges a few cents apart?
They're separate order books. Kalshi displays last price (falling back to the mid of the best bid/ask); Polymarket yes price is the mid of best bid/ask. cross-match-record reports the real traded gap between them.
Do I need an account, cookies or proxy on either exchange? No. Every field comes from Kalshi's and Polymarket's own public APIs; no login or session required.
How do I find the same question on both exchanges?
Cross-platform matching runs when both platforms are selected and includeCrossMatch is on. It matches by shared question keywords plus close resolution dates, and deep-scans both exchanges to find overlaps that sit thousands of markets deep into the listings. Add a search term to focus coverage on a topic.
How much does it cost?
Base market summaries: $2.00 per 1,000 market rows. Each extra is billed only when you turn it on, and only for markets where real data came back: includeOrderBook adds $0.50 per 1,000 order-book records, includePriceHistory adds $0.75 per 1,000 price-history records, includeTrades adds $0.60 per 1,000 recent-trades records, and includeCrossMatch adds $1.00 per 1,000 matched pairs. Free accounts get a 10-row preview per run.
๐ Recommended Actors
Browse the rest of the PunkRecordsData catalog for more scrapers covering social media, marketplaces and pricing intelligence.
๐ก Pro Tip: browse the complete PunkRecordsData collection.
๐ Need Help? contact.punkrecordsdata@gmail.com
โ ๏ธ Disclaimer: This is an independent tool, not affiliated with, endorsed by, or sponsored by Kalshi or Polymarket. It collects only publicly available market data. Prices are informational and are not financial or trading advice.