> ## 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 view 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:** \~24 hours · **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 table across Polymarket and Kalshi
  </Card>

  <Card title="prediction_markets.trades" icon="database" href="/data-catalog/curated/prediction-markets/prediction_markets/trades">
    Per-fill trade activity across both venues with normalized P(Yes) pricing
  </Card>

  <Card title="prediction_markets.ohlcv_hourly" icon="database" href="/data-catalog/curated/prediction-markets/prediction_markets/ohlcv_hourly">
    Hourly OHLCV bars across both venues, prices in \[0, 1] probability space
  </Card>
</CardGroup>

## Identifier conventions

Every row carries a `venue` column (`'polymarket'` or `'kalshi'`). Identifiers are venue-scoped: `market_id` is a Polymarket `condition_id` when `venue = 'polymarket'` and a Kalshi `ticker` when `venue = 'kalshi'`. Always join on `(venue, market_id)`.

## Notes

* `price` in `trades` and OHLCV is always normalized to P(Yes) in `[0, 1]`. To recover the taker's actual fill price, use `taker_fill_price` (Yes side) or `1 - price` (No side).
* `category` is a unified enum (`sports`, `crypto`, `politics`, `finance`, `technology`, `culture`, `weather`, `world`, `health`, `other`). The raw upstream category is preserved in `category_native`.
* For fair cross-venue comparisons, filter `is_parlay = FALSE` (Polymarket doesn't host parlays as packaged markets).
