Prediction Markets Scraper – Kalshi + Polymarket Odds & Prices avatar

Prediction Markets Scraper – Kalshi + Polymarket Odds & Prices

Pricing

from $1.00 / 1,000 market records

Go to Apify Store
Prediction Markets Scraper – Kalshi + Polymarket Odds & Prices

Prediction Markets Scraper – Kalshi + Polymarket Odds & Prices

Kalshi and Polymarket prediction markets in one normalized table: question, yes/no price, bid/ask, volume, liquidity, close time, result. Politics, sports, crypto, economics and Kalshi weather markets (KXHIGH/KXLOW daily temperature). Public APIs, no login. Pay only for records delivered.

Pricing

from $1.00 / 1,000 market records

Rating

0.0

(0)

Developer

Tit Slobodjanac

Tit Slobodjanac

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

2 days ago

Last modified

Share

Prediction Markets Scraper — Kalshi + Polymarket in one table

Pull live odds and settled results from Kalshi and Polymarket into one normalized dataset: question, yes/no price, best bid and ask, spread, volume, 24-hour volume, liquidity, open interest, open/close time, result and a link to the market. Filter by keyword, category, Kalshi series or Polymarket tag. Optional order-book depth.

No Kalshi account, no Polymarket wallet, no API key. Data comes straight from both exchanges' public JSON APIs (Kalshi trade API v2, Polymarket Gamma + CLOB). No login, no cookies, no browser, no proxies — which is why it is fast and why runs do not fail.

Why this one

  • It works every run. No headless browser and no scraping of HTML that changes. The only failure mode is an exchange API outage, and then the run fails loudly instead of returning an empty dataset.
  • One schema for both exchanges. A Kalshi contract and a Polymarket market come back with the same field names, so you can join, compare and spot price gaps without mapping two formats.
  • Real markets, not parlay noise. Kalshi lists thousands of auto-generated multi-leg combinations (KXMVE…). They are excluded by default; flip excludeMultiLeg if you want them.
  • Pay only for records you receive. $1 per 1,000 market records. Nothing for a run that returns nothing.

What people use it for

  • Arbitrage and cross-exchange comparison — same event, two prices, one table.
  • Trading research and backtests — settled markets with results and close times, pulled daily on a schedule.
  • Dashboards and newsletters — top markets by 24-hour volume in politics, sports, crypto, economics, commodities, weather.
  • Weather markets — every Kalshi daily high/low (KXHIGH*, KXLOW*) and hourly (KXTEMP*) temperature bracket for 50+ cities; pair with the Kalshi Weather Index actor for the settlement series itself.
  • Alerts — schedule hourly, compare yesPrice with the previous run, push a Slack/Discord message through an Apify integration when a market moves.
  • AI agents — ask "what does the market think about X?" and get numbers, not vibes.

Input

{
"platforms": ["kalshi", "polymarket"],
"status": "open",
"keywords": ["fed", "bitcoin"],
"categories": ["economics", "crypto"],
"minVolume": 1000,
"maxItems": 500,
"includeOrderbook": false
}
FieldWhat it does
platformskalshi, polymarket or both (default both).
statusopen (live prices), settled (results) or both.
keywordsKeep markets whose question, event title or ticker contains any keyword.
categoriesKeep markets whose category/tag contains any word: politics, sports, crypto, economics, weather, entertainment, science, companies, world…
minVolume, minLiquidityDrop thin or toy markets.
maxItemsCost cap. Default 500.
includeOrderbookAttach top 10 levels per market (+$1 per 1,000, one extra call per market).
lookbackDaysFor settled Kalshi markets: how far back by close time (default 7).
excludeMultiLegHide Kalshi parlay combinations (default on).
kalshiSeriesTickersExact tickers (KXBTC, KXFED, KXNBA) or prefixes with *: KXHIGH* = every daily-high temperature city, KXLOW* = every daily-low city (pair with categories: ["weather"] to skip the Lowe's earnings series KXLOW).
polymarketTagIdsRaw tag IDs from gamma-api.polymarket.com/tags when you need a precise tag.
languageen, es or pt: Kalshi market titles and rules in Spanish or Portuguese.
archiveDatasetNameAlso append every record to a named dataset in your account. Schedule the run and the dataset becomes a price and settlement history that outlives Kalshi's ~68-day API window. No extra charge.

A categories filter on Kalshi now scans exactly the series in that category (weather → 367 series, commodities → 81), so small categories are never missed. Very large categories (sports, ~3,600 series) fall back to the generic scan; add kalshiSeriesTickers such as KXNBA* to narrow.

Output

One row per market:

{
"platform": "polymarket",
"id": "4000248",
"ticker": "lol-hle1-t1-2026-09-02",
"question": "LoL: Hanwha Life Esports vs T1 (BO5) - LCK Playoffs",
"eventTitle": "LoL: Hanwha Life Esports vs T1 (BO5) - LCK Playoffs",
"category": "Esports",
"status": "open",
"outcomes": ["Hanwha Life Esports", "T1"],
"outcomePrices": [0.565, 0.435],
"yesPrice": 0.565,
"noPrice": 0.435,
"yesBid": 0.56,
"yesAsk": 0.57,
"lastPrice": 0.56,
"spread": 0.01,
"volume": 2009194.56,
"volume24h": 1926235.0,
"liquidity": 79729.05,
"openInterest": 4529841.49,
"priceChange1h": 0.22,
"priceChange24h": -0.08,
"openTime": "2026-08-30T12:20:38Z",
"closeTime": "2026-09-02T14:00:00Z",
"result": null,
"url": "https://polymarket.com/event/lol-hle1-t1-2026-09-02/lol-hle1-t1-2026-09-02",
"fetchedAt": "2026-09-02T11:50:00.000Z"
}

Kalshi rows carry the same fields plus noBid / noAsk, eventId (event ticker) and seriesId (series ticker). Prices are in dollars per contract (0–1). result is yes/no on Kalshi and the winning outcome name on Polymarket. With includeOrderbook an orderbook object is added: { yesBids: [{price,size}…], noBids | yesAsks: […] }.

Run it from code

curl -X POST "https://api.apify.com/v2/acts/gratified_ashram~prediction-markets-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"platforms":["kalshi","polymarket"],"categories":["politics"],"maxItems":200}'

Works the same from the Apify JavaScript/Python clients, Make, Zapier, n8n, or on a schedule in the Console.

FAQ

Do I need a Kalshi or Polymarket account? No. Both expose public market-data APIs; nothing here trades or logs in.

How fresh are the prices? As fresh as the exchange API at the moment of the run — typically seconds. Schedule the run as often as you like.

Can I get historical price series? Kalshi's API only serves roughly the last 68 days of settlements and no price history; Polymarket serves resolved markets at coarse granularity. Set archiveDatasetName and schedule the run (hourly for prices, daily for settlements): every run appends to one dataset in your account, and after 68 days you hold data the API no longer has. Runs by the maintainer have been archiving Kalshi weather, politics and sports since September 2026; open an issue if you need a slice of that.

Why is Kalshi's category sometimes empty? Categories come from the series list; a brand-new series may not be in it yet.

Pricing

$1.00 per 1,000 market records, plus $1.00 per 1,000 order books when you ask for depth. Platform usage is included. A run that returns no records costs nothing.


Found it useful? A short review on the Actor page helps others find it. Missing a field or an exchange? Open an issue on the Issues tab.