Prediction markets - Kalshi + Polymarket prices (public APIs) avatar

Prediction markets - Kalshi + Polymarket prices (public APIs)

Pricing

from $5.00 / 1,000 records

Go to Apify Store
Prediction markets - Kalshi + Polymarket prices (public APIs)

Prediction markets - Kalshi + Polymarket prices (public APIs)

Current prices, volume and liquidity for open Kalshi and Polymarket markets, normalised to one row per market (yes/no price 0-1, event, category, close date, URL). Filter by venue, status, text, category or Kalshi series. Public read-only APIs; market data only, no trading.

Pricing

from $5.00 / 1,000 records

Rating

0.0

(0)

Developer

RetrainMap Team

RetrainMap Team

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Prediction markets — Kalshi + Polymarket prices (public APIs)

One normalised row per market from the public, read-only listings of Kalshi and Polymarket: event, market question, category, the current yes/no price (0–1 USD per share, i.e. the market-implied probability), bid/ask, last trade, volume, liquidity, open interest, open/close dates, status and a link. Filter by venue, status, free text, category or Kalshi series ticker.

Market data only, for information. The Actor holds no account at either venue, sends no order, and nothing here is advice or an invitation to wager. Availability of the venues themselves depends on where you are; reuse of the data is governed by the Kalshi and Polymarket terms of service — check them before redistributing.

Data source and status

Kalshihttps://api.elections.kalshi.com/trade-api/v2/events?with_nested_markets=true (status / series filters, cursor paging, 100 events per request). Unauthenticated read access, as documented by Kalshi. The old host trading-api.kalshi.com answers 401 "API has been moved" — this Actor uses the current one
Polymarkethttps://gamma-api.polymarket.com/events (active/closed filters, sorted by 24-hour volume, 25 events per request with nested markets and tags) and /public-search?q= when a search text is given. Public Gamma API, no key
Refresh cadenceLive on every run — prices are read at fetch time (fetched_at on each row). Kalshi and Polymarket quotes move continuously; a row is a snapshot, not a feed
Response guardsEvery field a row depends on must be present with the type measured on 2026-09-04 (Kalshi *_dollars price strings, *_fp quantities; Polymarket outcomes / outcomePrices JSON strings). Anything else fails the run loudly instead of writing guessed values
RateAt most one request per request_interval_ms (default 500 ms); back-off on 429/5xx
IdentificationUser-Agent: RetrainMap-prediction-markets/0.1 (https://apify.com/retrainmap; <contact>) plus the contact address in the standard From: header

Honesty note: Kalshi's API does not return the web-page slug of a market, so the Kalshi url is the API resource for that market (/trade-api/v2/markets/<ticker>), not a kalshi.com page; use series / event_id / market_id to find it on the site. Polymarket rows link to the market page (polymarket.com/event/<event>/<market>).

Input

FieldTypeMeaning
sourceboth / kalshi / polymarketDefault both (Kalshi gets the first half of the row budget, Polymarket the rest)
statusopen / closed / settled / allDefault open = trading now. Polymarket has one closed flag for closed and settled
searchstringOptional. Kalshi: substring match on event/market titles while paging; Polymarket: the venue's own search
categorystringOptional substring. Kalshi event category (Economics, Politics, Sports, …); Polymarket tag label/slug or series
series_tickerstringOptional, Kalshi only (e.g. KXFED). When set, Polymarket is skipped
max_recordsintegerDefault 300
request_interval_msintegerDefault 500 (floor 250)
contact_emailstringSent in the User-Agent and From: header

Example — Kalshi Fed-rate markets only:

{ "source": "kalshi", "series_ticker": "KXFED", "max_records": 50 }

Output (dataset row)

source, market_id (Kalshi ticker / Polymarket market id), event_id, series, event_title, market_title, market_subtitle, category, tags (Polymarket), market_type, outcomes, outcome_prices, yes_price, no_price (0–1), price_basis (last_trade, midpoint or outcome_prices), yes_bid, yes_ask, no_bid, no_ask, last_price, volume, volume_24h, liquidity, open_interest (Kalshi), open_time, close_time, expiration_time, status (the venue's own value), result (Kalshi, once settled), url, fetched_at.

Kalshi yes_price is the last trade price when the market has traded, otherwise the yes bid/ask midpoint when both sides are quoted, otherwise null; no_price is 1 − yes_price. Polymarket yes_price/no_price are the venue's outcomePrices for the Yes/No outcomes; for markets whose outcomes are not Yes/No the first outcome's price is reported as yes_price and the full outcomes/outcome_prices lists are on the row. Polymarket yes_bid/yes_ask are the venue's best bid/ask for the first outcome; markets without prices (not yet deployed) are skipped and counted in the run summary. A run summary (counts per venue, filters, request count) is stored as RUN_SUMMARY in the run's key-value store.

Pricing (pay per event)

EventPrice
run-start — once per run$0.10
record — per row written$0.005

The default run (300 rows) costs $1.60. Rows stop when your run's maximum charge is reached; the run summary says so.

Operator

Steelyard Ventures LLC (RetrainMap) — info@steelyardclinical.com. The Actor writes only to its own dataset and key-value store; it stores no credentials and sends nothing but GET requests.