TopMover Docs
Methodology

Liquidations (Multi-Exchange Methodology)

How we aggregate liquidations across 8 exchanges, why our numbers differ from Coinglass, and what to trust.

Liquidation totals on different sites disagree, sometimes by 5× or more. This page explains exactly how we compute ours and where the deltas vs. other services come from.

Where data comes from

We connect to public liquidation WebSockets on each venue:

ExchangeStreamThrottled?
Binance!forceOrder@arrYes (1/s/symbol)
OKXliquidation-orders channelYes (1/s/symbol, since Sep 2021)
Asterforce-order channelYes (similar throttle)
Bybitliquidation topicNo
Bitgetforce_order v3No
Gate.ioliquidationNo
HTXforce-order subscriptionNo
HyperliquiduserFills delta (filtered to liqs)No (S3 + WS)

No paid data partner. No exchange affiliation. Source code for each connector lives in the worker repo.

How we normalize

Each connector emits a row with the same shape:

{ exchange, symbol, side, price, qty, notional, ts }

notional = price * qty * contractMultiplier, where the multiplier comes from our contract_specs table (e.g. some Bitget contracts are denominated in "contracts" worth 0.01 of the base asset, not 1). This is why we had a one-time backfill in mid-2026 to fix a ~80× overstatement on Bitget — the multiplier was originally treated as 1 across the board.

The 1-event-per-second throttle: why our Binance number is a

floor, not the truth

The Binance public WS docs are explicit:

For each symbol, only the largest one liquidation order within 1000ms is pushed.

OKX and Aster do the same. We see the largest event per second per symbol; smaller fills inside that second are silently omitted. That means:

  • Our cross-exchange total is strictly a lower bound.
  • Throttling affects busy seconds more than quiet ones — so the delta from "true" total grows during crashes.
  • Bitget, Bybit, Gate, and HTX don't throttle, so on those venues our number is closer to ground truth.

Why this looks weird compared to Coinglass

Coinglass aggregates from multiple feeds, some of them paid / partner streams from the exchanges directly that bypass the public WS throttle. Their methodology is private. We've stared at our numbers vs theirs and the pattern is:

  • For Binance / OKX, Coinglass usually shows more than us (they have throttle-bypass).
  • For Bitget, Coinglass usually shows less than us (they appear to sample / downsample).
  • For Gate, Coinglass usually shows more than us (their feed quality on small venues is better).

Both numbers can be correct given their definitions. The page surfaces a callout at the bottom so you're aware before drawing conclusions.

Rollup tables

  • liquidations_events — raw per-event log (not exposed externally).
  • liquidation_rollup_1h — hourly per-(exchange, symbol) sums. This is what powers Rankings' "24H LIQ" column and the Liquidations page totals.

See also

On this page