Data Reference

Known Gaps & Corrections

This page lists hours that are missing or incomplete in the published archive. It also lists changes in behaviour that change how you read rows, and the corrections that we make to files that we already published. This information comes from an audit of all exchanges and data types against reference data from the exchanges. We completed the audit in September 2026.

Status of corrections

A corrected file replaces the original file under the same object key ({exchange}/{YYYY-MM-DD}/{HH}/{symbol}_{data_type}.parquet) and keeps the same schema. Thus, your download code does not need changes. Corrections marked Published include the full history of the affected files. If you downloaded affected hours before the publish date, download them again. Planned corrections are not in the files at this time. Under review means that we check how many published files have the problem, or if a source is available to recover the data, before we decide. We will not do a cleanup of the full archive for entries marked Not planned.

Changes in the 2026-10 data-quality release

This release corrects timestamp units, exchange clocks, volume units and order book resets. We found these problems in an audit of all collectors and processors in October 2026. For corrections to files that we already published, refer to Corrections to published history. For data that it is not possible to recover, refer to Partially affected periods.

Deployment status

Not yet deployed. When we deploy it, this section will show the first corrected hour for each exchange. Files for earlier hours keep the previous behaviour until we publish the corrections below.

Changes in behaviour in the 2026-10 data-quality release
Exchange IDData typeBefore the releaseFrom the release
bitget_futures, bitget_spottickerprice_change_percent as Bitget's fraction (0.0123 = 1.23 %)price_change_percent in percent, the same as all other exchanges
kraken_spotorderbook, tickerevent_time is our receive time in nanosecondsevent_time is our receive time in milliseconds
kraken_spottradesIf we could not read the trade timestamp from Kraken, trade_time used our receive time in nanoseconds as a fallbackThe fallback is our receive time in milliseconds
hyperliquid_spot, hyperliquid_futuresmark_price, open_interestevent_time and timestamp are our receive time in nanosecondsOur receive time in milliseconds (the venue does not send a timestamp)
lightermark_price, ticker, open_interestevent_time and timestamp are our receive time in nanosecondsLighter's publication time in milliseconds (our receive time in milliseconds if a message does not have a publication time)
lighterorderbookevent_time is our receive time; transaction_time is emptyevent_time is Lighter's publication time and transaction_time is Lighter's matching-engine update time. Both are in milliseconds
bitget_futures, bitget_spotorderbooktransaction_time is emptytransaction_time is Bitget's matching-engine time; event_time is the push time, as before
kraken_derivativesopen_interest (REST)timestamp is the time of the last trade of the contract, in nanoseconds. On quiet markets, this time can be hours oldtimestamp is the time at which Kraken sent the open interest, in milliseconds
kraken_derivativesticker (PI_, FI_)base_asset_volume contains the contract count. For inverse contracts, this count is a USD amountbase_asset_volume is empty, because the exact base-coin volume needs the price of each fill. Linear PF_ contracts do not change
kraken_derivativescandles (PI_, FI_)base_volume contains the contract count (USD)The same value is in quote_volume (USD); base_volume is empty
okx_futuresticker (swaps)quote_asset_volume = base volume × last price. This calculation uses the current price for all earlier fillsquote_asset_volume is empty, because OKX does not publish a quote turnover for swaps. base_asset_volume does not change
lightertradesLiquidation executions were missing (Lighter sends them separately from other trades). We dropped the trades that Lighter replays after a reconnectLiquidation executions are included (order_type = liquidation), and replayed trades fill reconnect gaps. We still drop replayed trades from before the arrival hour
kraken_derivativestrades, liquidationsWe dropped the fills that Kraken replays after a reconnectReplayed fills fill reconnect gaps, and we remove duplicate fills by trade ID. We still drop replayed fills from before the arrival hour
bybit, bybit_spotorderbookWhen we captured REST depth snapshots, we published them as order book resets. But their update IDs are from Bybit's 1,000-level stream, not from the 50-level stream that the order book usesOnly Bybit's WebSocket snapshots reset the order book
kraken_spot, lighterorderbookWhen we captured REST snapshots, we published them as order book resets. The Kraken REST snapshot has a maximum of 500 of the 1,000 levels and no sequence. The Lighter REST snapshot has no sequence numberOnly the WebSocket snapshots of the venue reset the order book
binance_spot, binance_futures, aster_futures, okx_spot, okx_futures, hyperliquid_spot, hyperliquid_futures, kraken_derivativesorderbookWe published no rows for a snapshot of an empty order book. Thus, a replayed order book kept its previous levelsAn empty snapshot publishes one snapshot row with side = noop and the sequence of the snapshot. When you see this row, clear the order book
hyperliquid_spot, hyperliquid_futuresorderbookWe removed levels with an empty, zero or negative size from a snapshot, and gave no warningIf a snapshot has an invalid level, we do not publish any part of that snapshot. The replay report for the hour marks the order book as unverified until the next valid snapshot
okx_spotorderbook (REST snapshot rows)order_count was always 0, because we read it from a deprecated OKX fieldorder_count is the number of orders that OKX reports
bitget_futuresliquidationsIf a liquidation did not have a valid price, we published its USD amount as the base quantityWe do not publish these liquidations
bybitopen_interestThe row at the start of the hour could miss updates that Bybit sent immediately before the hour but that we received immediately after itThe row at the start of the hour includes these updates. Its received_time is not earlier than the time when we received them
lightercandles (spot)Spot markets have the names that Lighter uses, for example ETH/USDCSpot markets have the same names as in the trade and order book datasets, for example ETH_USDC

