Prediction markets - Kalshi + Polymarket prices (public APIs)
Pricing
from $5.00 / 1,000 records
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
Maintained by CommunityActor 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
| Kalshi | https://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 |
| Polymarket | https://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 cadence | Live 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 guards | Every 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 |
| Rate | At most one request per request_interval_ms (default 500 ms); back-off on 429/5xx |
| Identification | User-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
| Field | Type | Meaning |
|---|---|---|
source | both / kalshi / polymarket | Default both (Kalshi gets the first half of the row budget, Polymarket the rest) |
status | open / closed / settled / all | Default open = trading now. Polymarket has one closed flag for closed and settled |
search | string | Optional. Kalshi: substring match on event/market titles while paging; Polymarket: the venue's own search |
category | string | Optional substring. Kalshi event category (Economics, Politics, Sports, …); Polymarket tag label/slug or series |
series_ticker | string | Optional, Kalshi only (e.g. KXFED). When set, Polymarket is skipped |
max_records | integer | Default 300 |
request_interval_ms | integer | Default 500 (floor 250) |
contact_email | string | Sent 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)
| Event | Price |
|---|---|
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.