Shape
Each row is the complete orderbook for one market outcome at one source timestamp. It replaces both sides of the previous book; it is not a level update. Orderbook snapshots are event-driven, not sampled at a fixed interval. Probalytics processes the venue’s ordered event stream, applies each change to the reconstructed book, and publishes a new complete snapshot when the book changes.VERIFIED snapshots are thoroughly checked and guarantee that the orderbook is correct. A quiet market can therefore have a long time between rows without any missing data.
Orderbook reconstruction has more moving parts than our other datasets. If anything here is unclear, ask us in the Probalytics Telegram channel or email support@probalytics.io. Include the
market_id, outcome.id, and time range when asking about a specific series.Reading a snapshot
Every row is a complete, independently usable orderbook.bids contains all bids present at that moment, and asks contains all asks. You do not need to apply the row to an earlier snapshot or reconstruct missing levels.
An empty bids or asks array means there were no orders on that side of the book. It does not mean “unchanged.”
Ordering matters when building a time series:
- Read one
(market_id, outcome.id)series at a time. - Order snapshots by
timestamp, thenpath_index. - If duplicate copies of the same snapshot exist, keep the one with the latest
indexed_at. - When
continuity = RESET, treat that row as a fresh starting point. If an earlier row exists, do not calculate a change between the two rows or forward-fill values from the earlier row. Continue normally from theRESETrow.
State and continuity
state and continuity answer different questions:
state: how was this row validated within its emitted path?continuity: can this path be connected to the previously published dataset state?
Ordering rows
Read one(market_id, outcome.id) series at a time and order it by timestamp, then path_index. Several reconstructed states can share a timestamp; path_index orders those states and starts again at 0 for the next update sequence.
indexed_at is not source-event order. If the same row identity was written more than once, keep the copy with the latest indexed_at.
RESET means Probalytics cannot connect this row to a preceding published row. It does not describe whether the current row is final or prove that data is missing. The first published row for every outcome is always RESET because no earlier row exists. For a later reset, the connection to the preceding published row could not be proven. That is why the first row after a continuity break can be INTERMEDIATE + RESET, followed by VERIFIED + CONTIGUOUS in the same update sequence.
Choosing rows by use case
INTERMEDIATE does not mean provisional or expected to disappear. These rows are published only after the final snapshot in their update sequence passes validation.
What continuity does not mean
CONTIGUOUS does not mean rows arrive at regular intervals. An inactive market can remain unchanged for hours and then continue with a proven transition.
RESET marks a fresh starting point, not necessarily a data gap. Every outcome contributes one expected reset when its first snapshot is published. Later resets mean only that Probalytics could not prove the transition from the previous published state; they do not tell you whether venue events were missed or how many. Causes can include processor replacement, a source sequence gap, an update that cannot be applied, or recovery from a fresh full book.
To classify a reset, check whether an earlier snapshot exists for the same (market_id, outcome.id). If no earlier snapshot exists, this is the expected initialization reset. If an earlier snapshot exists, do not calculate a change between that row and the reset row. A query restricted to a date range can hide the earlier row, so it cannot classify the first reset in the result by itself.
Timestamp, path order, and identity
Several reconstructed states can share one source timestamp:indexed_at.
timestamp versus indexed_at
- Use
timestampto order source events. - Use
path_indexto order reconstructed states sharing one timestamp. - Use
indexed_atas the final tiebreaker and to see when Probalytics produced the row.
indexed_at - timestamp is observed delivery delay. It includes source-clock differences, buffering, reconstruction, and recovery—not only network time. Recovery can also publish an older source state later, so indexed_at must not replace event ordering.
Hash
hash is a Probalytics 64-bit content hash. It covers:
market_id;outcome.id;timestamp;- every published bid price and size;
- every published ask price and size.
indexed_at, state, continuity, path_index, or platform metadata.
The stored hash is separate from the hash supplied by Polymarket. Polymarket verification happens before the normalized row is produced; the stored hash identifies the normalized row.
Price and size precision
Published orderbook prices and sizes are stored as decimal values with six digits after the decimal point. Use decimal values rather than binary floating point when exact level comparisons or hash reproduction matter. Prediction-market prices are normally between0 and 1. Perpetual and margin prices use venue instrument units. Join market_id to markets and inspect market_type before combining products.
Coverage by venue and product
Counts as of 2026-08-27 11:59 UTC. Coverage starts use the earliest source
timestamp. Prediction and perpetual/margin rows are separated using the linked market’s market_type.
Orderbook rows are produced when a book changes, not on a fixed timer. An inactive market can therefore have long intervals with no rows.
The dataset updates continuously, so these values change throughout the day. Query the data warehouse for current values:
Polymarket prediction-market books
Source and reconstruction
Each outcome asset has its own published row. Multiple source connections are reconstructed independently. Equivalent states are deduplicated, and a healthy source can continue publication when its state is anchored to the last published book.
What VERIFIED means for Polymarket prediction markets
VERIFIED guarantees that the orderbook was reconstructed without gaps. For Polymarket prediction markets, the final reconstructed book must reproduce the venue-provided book hash. INTERMEDIATE rows are earlier book states from that same verified update sequence.
continuity remains separate. A VERIFIED + RESET row matches the venue hash, but its connection to the preceding published row cannot be proven. Treat it as a fresh starting point.
Polymarket perpetual books
Source and reconstruction
Each published source frame contains the complete bid and ask book for one instrument. Probalytics publishes it against the instrument’s syntheticLong outcome.
What VERIFIED means for Polymarket perpetuals
Every source frame is already a complete book, so a published frame is VERIFIED without reconstructing it from level changes or comparing a book hash. The first frame for an instrument starts with continuity = RESET; later frames are CONTIGUOUS while the processor retains that instrument’s published state.
Kalshi prediction-market books
Source and reconstruction
Kalshi supplies bid books for Yes and No. Probalytics publishes one conventional two-sided book for each outcome.What VERIFIED means for Kalshi prediction markets
VERIFIED guarantees that the orderbook was reconstructed without gaps. If Probalytics detects a source sequence gap or cannot apply a change, it stops publishing from that source stream until a fresh full snapshot rebuilds the book.
continuity answers a separate question. A VERIFIED + RESET row is gap-free itself, but Probalytics cannot prove that it connects to the preceding published row. Treat it as a fresh starting point. This can happen during processor redeployments, service downtime, software updates, or recovery from a fresh full book.
The Yes and No rows for one reconstructed state share the same timestamp and path_index. A market-level reset therefore normally appears as two rows - one for each outcome.
Kalshi margin books
Source and reconstruction
Kalshi margin supplies full bid/ask books and subsequent level changes for each instrument. Probalytics publishes the reconstructed book against the instrument’s syntheticLong outcome.
What VERIFIED means for Kalshi margin
Kalshi margin uses the same VERIFIED and continuity rules as Kalshi prediction-market books.
Historical rows
Some quality fields were added after the first orderbook rows were stored. Older rows can contain these compatibility values:
Historical
VERIFIED rows were also checked to ensure that their orderbooks were reconstructed without gaps. The hash = 0 and path_index = 0 values only indicate that those fields were not recorded when the rows were originally written.
See Tables & Schemas for access-specific database types and query examples.