Changes from the 2026-09 data-integrity release

The changes that follow apply to files that we published from the 2026-09 data-integrity release onward. The table gives specific dates where necessary. Earlier files can keep the previous behaviour. A table below shows which corrections to historical files we plan. The venue notes on each data type page (for example trades and liquidations) tell you how to use older files.

Changes in behaviour from the 2026-09 data-integrity release
Exchange IDData typeBefore the releaseFrom the release
okx_spot, okx_futurestradesOne row for each taker order at each price level. The trades channel of the exchange combines fills, trade_id is the last fill ID and quantity is the sum of the sizesOne row for each fill (trades-all channel)
okx_futuresmark_price (funding rows)event_time is the next settlement time (fundingTime), which is later than the time at which the rate was observedevent_time is the publish time of the funding message (ts); fundingTime is still in next_funding_time
okx_futurestickerbase_asset_volume in contracts, quote_asset_volume in base coinbase_asset_volume in base coin (volCcy24h) for linear and inverse swaps; quote_asset_volume = base volume × last price (empty from the 2026-10 release, refer to the table above)
kraken_derivativesmark_pricefunding_rate is Kraken's absolute funding ratefunding_rate is Kraken's relative funding rate, a fraction for each funding period
kraken_derivativestickerprice_change contains Kraken's 24h change percentage; price_change_percent is not a percentageprice_change = last price − 24h open; price_change_percent = Kraken's 24h change percentage
kraken_spotorderbookLevels that went out of Kraken's 1,000-level window had no delete row. Thus, a replay had to truncate the order bookWe publish levels that go out of the window as delete rows. Thus, a replay without more steps keeps 1,000 levels per side
kraken_derivativesopen_interest (PI_, FI_)sum_open_interest_value = contracts × pricesum_open_interest_value = contracts × contract size (USD)
lighteropen_interestsum_open_interest contains the USD notionalsum_open_interest in base units, sum_open_interest_value = USD notional
lightermark_pricefunding_rate in percent; next_funding_time contains the last funding timefunding_rate as a fraction; next_funding_time is the next funding time
bybittickerprice_change_percent as a fraction (-0.0207 = -2.07 %)price_change_percent in percent
bybitticker, mark_price, open_interestDeltas with changes only: unchanged fields are null. An open interest file is available only for hours in which open interest changedThe full state for each symbol, carried forward. Each symbol with known open interest has a row at the start of the hour (timestamp and received_time = start of the hour)
bitget_futuresopen_interestsum_open_interest_value is emptysum_open_interest_value = open interest (base coin) × mark price
binance_futuresticker, mark_price, liquidationsCOIN-M contracts (for example BTCUSD_PERP, BTCUSD_260925, with volumes and quantities in contracts) and delisted USDⓈ-M symbols were includedWe publish only listed USDⓈ-M symbols under binance_futures
binance_spot, binance_futures, aster_futuresorderbookWe published each REST depth snapshot two times (on Binance, one copy has received_time = event time × 1e6)Collectors that we started or restarted with the updated version on or after 2026-09-30 publish each REST depth snapshot one time
hyperliquid_spot, hyperliquid_futurestradesTrades that the exchange replayed after a reconnect could occur again in the file of a later hourWe do not publish replayed trades again

