Skip to main content
The kalshi.open_interest_hourly table provides hourly open interest and traded volume per Kalshi single market. Grain: one row per (hour, market_id), with a row for every hour from the market’s first open contract to its settlement. An unsettled market runs to its expected expiration. Open interest is a level at the end of the hour; volume is the flow within it. The layout matches polymarket_polygon.open_interest_hourly and hip4_hyperliquid.open_interest_hourly. Open interest comes from the snapshots on Kalshi’s live ticker stream. It is not rebuilt from trades. An hour with no update carries the last published value. Coverage starts on May 11, 2026, when the stream came online, so there is no earlier history. Every Kalshi contract has one Yes holder and one No holder, so the two sides are always equal. As a result, summing market_oi_yes_contracts across markets gives the same total as the example query. Every row is the state at the end of its hour. A settled market has no open interest, so the settlement hour reads zero and is the market’s last row. The latest hours show up once Kalshi’s settlements through those hours are recorded, so the table runs a little behind real time.
Parlays are not included, so totals cover single markets only. A market nobody has ever held has no rows.
event_oi_contracts is repeated on every member row of an event. Summing it across members overstates event open interest. Take it once per event_id and hour.
Prices are in kalshi.ohlcv_hourly.

Table Schema

Table sample

Query performance

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

Example query