Skip to main content

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.

The prediction_markets.trades table is the cross-venue per-fill trade table. Grain: one row per individual fill. Prices are normalized to P(Yes) in [0, 1] so trades are directly comparable across venues and outcome sides. The taker’s actual fill price is preserved in taker_fill_price.

Table Schema

ColumnTypeDescription
venueVARCHARpolymarket or kalshi
executed_atTIMESTAMPTimestamp of the fill
block_monthDATEFirst day of the calendar month of executed_at (partition key)
trade_idVARCHARUnique fill identifier within a venue
market_idVARCHARPolymarket condition_id / Kalshi ticker
event_idVARCHARParent event identifier. Always populated for Kalshi; join prediction_markets.markets to retrieve for Polymarket
outcome_idVARCHARIdentifier of the side that was traded
taker_sideVARCHARyes or no, the side the taker bought
priceDOUBLEP(Yes) at the time of the fill, in [0, 1]
taker_fill_priceDOUBLEActual price paid by the taker (price when taker_side='yes', 1 - price when taker_side='no')
num_contractsDOUBLENumber of contracts filled (1 contract = $1 payout)
amount_usdDOUBLEUSD notional of the fill (price × num_contracts)
fee_usdDOUBLETrading fee in USD. NULL on the small share of Kalshi rows whose series has no fee_type configured (~0.5%)
outcome_nativeVARCHAROriginal side label from the venue
is_taker_sideBOOLEANTRUE on the taker leg of a fill. Filter WHERE is_taker_side to get one-sided volume on Polymarket; always TRUE for Kalshi (safe to apply uniformly across venues)
tx_hashVARCHAROn-chain transaction hash (0x-hex). Polymarket only; NULL for Kalshi
maker_addressVARCHARMaker wallet address (0x-hex). Polymarket only
taker_addressVARCHARTaker wallet address (0x-hex). Polymarket only
_updated_atTIMESTAMPWhen this row was last written by the pipeline

Table sample

Query performance

block_month is the partition key. Always include a block_month or executed_at filter.
-- ✅ Good: time-bounded
SELECT * FROM prediction_markets.trades
WHERE block_month >= DATE '2026-05-01'
  AND venue = 'kalshi'

Example query

-- Top markets by USD volume across both venues (last 7 days)
SELECT
  venue,
  market_id,
  COUNT(*) AS num_trades,
  SUM(amount_usd) AS total_volume_usd
FROM prediction_markets.trades
WHERE executed_at >= NOW() - INTERVAL '7' DAY
GROUP BY 1, 2
ORDER BY 4 DESC
LIMIT 20