Data
Data dictionary
Files are daily Parquet (zstd). Kalshi files are one per series per UTC day; Polymarket and Limitless books are one per market. Timestamps are UTC nanoseconds. Kalshi prices are dollars between 0 and 1, and Kalshi sizes are contracts. Schema version 1.
Layout
Files are partitioned hive-style, so DuckDB, Polars, Spark, and pyarrow can read a downloaded folder as one dataset and skip days and series you filter out.
import duckdb
duckdb.sql("""
SELECT ticker, minute, mid_close
FROM read_parquet('kalshieye-data/bbo_1m/*/*/*.parquet', hive_partitioning = true)
WHERE series = 'KXBTC15M' AND date >= '2026-10-12'
""").df()Every dataset below has a sample file. For a whole day, the free sample on Hugging Face has October 13, 2026 for seven Kalshi series in this layout, and the examples on GitHub query it in place.
| Dataset | What it holds | Plan |
|---|---|---|
book_l2 | Every price level and every change to the YES and NO bid books. Snapshot rows set a level; delta rows add to it. | Full book |
book_snap_1s | The top ten YES bid and ask levels at the end of every second in which the book changed. | Research |
bbo | Best YES bid and ask with sizes, one row each time any of the four values changes. | Research |
bbo_1m | Minute bars of the YES mid with closing bid and ask, plus trade count and volume. | Explorer |
trades | Every recorded fill with YES price, size, and taker side. | Explorer |
spot | Best bid, ask, and last for each crypto underlying on Coinbase, Bitstamp, and Kraken, every update. | Research |
markets | One row per market open at any time during the day: terms, strikes, times, tick size, rules, fees, and outcome. | Explorer |
settlements | Every market that settled during the day: result, settlement value, the underlying value it settled on, and when. | Explorer |
series | Every Kalshi series: title, category, frequency, fee schedule, settlement sources, and contract terms. | Explorer |
incidents | Every hour of the day where the recorder was blind, missed sequence numbers, or dropped messages. | Explorer |
polymarket_l2 | Every Polymarket CLOB snapshot and price-level change, for both outcome tokens of every market. | Full book |
polymarket_trades | Every Polymarket CLOB trade: outcome price, size, taker side, fee, and transaction hash. | Research |
polymarket_fills | Every OrderFilled log from the Polymarket exchange contracts on Polygon. | Research |
polymarket_markets | Every Polymarket market that was accepting CLOB orders during the day: question, outcomes, tick size, and end time. | Explorer |
chainlink | Chainlink oracle prices carried on Polymarket's real-time stream, one row per update. | Research |
limitless_l2 | Every Limitless CLOB book update. Each message is a full book, stored as one row per price level. | Full book |
limitless_markets | Every active Limitless CLOB market seen during the day. | Explorer |
Order book (L2, incremental) book_l2
Every price level and every change to the YES and NO bid books. Snapshot rows set a level; delta rows add to it.
Plan: Full book and up. Sample: CSV · Parquet
Path: flat/v1/book_l2/date={date}/series={series}/book_l2-{series}-{date}.parquet
| Column | Type | Description |
|---|---|---|
ts_recv | timestamp[ns, UTC] · ns | When the recorder received the message. Use this to order rows. |
ts_venue | timestamp[ns, UTC] · ns · nullable | Exchange timestamp on the message, when the venue sent one. |
ticker | string | Kalshi market ticker, e.g. KXBTC15M-26OCT121545-45. |
series | string | Kalshi series ticker, e.g. KXBTC15M. |
seq | int64 · nullable | Kalshi sequence number for the book message. |
is_snapshot | bool | True for rows that belong to a full book snapshot. Clear the book for this ticker on the first snapshot row of a new ts_recv, then apply its levels. |
side | string · nullable | yes or no. Kalshi books are bids only: a NO bid at p is a YES ask at 1 - p. Null on an empty snapshot (the book was cleared). |
price | float64 · USD · nullable | Price level. |
size | float64 · contracts · nullable | Snapshot rows: resting size at the level. Delta rows: signed change in size. |
- Each daily file opens with a snapshot (ts_recv = 00:00:00 UTC) of every book carried from the previous day, so a file replays on its own.
- Rows are in recorder order: ts_recv ascending for each ticker.
- Rebuild a book: on a snapshot, replace the side's levels; on a delta, add size to the level and drop levels at or below zero.
Order book snapshots (top 10, 1 second) book_snap_1s
The top ten YES bid and ask levels at the end of every second in which the book changed.
Plan: Research and up. Sample: CSV · Parquet
Path: flat/v1/book_snap_1s/date={date}/series={series}/book_snap_1s-{series}-{date}.parquet
| Column | Type | Description |
|---|---|---|
ts | timestamp[ns, UTC] · ns | End of the second (exclusive). The book as it stood at this instant. |
ticker | string | Kalshi market ticker, e.g. KXBTC15M-26OCT121545-45. |
series | string | Kalshi series ticker, e.g. KXBTC15M. |
bid_px_0 | float64 · USD · nullable | YES bid price, level 0 (0 = best). |
bid_px_1 | float64 · USD · nullable | YES bid price, level 1 (0 = best). |
bid_px_2 | float64 · USD · nullable | YES bid price, level 2 (0 = best). |
bid_px_3 | float64 · USD · nullable | YES bid price, level 3 (0 = best). |
bid_px_4 | float64 · USD · nullable | YES bid price, level 4 (0 = best). |
bid_px_5 | float64 · USD · nullable | YES bid price, level 5 (0 = best). |
bid_px_6 | float64 · USD · nullable | YES bid price, level 6 (0 = best). |
bid_px_7 | float64 · USD · nullable | YES bid price, level 7 (0 = best). |
bid_px_8 | float64 · USD · nullable | YES bid price, level 8 (0 = best). |
bid_px_9 | float64 · USD · nullable | YES bid price, level 9 (0 = best). |
bid_sz_0 | float64 · contracts · nullable | YES bid size, level 0. |
bid_sz_1 | float64 · contracts · nullable | YES bid size, level 1. |
bid_sz_2 | float64 · contracts · nullable | YES bid size, level 2. |
bid_sz_3 | float64 · contracts · nullable | YES bid size, level 3. |
bid_sz_4 | float64 · contracts · nullable | YES bid size, level 4. |
bid_sz_5 | float64 · contracts · nullable | YES bid size, level 5. |
bid_sz_6 | float64 · contracts · nullable | YES bid size, level 6. |
bid_sz_7 | float64 · contracts · nullable | YES bid size, level 7. |
bid_sz_8 | float64 · contracts · nullable | YES bid size, level 8. |
bid_sz_9 | float64 · contracts · nullable | YES bid size, level 9. |
ask_px_0 | float64 · USD · nullable | YES ask (1 - NO bid) price, level 0 (0 = best). |
ask_px_1 | float64 · USD · nullable | YES ask (1 - NO bid) price, level 1 (0 = best). |
ask_px_2 | float64 · USD · nullable | YES ask (1 - NO bid) price, level 2 (0 = best). |
ask_px_3 | float64 · USD · nullable | YES ask (1 - NO bid) price, level 3 (0 = best). |
ask_px_4 | float64 · USD · nullable | YES ask (1 - NO bid) price, level 4 (0 = best). |
ask_px_5 | float64 · USD · nullable | YES ask (1 - NO bid) price, level 5 (0 = best). |
ask_px_6 | float64 · USD · nullable | YES ask (1 - NO bid) price, level 6 (0 = best). |
ask_px_7 | float64 · USD · nullable | YES ask (1 - NO bid) price, level 7 (0 = best). |
ask_px_8 | float64 · USD · nullable | YES ask (1 - NO bid) price, level 8 (0 = best). |
ask_px_9 | float64 · USD · nullable | YES ask (1 - NO bid) price, level 9 (0 = best). |
ask_sz_0 | float64 · contracts · nullable | YES ask (1 - NO bid) size, level 0. |
ask_sz_1 | float64 · contracts · nullable | YES ask (1 - NO bid) size, level 1. |
ask_sz_2 | float64 · contracts · nullable | YES ask (1 - NO bid) size, level 2. |
ask_sz_3 | float64 · contracts · nullable | YES ask (1 - NO bid) size, level 3. |
ask_sz_4 | float64 · contracts · nullable | YES ask (1 - NO bid) size, level 4. |
ask_sz_5 | float64 · contracts · nullable | YES ask (1 - NO bid) size, level 5. |
ask_sz_6 | float64 · contracts · nullable | YES ask (1 - NO bid) size, level 6. |
ask_sz_7 | float64 · contracts · nullable | YES ask (1 - NO bid) size, level 7. |
ask_sz_8 | float64 · contracts · nullable | YES ask (1 - NO bid) size, level 8. |
ask_sz_9 | float64 · contracts · nullable | YES ask (1 - NO bid) size, level 9. |
- Only seconds with at least one book change get a row; carry the last row forward for quiet seconds.
- Asks are in YES terms: ask_px_i = 1 - (i-th best NO bid). Null means the level is empty.
- Replayed from book_l2, so it matches book_l2 exactly at each second boundary.
Top of book (every change) bbo
Best YES bid and ask with sizes, one row each time any of the four values changes.
Plan: Research and up. Sample: CSV · Parquet
Path: flat/v1/bbo/date={date}/series={series}/bbo-{series}-{date}.parquet
| Column | Type | Description |
|---|---|---|
ts_recv | timestamp[ns, UTC] · ns | When the recorder received the message. Use this to order rows. |
ts_venue | timestamp[ns, UTC] · ns · nullable | Exchange timestamp on the message, when the venue sent one. |
ticker | string | Kalshi market ticker, e.g. KXBTC15M-26OCT121545-45. |
series | string | Kalshi series ticker, e.g. KXBTC15M. |
yes_bid | float64 · USD · nullable | Best YES bid. |
yes_bid_size | float64 · contracts · nullable | Size at the best YES bid. |
yes_ask | float64 · USD · nullable | Best YES ask (1 - best NO bid). |
yes_ask_size | float64 · contracts · nullable | Size at the best YES ask. |
- Derived from book_l2 by replaying the book. Null means that side was empty.
Top of book (1-minute bars) bbo_1m
Minute bars of the YES mid with closing bid and ask, plus trade count and volume.
Plan: Explorer and up. Sample: CSV · Parquet
Path: flat/v1/bbo_1m/date={date}/series={series}/bbo_1m-{series}-{date}.parquet
| Column | Type | Description |
|---|---|---|
minute | timestamp[ns, UTC] · ns | Bar start (inclusive). |
ticker | string | Kalshi market ticker, e.g. KXBTC15M-26OCT121545-45. |
series | string | Kalshi series ticker, e.g. KXBTC15M. |
mid_open | float64 · USD · nullable | First YES mid in the minute. |
mid_high | float64 · USD · nullable | Highest YES mid in the minute. |
mid_low | float64 · USD · nullable | Lowest YES mid in the minute. |
mid_close | float64 · USD · nullable | Last YES mid in the minute. |
yes_bid_close | float64 · USD · nullable | Best YES bid at the end of the minute. |
yes_ask_close | float64 · USD · nullable | Best YES ask at the end of the minute. |
book_updates | int64 | Top-of-book changes in the minute. |
trade_count | int64 | Trades in the minute. |
trade_volume | float64 · contracts | Contracts traded in the minute. |
- Quiet minutes between a market's first and last activity in the day carry the previous close forward (book_updates = 0).
- Mid is null when either side of the book is empty.
Trades trades
Every recorded fill with YES price, size, and taker side.
Plan: Explorer and up. Sample: CSV · Parquet
Path: flat/v1/trades/date={date}/series={series}/trades-{series}-{date}.parquet
| Column | Type | Description |
|---|---|---|
ts_recv | timestamp[ns, UTC] · ns | When the recorder received the message. Use this to order rows. |
ts_venue | timestamp[ns, UTC] · ns · nullable | Exchange timestamp on the message, when the venue sent one. |
ticker | string | Kalshi market ticker, e.g. KXBTC15M-26OCT121545-45. |
series | string | Kalshi series ticker, e.g. KXBTC15M. |
trade_id | string · nullable | Kalshi trade id. |
yes_price | float64 · USD | Trade price in YES terms. |
size | float64 · contracts | Contracts traded. |
taker_side | string · nullable | yes or no. |
- Deduplicated on trade_id.
Underlying spot (crypto) spot
Best bid, ask, and last for each crypto underlying on Coinbase, Bitstamp, and Kraken, every update.
Plan: Research and up. Sample: CSV · Parquet
Path: flat/v1/spot/date={date}/asset={asset}/spot-{asset}-{date}.parquet
| Column | Type | Description |
|---|---|---|
ts_recv | timestamp[ns, UTC] · ns | When the recorder received the message. Use this to order rows. |
ts_venue | timestamp[ns, UTC] · ns · nullable | Exchange timestamp on the message, when the venue sent one. |
asset | string | Underlying symbol, e.g. BTC. |
source | string | Exchange: coinbase, bitstamp, or kraken. |
bid | float64 · USD · nullable | Best bid. |
ask | float64 · USD · nullable | Best ask. |
mid | float64 · USD · nullable | (bid + ask) / 2. |
last | float64 · USD · nullable | Last price the exchange reported. |
- One file per asset per day, sorted by ts_recv and deduplicated.
- Join to Kalshi data on ts_recv (same recorder clock). Kalshi crypto markets settle on CF Benchmarks indices; these exchange quotes are a close proxy, not the settlement source.
- Filtering by series keeps the assets those series reference (KXBTC* keeps BTC).
Markets (point-in-time universe) markets
One row per market open at any time during the day: terms, strikes, times, tick size, rules, fees, and outcome.
Plan: Explorer and up. Sample: CSV · Parquet
Path: flat/v1/markets/date={date}/markets-{date}.parquet
| Column | Type | Description |
|---|---|---|
ticker | string | Kalshi market ticker, e.g. KXBTC15M-26OCT121545-45. |
event_ticker | string · nullable | Kalshi event ticker. |
series | string | Kalshi series ticker, e.g. KXBTC15M. |
title | string · nullable | Market title. |
yes_sub_title | string · nullable | Short label for the YES outcome. |
category | string · nullable | Archive category id. |
market_type | string · nullable | binary or scalar. |
status | string · nullable | Status when the file was written. |
result | string · nullable | Settlement result (yes / no) when known. |
open_ts | timestamp[ns, UTC] · ns · nullable | Market open. |
close_ts | timestamp[ns, UTC] · ns · nullable | Last trading time. |
expected_expiration_ts | timestamp[ns, UTC] · ns · nullable | When Kalshi expects to determine the outcome. |
floor_strike | float64 · nullable | Lower strike, when the market has one. |
cap_strike | float64 · nullable | Upper strike, for between / less markets. |
strike_type | string · nullable | greater, greater_or_equal, less, between, structured, ... |
tick_structure | string · nullable | Kalshi price_level_structure, e.g. linear_cent or tapered_deci_cent. |
price_ranges | string · nullable | JSON list of {start, end, step} tick bands. |
can_close_early | bool · nullable | Whether the market can close before close_ts. |
fee_type | string · nullable | Series fee schedule: quadratic, quadratic_with_maker_fees, flat, ... |
fee_multiplier | float64 · nullable | Series fee multiplier. |
rules_primary | string · nullable | Settlement rule text. |
rules_secondary | string · nullable | Additional rule text. |
- Includes markets that later settled or closed, so it is a survivorship-free universe for that day.
- Kalshi taker fee per contract is fee_multiplier x 0.07 x P x (1 - P), rounded up to the cent per order.
- Join to the other datasets on ticker.
Settlements settlements
Every market that settled during the day: result, settlement value, the underlying value it settled on, and when.
Plan: Explorer and up. Sample: CSV · Parquet
Path: flat/v1/settlements/date={date}/settlements-{date}.parquet
| Column | Type | Description |
|---|---|---|
ticker | string | Kalshi market ticker, e.g. KXBTC15M-26OCT121545-45. |
event_ticker | string · nullable | Kalshi event ticker. |
series | string | Kalshi series ticker, e.g. KXBTC15M. |
category | string · nullable | Archive category id. |
result | string · nullable | yes, no, or void. |
settlement_value | float64 · USD · nullable | Payout per YES contract. |
expiration_value | string · nullable | Value of the underlying Kalshi settled on (e.g. the BRTI average or the temperature). |
close_ts | timestamp[ns, UTC] · ns · nullable | Last trading time. |
settlement_ts | timestamp[ns, UTC] · ns · nullable | When Kalshi settled the market. |
ts_recv | timestamp[ns, UTC] · ns · nullable | When the recorder first saw the settlement. |
floor_strike | float64 · nullable | Lower strike. |
cap_strike | float64 · nullable | Upper strike. |
strike_type | string · nullable | Strike type. |
coin_price_start | float64 · USD · nullable | Crypto markets: underlying at the window start, when recorded. |
coin_price_end | float64 · USD · nullable | Crypto markets: underlying at the window end, when recorded. |
- A market appears on the UTC day it settled.
Series reference series
Every Kalshi series: title, category, frequency, fee schedule, settlement sources, and contract terms.
Plan: Explorer and up. Sample: CSV · Parquet
Path: flat/v1/series/date={date}/series-{date}.parquet
| Column | Type | Description |
|---|---|---|
series | string | Kalshi series ticker, e.g. KXBTC15M. |
title | string · nullable | Series title. |
category | string · nullable | Kalshi category. |
frequency | string · nullable | fifteen_min, hourly, daily, weekly, custom, ... |
fee_type | string · nullable | Fee schedule. |
fee_multiplier | float64 · nullable | Fee multiplier. |
settlement_sources | string · nullable | JSON list of {name, url}. |
contract_url | string · nullable | Product certification PDF. |
contract_terms_url | string · nullable | Contract terms PDF. |
tags | string · nullable | Comma-separated Kalshi tags. |
- Snapshot of Kalshi's series list taken when the day was compacted.
Recorder incidents incidents
Every hour of the day where the recorder was blind, missed sequence numbers, or dropped messages.
Plan: Explorer and up. Sample: CSV · Parquet
Path: flat/v1/incidents/date={date}/incidents-{date}.parquet
| Column | Type | Description |
|---|---|---|
hour_start | timestamp[ns, UTC] · ns | Start of the hour. |
coverage_pct | float64 · % · nullable | Share of the hour the recorder was connected and in sequence. |
blind_s | int64 · s | Seconds with no connection. |
seq_missing | int64 | Kalshi sequence numbers never received. |
dropped | int64 | Messages dropped by the recorder. |
detail | string · nullable | What happened. |
- Written for every compacted day; an empty file means every hour was clean.
- Book data resumes from a fresh snapshot after each gap, so books are never stitched across one.
Polymarket order book polymarket_l2
Every Polymarket CLOB snapshot and price-level change, for both outcome tokens of every market.
Plan: Full book and up. Sample: CSV · Parquet
Path: flat/v1/polymarket_l2/date={date}/series={series}/polymarket_l2-{series}-{date}.parquet
| Column | Type | Description |
|---|---|---|
ts_recv | timestamp[ns, UTC] · ns | When the recorder received the message. Use this to order rows. |
ts_venue | timestamp[ns, UTC] · ns · nullable | Exchange timestamp on the message, when the venue sent one. |
ticker | string | Outcome token id. |
series | string | Condition id. One file per market per day. |
is_snapshot | bool | True for a full book snapshot. Clear that token's book, then apply every snapshot row with this ts_recv. |
side | string · nullable | bid or ask. The venue's BUY is bid and SELL is ask. |
price | float64 · USD · nullable | Outcome-token price. |
size | float64 · shares · nullable | Shares resting at this price after the event. Zero removes the level. |
tick_size | float64 · nullable | Minimum price increment, when the message included one. |
hash | string · nullable | Book hash on the venue message. |
- This is the CLOB book tape: a snapshot replaces the token book, and a price change sets the new size at one price.
- Polymarket sends an absolute size, not a signed delta.
- Both outcome tokens of a market are in the same file.
Polymarket trades polymarket_trades
Every Polymarket CLOB trade: outcome price, size, taker side, fee, and transaction hash.
Plan: Research and up. Sample: CSV · Parquet
Path: flat/v1/polymarket_trades/date={date}/series={series}/polymarket_trades-{series}-{date}.parquet
| Column | Type | Description |
|---|---|---|
ts_recv | timestamp[ns, UTC] · ns | When the recorder received the message. Use this to order rows. |
ts_venue | timestamp[ns, UTC] · ns · nullable | Exchange timestamp on the message, when the venue sent one. |
ticker | string | Outcome token id. |
series | string | Condition id. |
price | float64 · USD | Trade price of the outcome token. |
size | float64 · shares | Shares traded. |
side | string · nullable | BUY or SELL, the taker side on that outcome token. |
fee_rate_bps | float64 · bps · nullable | Fee rate in basis points, when the venue sent one. |
transaction_hash | string · nullable | On-chain transaction hash of the fill, when the venue sent one. |
- Deduplicated on transaction hash, token, price, and size.
Polymarket on-chain fills polymarket_fills
Every OrderFilled log from the Polymarket exchange contracts on Polygon.
Plan: Research and up. Sample: CSV · Parquet
Path: flat/v1/polymarket_fills/date={date}/series={series}/polymarket_fills-{series}-{date}.parquet
| Column | Type | Description |
|---|---|---|
ts_recv | timestamp[ns, UTC] · ns | When the recorder received the message. Use this to order rows. |
ts_venue | timestamp[ns, UTC] · ns · nullable | Exchange timestamp on the message, when the venue sent one. |
ticker | string | Outcome token id. |
series | string | Outcome token id. One file per token per day. |
exchange | string | Exchange contract that emitted the log. |
order_hash | string | Hash of the order this log fills. |
maker | string | Maker of that order. |
taker | string | Taker. The exchange address on a summary log. |
side | string | BUY or SELL, the side of this order. |
price | float64 · USD · nullable | Collateral per share. |
size | float64 · shares · nullable | Shares filled. |
fee_usdc | float64 · USDC | Fee in collateral, 6-decimal units scaled to USDC. |
maker_amount | string | Raw maker amount filled, 6-decimal token units. |
taker_amount | string | Raw taker amount filled, 6-decimal token units. |
fee | string | Raw fee, 6-decimal collateral units. |
is_summary | bool | True when this log is the match total and the taker is the exchange. The other logs are the individual maker fills. Sum one of the two, not both. |
transaction_hash | string | Polygon transaction hash. |
block_number | int64 | Polygon block. |
log_index | int64 | Log index in that transaction. |
- Recorded from the CTF Exchange, the Neg Risk CTF Exchange, and the V2 protocol exchange.
- A match writes one log per resting order plus one summary log. is_summary marks the summary.
- The CLOB trade tape is separate. This is the settlement log.
Polymarket markets polymarket_markets
Every Polymarket market that was accepting CLOB orders during the day: question, outcomes, tick size, and end time.
Plan: Explorer and up. Sample: CSV · Parquet
Path: flat/v1/polymarket_markets/date={date}/polymarket_markets-{date}.parquet
| Column | Type | Description |
|---|---|---|
ts_recv | timestamp[ns, UTC] · ns | When this snapshot of the market was recorded. |
ticker | string | Condition id. |
slug | string · nullable | Market slug. |
question | string · nullable | Market question. |
outcomes | string · nullable | JSON list of {token_id, outcome}. |
tick_size | float64 · nullable | Minimum price increment. |
neg_risk | bool · nullable | Whether the market is neg-risk. |
end_ts | timestamp[ns, UTC] · ns · nullable | Scheduled end. |
accepting_orders | bool · nullable | Whether the book was accepting orders. |
- One row per condition id: the last snapshot recorded that day.
Chainlink prices chainlink
Chainlink oracle prices carried on Polymarket's real-time stream, one row per update.
Plan: Research and up. Sample: CSV · Parquet
Path: flat/v1/chainlink/date={date}/asset={asset}/chainlink-{asset}-{date}.parquet
| Column | Type | Description |
|---|---|---|
ts_recv | timestamp[ns, UTC] · ns | When the recorder received the message. Use this to order rows. |
ts_venue | timestamp[ns, UTC] · ns · nullable | Exchange timestamp on the message, when the venue sent one. |
asset | string | Base asset, e.g. BTC. |
symbol | string | Pair as published, e.g. btc/usd. |
price | float64 · USD | Oracle price. |
price_exact | string · nullable | Full-accuracy integer the stream sent, when present. |
- One file per asset per day.
- The same asset filter as spot: a KXBTC* selection keeps BTC.
Limitless order book limitless_l2
Every Limitless CLOB book update. Each message is a full book, stored as one row per price level.
Plan: Full book and up. Sample: CSV · Parquet
Path: flat/v1/limitless_l2/date={date}/series={series}/limitless_l2-{series}-{date}.parquet
| Column | Type | Description |
|---|---|---|
ts_recv | timestamp[ns, UTC] · ns | When the recorder received the message. Use this to order rows. |
ts_venue | timestamp[ns, UTC] · ns · nullable | Exchange timestamp on the message, when the venue sent one. |
ticker | string | Market slug. |
series | string | Market slug. One file per market per day. |
token_id | string · nullable | Outcome token id, when the book included one. |
is_snapshot | bool | True for every row. Each timestamp replaces that market's book. |
side | string · nullable | bid or ask. |
price | float64 · USD · nullable | Outcome price. |
size | float64 · nullable | Size at this price, in the venue's book units. |
- Apply every row that shares a ts_recv as one snapshot, then discard the previous book.
- An empty book is a single row with a null side.
Limitless markets limitless_markets
Every active Limitless CLOB market seen during the day.
Plan: Explorer and up. Sample: CSV · Parquet
Path: flat/v1/limitless_markets/date={date}/limitless_markets-{date}.parquet
| Column | Type | Description |
|---|---|---|
ts_recv | timestamp[ns, UTC] · ns | When this snapshot was recorded. |
ticker | string | Market slug. |
title | string · nullable | Market title. |
expiration | string · nullable | Expiration as published by Limitless. |
- One row per slug: the last snapshot recorded that day.
Downloading
GET /api/v1/datasets # schemas, coverage, plans (public)
POST /api/v1/requests/estimate # size a selection (public)
GET /api/v1/files?dataset=bbo_1m&start_date=2026-10-12&end_date=2026-10-16&series=KXBTC*
POST /api/v1/files/links {"keys": ["flat/v1/bbo_1m/..."]}A link is valid for an hour. Each file counts toward your monthly download allowance once per calendar month, however many times you fetch it. Every file has a sha256 in the listing; the Python client and the generated scripts check it and skip files you already have. The calls are list files, file links, and estimate. Coverage totals are coverage.