> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dune.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Cross-venue

> Curated cross-venue prediction market dataset that unifies Polymarket and Kalshi onto a single schema.

The `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.

<Info>
  **Maintained by:** Dune · **Refresh:** \~1 hour · **Venues:** Polymarket (Polygon) + Kalshi
</Info>

## Available Tables

<CardGroup cols={2}>
  <Card title="prediction_markets.markets" icon="database" href="/data-catalog/curated/prediction-markets/prediction_markets/markets">
    Unified market dimension across Polymarket and Kalshi: names, category, status, resolution and parlay legs
  </Card>

  <Card title="prediction_markets.trades" icon="database" href="/data-catalog/curated/prediction-markets/prediction_markets/trades">
    One row per taker fill across both venues with normalized P(Yes) pricing, side traded and taker action
  </Card>

  <Card title="prediction_markets.ohlcv_hourly" icon="database" href="/data-catalog/curated/prediction-markets/prediction_markets/ohlcv_hourly">
    One Yes-side candle per market-hour across both venues, prices in \[0, 1] probability space
  </Card>

  <Card title="prediction_markets.open_interest_hourly" icon="database" href="/data-catalog/curated/prediction-markets/prediction_markets/open_interest_hourly">
    Hourly open interest and traded volume per single market across both venues
  </Card>
</CardGroup>

## Identifier conventions

Every row carries a `venue` 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

* `markets` is the dimension; `trades`, `ohlcv_hourly` and `open_interest_hourly` are facts. `trades` and `ohlcv_hourly` carry no market names or attributes beyond `category`, and `open_interest_hourly` carries none at all. Join `markets` on `(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 = 0` on Polymarket), never a label heuristic. For team-vs-team markets check `yes_outcome_name` to see which side is Yes.
* `price` in `trades` and OHLCV is always P(Yes) in `[0, 1]`. In `trades`, `outcome_side` says which side was traded, `taker_side` whether the taker bought or sold it, and `taker_fill_price` is the price of that contract, so `taker_fill_price × num_contracts = amount_usd`.
* `category` is a unified enum (`sports`, `crypto`, `politics`, `finance`, `technology`, `culture`, `weather`, `world`, `health`, `other`), plus `mixed` for parlays whose legs span several categories. The raw upstream classification is preserved in `markets.category_native`.
* Resolution uses one vocabulary everywhere: `yes`, `no`, `void` (refund) and `scalar` (fractional payout) in `markets.resolved_outcome` and `ohlcv_hourly.market_outcome`, which also reads `unresolved` before 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, filter `is_parlay = FALSE`.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.