Corrections to published history

This table shows which historical files we correct and which problems we do not correct. Corrections include the full history of the affected files, unless the table gives a smaller scope.

Corrections to published history and their status
CorrectionAffected filesStatus
Kraken Futures funding rate changed to the relative rate. For funding periods from 2025-09-24, the value is the relative rate that Kraken published. Kraken's funding history does not include earlier periods. For these periods and for about 0.02 % of later rows, we calculated the value from the absolute rate and the index price observed in that period. These values are within about 0.2 % of Kraken's valuekraken_derivatives mark_pricePublished 2026-09-30
Kraken Futures ticker price change corrected: price_change = last − open, price_change_percent = Kraken's percentagekraken_derivatives tickerPublished 2026-09-30
Kraken inverse open interest value calculated again from the contract sizekraken_derivatives open_interest, PI_ and FI_ symbolsPublished 2026-09-30
Lighter open interest in base units with USD value; funding rate as a fraction; next funding timelighter open_interest, mark_pricePublished 2026-09-30
OKX funding rows given new timestamps, so that event_time is not the next settlement time. We did not store the original publish time. Thus, repaired rows use our receive time in milliseconds. This time is usually about 140 ms after OKX's publish timeokx_futures mark_pricePlanned
OKX perpetual swap ticker volumes corrected: base_asset_volume in base coin; quote_asset_volume made empty, the same as in the 2026-10 releaseokx_futures tickerPlanned
Duplicate BitMEX liquidations removed; event_time and trade_time converted from nanoseconds to millisecondsbitmex liquidationsPlanned
Open interest snapshots repeated from earlier hours removedbinance_futures open_interestPlanned
Duplicate copies of REST depth snapshots in older files. We do not plan a cleanup of the full archive, because identical consecutive copies do not change the reconstructed order bookbinance_spot, binance_futures, aster_futures orderbookNot planned
Trades repeated from earlier hours removedhyperliquid_spot, hyperliquid_futures tradesPlanned
Trades that Lighter sent two times removed (358 rows with the same trade_id as an earlier row and identical values except received_time). We keep the first copy that we receivedlighter trades, 2026-04-07 18 (14 markets) and 2026-08-23 13 (9 markets)Published 2026-09-30
Order book updates put back in exchange sequence order. A backward step of our server clock put some updates in the wrong order at 22:05:19, and replay stopped. We increased the received_time of the moved rows by less than 0.5 s, so that it increases. The files for hours 23 and 00 start with a checkpoint snapshot againlighter orderbook, 2026-10-20 22 to 2026-10-21 00 (14 markets)Published 2026-10-21
Missing BitMEX trades backfilled from the BitMEX REST API. Backfilled rows have no receive time. Thus, received_time = trade_time × 1e6bitmex tradesPlanned
OKX trades for about the last three months rebuilt from the OKX REST API as one row for each fillokx_spot, okx_futures tradesPlanned
Hour 2026-09-22 21 backfilled from Binance's public trade archivesbinance_spot trades, aggTradesPlanned
Bybit trade gaps backfilled from Bybit's public trade archives. Backfilled rows have a trade_id that we make from the ID in the archive, not the WebSocket trade IDbybit, bybit_spot tradesPlanned
Timestamps published in nanoseconds converted to milliseconds. We change only values above the millisecond range. We did not store Kraken's open interest time or Lighter's publication time. Thus, repaired rows keep our receive timekraken_spot orderbook, ticker event_time and trades trade_time fallbacks; hyperliquid_spot, hyperliquid_futures mark_price, open_interest; lighter mark_price, ticker, open_interest; kraken_derivatives open_interest (REST)Planned
Bitget ticker price_change_percent multiplied by 100 to give percentbitget_futures, bitget_spot tickerPlanned
Kraken inverse candles downloaded again from Kraken, so that the USD contract volume is in quote_volumekraken_derivatives candles, PI_ and FI_ symbolsPlanned
Kraken inverse ticker base_asset_volume made empty (it contained the USD contract count)kraken_derivatives ticker, PI_ and FI_ symbolsPlanned
Bybit REST depth snapshots removed from order books, and replay reports calculated again. First, we check if we published any of thembybit, bybit_spot orderbookUnder review
Bitget liquidations removed if their quantity is the USD amount (no valid price). First, we check if we published any of thembitget_futures liquidationsUnder review
Bybit REST open interest rows removed if their timestamp is our receive time in nanoseconds. It is not possible to recover the exchange time. First, we check if we published any of thembybit open_interestUnder review
Lighter spot candles published under the Lighter market name (for example ETH/USDC) moved to the ETH_USDC name. First, we check if we published any of themlighter candles, spot marketsUnder review
Kraken Futures trades and liquidations that we missed during reconnects backfilled from Kraken's public execution historykraken_derivatives trades, liquidationsUnder review
Empty mark price and open interest files for spot markets removed (spot markets do not have a mark price or open interest)bitget_spot mark_price, open_interest, 2025-07-15 → 2026-09-20Scheduled for removal

