Skip to main content
The prediction_markets.open_interest_hourly table provides hourly open interest and traded volume per market across Polymarket and Kalshi. Grain: one row per (venue, hour, market_id), with a row for every hour from the market’s first open contract to the hour it settles. Open interest is a level at the end of the hour; volume is the flow within it. Every row is the state at the end of its hour, so open interest reads zero in the settlement hour. The table is a union of polymarket_polygon.open_interest_hourly and kalshi.open_interest_hourly, which share one layout. Those pages explain how each venue’s figures are built. Hyperliquid HIP-4 is not included yet; use hip4_hyperliquid.open_interest_hourly.
Polymarket Combos and Kalshi parlays are not included, so totals cover single markets only.
For total open interest, take event_oi_contracts once per (venue, COALESCE(event_id, market_id), hour), as in the example below. Don’t sum it across the members of an event, because it is repeated on every member row. Don’t sum market_oi_yes_contracts across Polymarket event members either. Converting No tokens mints Yes tokens of every sibling outcome without adding collateral, so that sum can overstate the money at stake several times over. On Kalshi the two methods agree.
Market names and attributes are in prediction_markets.markets and prices in prediction_markets.ohlcv_hourly, both joined on (venue, market_id).

Table Schema

Table sample

Query performance

block_month is the partition key. Always include a block_month or hour filter, and a venue filter when you only need one venue.

Example query