Skip to main content
The prediction_markets.trades table is the cross-venue trade table. Grain: one row per taker fill, including Polymarket Combos (multi-leg parlays; is_parlay = TRUE in the markets dimension). Each match appears once, so SUM(amount_usd) is venue volume without any filter. Polymarket maker legs stay in the venue table (polymarket_polygon.market_trades, is_taker_side = FALSE). Three columns describe every fill:
  • price is always the probability of Yes in [0, 1], comparable across venues and sides.
  • outcome_side is the side of the market the traded contract belongs to (yes or no).
  • taker_side is whether the taker bought or sold that contract (BUY or SELL).
taker_fill_price is the price of the contract actually traded (price for a Yes contract, 1 - price for a No contract), so taker_fill_price × num_contracts = amount_usd on every row.
Kalshi nets positions and reports every fill as a buy of the side the taker ends up long, so taker_side is always BUY on Kalshi and closing a Yes position appears as a BUY with outcome_side = 'no'. Kalshi also reports one row per taker-maker match, so row counts are not comparable across venues; sums are.

Table Schema

Table sample

Query performance

block_month is the partition key. Always include a block_month or executed_at filter.

Example queries