Missing hours

We did not publish files for the hours that follow. Times are in UTC. Each range includes its first and last hour partition (YYYY-MM-DD HH).

Hours with no published files, by exchange
Exchange IDMissing hours (UTC)
bitget_futures2025-09-23 07 → 2025-12-26 20; 2026-01-28 03 → 17; 2026-02-04 07 → 2026-02-14 18; 2026-04-10 10 → 2026-04-11 08; several shorter gaps
bybit2025-11-26 10 → 2025-12-26 19; 2026-04-13 15 → 2026-04-14 21
bybit_spot2026-04-12 11 → 2026-04-14 21
kraken_spot, kraken_derivativesHours on 2025-10-21 and 2025-10-22; 2026-07-09 21 → 2026-07-10 09; 2026-08-19 14 → 2026-08-21 14; 2026-09-03 about 15 → 20; several shorter gaps
lighter2026-02-13 12 → 2026-02-14 18 (also refer to the periods with only part of the market universe, below)
hyperliquid_futures2026-04-12 09 → 16
bitget_spot2025-08-29 03 → 09; outage from 2026-09-20 03:08 (the 2026-09-20 03 files contain only 03:00–03:08)

Some other hours have only part of the data. Files are available, but only for part of the symbol universe or with less data than usual. If your analysis needs specific hours, list the prefixes of these hours with flat-file access. Then make sure that the symbols you need are available.

Partially affected periods

