prediction_markets schema is a cross-venue unified dataset that merges Polymarket and Kalshi onto one schema. Use it when you want to write a single query that returns results across both venues without per-venue UNIONs.
Maintained by: Dune · Refresh: ~1 hour · Venues: Polymarket (Polygon) + Kalshi
Available Tables
prediction_markets.markets
Unified market dimension across Polymarket and Kalshi: names, category, status, resolution and parlay legs
prediction_markets.trades
One row per taker fill across both venues with normalized P(Yes) pricing, side traded and taker action
prediction_markets.ohlcv_hourly
One Yes-side candle per market-hour across both venues, prices in [0, 1] probability space
prediction_markets.open_interest_hourly
Hourly open interest and traded volume per single market across both venues
Identifier conventions
Every row carries avenue column ('polymarket' or 'kalshi'). Identifiers are venue-scoped: market_id is a Polymarket condition_id (or combo condition ID for Polymarket Combos) when venue = 'polymarket' and a Kalshi ticker when venue = 'kalshi'. Always join on (venue, market_id). event_id and series_id follow the same rule; a level the venue does not have (Polymarket series, Kalshi outcome tokens) is NULL rather than a synthesized ID.
Notes
marketsis the dimension;trades,ohlcv_hourlyandopen_interest_hourlyare facts.tradesandohlcv_hourlycarry no market names or attributes beyondcategory, andopen_interest_hourlycarries none at all. Joinmarketson(venue, market_id)for labels, category, status and resolution.- Every market is presented from its Yes side. Yes is the venue’s positional side 0 (
outcome_index = 0on Polymarket), never a label heuristic. For team-vs-team markets checkyes_outcome_nameto see which side is Yes. priceintradesand OHLCV is always P(Yes) in[0, 1]. Intrades,outcome_sidesays which side was traded,taker_sidewhether the taker bought or sold it, andtaker_fill_priceis the price of that contract, sotaker_fill_price × num_contracts = amount_usd.categoryis a unified enum (sports,crypto,politics,finance,technology,culture,weather,world,health,other), plusmixedfor parlays whose legs span several categories. The raw upstream classification is preserved inmarkets.category_native.- Resolution uses one vocabulary everywhere:
yes,no,void(refund) andscalar(fractional payout) inmarkets.resolved_outcomeandohlcv_hourly.market_outcome, which also readsunresolvedbefore settlement. - Parlays are included from both venues: Kalshi parlays and Polymarket Combos (multi-leg parlays), flagged with
is_parlay = TRUE. For like-for-like single-market comparisons, filteris_parlay = FALSE.