Bybit Liquidation Dataset
Bybit Historical Liquidation Data
Bybit forced-liquidation events as published on the venue's public feed, with side, price, and quantity, normalized for cross-venue research.
No credit card · The sample is one real hourly Parquet file and needs no API key
Sample
See the data before you sign up
The first rows of one real hour: BTCUSDT on Bybit Futures, 2026-09-02 at 12:00 UTC. One row per forced liquidation order.
bybit/2026-09-02/12/BTCUSDT_liquidations.parquetDownload full file| received_time | event_time | symbol | side | order_type | time_in_force | quantity | price | average_price | order_status | last_filled_quantity | filled_quantity | trade_time |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1788351334071251623 | 1788351333982 | BTCUSDT | BUY | Market | IOC | 0.046 | 77072.40 | 77072.40 | FILLED | 0.046 | 0.046 | 1788351333812 |
| 1788351335064203228 | 1788351334982 | BTCUSDT | BUY | Market | IOC | 0.209 | 77080.80 | 77080.80 | FILLED | 0.209 | 0.209 | 1788351334827 |
| 1788351409564538224 | 1788351409482 | BTCUSDT | BUY | Market | IOC | 0.007 | 77111.20 | 77111.20 | FILLED | 0.007 | 0.007 | 1788351409027 |
| 1788351410064379460 | 1788351409982 | BTCUSDT | BUY | Market | IOC | 0.004 | 77110.60 | 77110.60 | FILLED | 0.004 | 0.004 | 1788351409927 |
| 1788351430564827636 | 1788351430482 | BTCUSDT | BUY | Market | IOC | 0.035 | 77120.00 | 77120.00 | FILLED | 0.035 | 0.035 | 1788351430456 |
| 1788351435565169566 | 1788351435483 | BTCUSDT | BUY | Market | IOC | 0.012 | 77127.20 | 77127.20 | FILLED | 0.012 | 0.012 | 1788351435399 |
Wire format
From exchange message to Parquet row
Every row starts as a message on the exchange's WebSocket or REST API. Point at a line or a column to see where each value comes from and how we convert it. Our test suite replays these messages through the production pipeline, so the rows shown are the rows you download.
Bybit Futures
S is the side of the liquidated position. Sell means that a short position was liquidated. Thus, the published side of the liquidation order is BUY.
Exchange sends
WebSocket message · allLiquidation.<symbol>received 2026-10-05 19:13:56.576211 UTC
{"topic": "allLiquidation.BTCUSDT","type": "snapshot","ts": 1791227636482,"data": [{"T": 1791227636066,"s": "BTCUSDT","S": "Sell","v": "1.312","p": "85914.10"}]}
You download
Parquet row · liquidations
Point at a line in the message or a column in the row to trace where each value comes from. Click a column to pin it.
Our tests replay this message through the production pipeline
All Bybit Futures mapping rules →Conventions for every exchange are in the wire formats overview. Column types and units for liquidation data are in the schema below.
Use cases
What you can build with liquidation data
- Liquidation cascades
- Detect clusters of forced orders and study how they propagate through price and across venues.
- Long vs. short pressure
- Separate liquidated longs from liquidated shorts by side to measure which positioning is being flushed out.
- Risk and event studies
- Align liquidation bursts with trades, funding, and open interest to explain sharp moves after the fact.
Coverage
Liquidation coverage
Every venue is stored under its own exchange ID, so spot and derivatives never mix. Bars show each venue's history from its first hourly file to today, or to its last file for a venue that is no longer collected. Symbol counts are live from the symbols API.
| Venue | Exchange ID | Market | History | Liquidation symbols |
|---|---|---|---|---|
| bybit | Futures | 2025-06-2816 mo | 1,391 |
Other exchanges
Liquidations data on other exchanges
The same schema on every venue, so switching exchange is a one-argument change.
Or compare every venue on the cross-exchange liquidation overview.
Schema · 13 columns
Normalized liquidation schema
Every liquidation row is a forced order as published on the exchange's public feed, with side, price, quantity, and timing fields. Order type and fill-state fields are placeholders on venues that do not publish them.
| Column | Type | Description |
|---|---|---|
| received_time | INT64 | Unix timestamp (nanoseconds) when our system received the liquidation event |
| event_time | INT64 | Unix timestamp when the exchange generated the event (the time unit changes with the exchange) |
| symbol | STRING | Trading pair symbol (for example, 'BTCUSDT') |
| side | STRING | Side of the liquidation order ("BUY" = the exchange liquidated a short position, "SELL" = the exchange liquidated a long position) |
| order_type | STRING | Type of liquidation order (for example, "MARKET", "LIMIT"), if the venue publishes it. On venues that do not publish it (for example, Bybit and OKX), it is a fixed placeholder |
| time_in_force | STRING | Time-in-force policy of the order (for example, "IOC", "FOK", "GTC"), if the venue publishes it. If not, it is a fixed placeholder |
| quantity | STRING | Total order quantity that the exchange liquidates (stored as string for precision). OKX sizes are in contracts (refer to the venue notes) |
| price | STRING | Liquidation order price (stored as string for precision). Bybit and OKX publish the bankruptcy price |
| average_price | STRING | Average execution price, if the venue publishes it, for example Binance and Aster (stored as string for precision). Bybit and OKX repeat the bankruptcy price here. It is not an execution price |
| order_status | STRING | Status of the liquidation order (for example, "FILLED", "PARTIALLY_FILLED"), if the venue publishes it. On Bybit and OKX, it is a fixed "FILLED" placeholder and not an execution status |
| last_filled_quantity | STRING | Quantity filled in the most recent execution (stored as string for precision) |
| filled_quantity | STRING | Total quantity filled until now (stored as string for precision) |
| trade_time | INT64 | Unix timestamp when the liquidation trade occurred |
Quickstart
From pip install to DataFrame in a minute
The example loads BTCUSDT from Bybit Futures for 2026-09-02. Change the symbol, exchange, or dates to pull any other slice of the archive.
Install the Python SDK
pip install cryptohftdataCreate a free API key
Sign up with email or Google, then generate a key from your dashboard. No credit card.
Create accountCall get_liquidations()
Paste the snippet, replace YOUR_API_KEY, and you get a pandas DataFrame with the columns listed above.
import cryptohftdata as chd
client = chd.CryptoHFTDataClient(api_key="YOUR_API_KEY")
df = client.get_liquidations(
symbol="BTCUSDT",
exchange=chd.exchanges.BYBIT_FUTURES,
start_date="2026-09-02",
end_date="2026-09-02",
)
print(df.head())
print(f"Liquidations: {len(df):,}")curl --fail --location \
"https://api.cryptohftdata.com/download?file=bybit/2026-09-02/12/BTCUSDT_liquidations.parquet" \
-o BTCUSDT_liquidations_12.parquetCaveats
Know this before you backtest
Exchange feeds differ in subtle ways. These are the details that matter for accurate backtests, replay pipelines, and features. Missing hours and pending corrections for every venue are listed on Known Gaps & Corrections.
Liquidations cover derivatives venues only; spot markets do not produce liquidation events.
Exchanges control what they broadcast. Binance and Aster push at most one liquidation snapshot per symbol per second (the latest within each 1,000 ms window), so their rows are a sample and totals are a lower bound.
Bybit and OKX publish the bankruptcy price, not an average execution price; their order status fields are placeholders, not execution status.
OKX can deliver liquidations hours late (up to about 4 hours observed). Files are keyed by arrival hour, so a liquidation can sit in a later hour's file than its event_time.
Hourly liquidation files exist only for hours in which the venue published at least one liquidation event for that symbol.
This page starts on 2025-06-28 based on the earliest stored hourly files for its covered exchange IDs and grows as new hourly files are published.
FAQ
Frequently asked questions
Is Bybit liquidation data free to download?
Yes. A free CryptoHFTData account with no credit card gives API access to Bybit liquidation data and every other dataset. Individual hourly files can also be downloaded without an API key on the rate-limited free tier.
How far back does Bybit liquidation data go?
The earliest hourly files start on 2025-06-28, and new files are added every hour. Start dates differ by venue; the coverage table on this page lists each one.
What format are the files in?
Each file holds one symbol for one UTC hour, stored as Zstd-compressed Parquet under {exchange_id}/{YYYY-MM-DD}/{HH}/{SYMBOL}_liquidations.parquet. Parquet reads directly into pandas, Polars, DuckDB, and Arrow.
How do I load Bybit liquidation data in Python?
Install the SDK with pip install cryptohftdata, create a client with your API key, and call client.get_liquidations() with a symbol, exchange, and date range. It returns a pandas DataFrame.
Does the data capture every liquidation?
No. It captures what each exchange publishes on its public liquidation feed. Binance and Aster push at most one liquidation per symbol per second (the latest in each window), so their rows are a sample and totals are a lower bound on actual liquidation volume.
Start using liquidation data today.
One free API key covers every exchange and every data type. $0.00.