Periods in which part of the data is missing or not usable
Exchange IDPeriod (UTC)EffectRecovery
binance_spot2026-09-22, 21:15:30 → 22:00For most symbols (about 1,300), all data types are missing for the remaining part of the hour. But we published the hour as complete.We plan a backfill of trades and aggTrades from Binance's public archives. It is not possible to recover the other data types.
bitget_futures, bitget_spot2026-05-20 03 → 2026-05-24 08Order books are missing. We published trades and tickers as usual.Not possible to recover (no public order book history).
lighterFor example 2026-09-22 16:02 → 2026-09-23 about 00:30, and from 2026-09-23 14:32We published only part of the market universe. In the latest event, 144 of 210 markets stopped, including ETH, HYPE and XRP. Before this, about 90 shorter events occurred in which only part of the universe was published.Not possible to recover (no public history for these streams).
lighter2026-03-24 → 2026-04-14The collector connections closed every few minutes, until a keepalive fix for the collector on 2026-04-14. Trades that Lighter sent during a reconnect are missing (gaps of about 1–9 minutes on liquid markets). The first trades after each reconnect arrived 1–3 s late.Not possible to recover (no public history for these streams).
lighterBefore the 2026-09 data-integrity release, for example BNB 2026-02-24 15, AMD 2026-09-02 16After some reconnects, the order book snapshot and the updates after it did not agree. A level was never deleted, or updates from two sequences were mixed. Thus, the replayed order book crossed. In the BNB example, it stayed crossed for about 7 hours. Files from before the release do not have a sequence field that lets you detect this problem (refer to the order book venue notes).Not possible to recover. If an order book is crossed, treat it as invalid. Then start again from the next snapshot.
bitmexLiquid days in all of the history, for example XBTUSD on 2025-11-15, 2026-01-15, 2026-05-155–20 % of trades are missing, compared with the trade history of BitMEX.We plan a backfill from the BitMEX REST API.
lighterBefore the 2026-10 data-quality releaseLiquidation executions are missing from trades. We did not publish the trades that Lighter replayed after a reconnect.Not possible to recover (no public history for these executions).
kraken_derivativesBefore the 2026-10 data-quality releaseWe did not publish the fills and liquidations that Kraken replayed after a reconnect. Thus, trades and liquidations have reconnect gaps.A backfill from Kraken's public execution history is under review.
binance_spot, binance_futures, aster_futures, okx_spot, okx_futures, hyperliquid_spot, hyperliquid_futures, kraken_derivativesBefore the 2026-10 data-quality releaseWe did not publish a snapshot of an empty order book. Thus, a replayed order book can keep levels that the exchange already removed, until the next snapshot that is not empty. This problem occurs mainly on halted, delisted or very quiet markets.Not possible to recover (we did not store the empty snapshots). Be careful if an order book on such a market has no more changes.
lighter, kraken_derivativesBefore the 2026-10 data-quality releaseWe did not store the publication and matching-engine times of Lighter, or the time at which Kraken sent the open interest. The time columns contain our receive time.Not possible to recover.
binance_futuresMost hours since at least mid-August 2026, at about hh:02 → hh:05Gaps of about 1–2 minutes in the mark price stream.Not possible to recover (no public history of mark price ticks).
bitget_spot2025-07-15 → 2026-09-20mark_price and open_interest files are available, but all value columns are empty. Spot markets do not have a mark price or open interest.Do not use these files. We will remove them.

Short reconnect gaps

Collectors reconnect at intervals (some venues require this) and after network errors. We cannot recover the data that the exchange sends during a reconnect. This causes gaps of some seconds, as follows:

  • Binance (spot and futures): We replace each connection about every 24 hours, because Binance requires this. Trades that Binance sends during the reconnect are missing and show as gaps in the trade IDs.
  • Bybit trades: Gaps from a few seconds up to about 3 minutes. Most of these gaps occur near a daily reconnect between about 02:00 and 02:50 UTC. We plan a backfill from Bybit's public trade archives.
  • Kraken spot: Reconnect gaps of 3–7 seconds. Sometimes, order book updates stop for 10–20 minutes while trades continue.
  • Hyperliquid: We can lose a small number of trades near reconnects.

If a venue gives sequence fields (order book update IDs, consecutive Binance trade IDs), use them to detect these gaps. For order books, discard the local order book at a gap. Then start again from the next snapshot.

BitMEX (historical dataset)

BitMEX is closed. BitMEX settled its perpetual contracts on 2026-09-16 at 12:00 UTC and delisted its spot pairs on 2026-09-21. On 2026-09-22, BitMEX announced "BitMEX Exchange Now Closed". We stopped the collection. You can download the bitmex dataset, from 2025-09-29 to 2026-09-22, through the Python SDK, the REST API and flat-file access. Files for the last hours contain little or no activity.

When you use this dataset, refer to the venue notes for the raw quantity units of each instrument and for the liquidation duplicates. Also refer to the missing trades in the tables above.

If you cannot find the information that you need, tell us. We also help with integrations.

Contact support