BitqueryBitqueryData Store
Hyperliquid logoHyperliquidTrades

Hyperliquid Trades

Every HyperCore fill from both sides of the match, with realized PnL, fees and taker flag, plus liquidations and TWAP order statuses.

Coverage
Latest monthto Oct 13, 2026 · yesterday
Tables
3Parquet, one prefix each
Columns
128across 3 tables
Coverage ends yesterday, UTC

Overview

Hyperliquid trades from the HyperCore L1 order-book exchange, not HyperEVM. The trades table has one row per side of each match with price, size, direction, a taker flag, fees and the realized PnL of the fill, so maker and taker attribution and per-wallet PnL come straight out of the file. Liquidation fills sit in their own table, perp_liquidations, with the liquidated account, mark price and method, and twaps records each TWAP order as it activates, runs and finishes.

A match appears twice, once per side, keyed by (Block_Number, Trade_Market_CoinRaw, Trade_Execution_Tid); the hash is not a join key because one L1 transaction spans many matches and TWAP fills carry 32 zero bytes. Money and sizes are decimal strings, addresses are 0x-prefixed hex, and Trade_Execution_EventTime is epoch milliseconds while Block_Time is epoch nanoseconds.

Use cases

  • Per-wallet realized PnL, fees and liquidation history from both sides of every fill
  • Taker and maker attribution by wallet, market and hour
  • Volume and open-interest change by market across plain perps, HIP-3 markets and spot
  • TWAP execution analysis: size, notional and completion state per TWAP order

3 tables

128 columns · free sample for each table

trades

48 columns

One row per side of each match, liquidations excepted: price, size, direction, taker flag, fees, realized PnL and TWAP link. A match appears twice, keyed by (Block_Number, Trade_Market_CoinRaw, Trade_Execution_Tid).

hyperliquid/trades<first_block>-<last_block>-<random suffix>.parquet; blocks per file vary
Browse columns Sample fileSample updated Sep 30, 2026

perp_liquidations

48 columns

One row per side of each liquidation match, with the same execution, fee and position fields as trades plus the liquidated account, mark price and method.

hyperliquid/perp_liquidations<first_block>-<last_block>-<random suffix>.parquet; blocks per file vary

twaps

32 columns

One row per TWAP order status change: activated, finished, terminated or error, with total size, executed size and notional.

hyperliquid/twaps<first_block>-<last_block>-<random suffix>.parquet; blocks per file vary
Browse columns Sample fileSample updated Sep 30, 2026

Schema reference

copies a column name
128 columns
trades48 columnsOne row per side of each match, liquidations excepted: price, size, direction, taker flag, fees, realized PnL and TWAP link. A match appears twice, keyed by (Block_Number, Trade_Market_CoinRaw, Trade_Execution_Tid).
ColumnTypeDescription
Other1
ChainIdStringChain identifier, always hyperliquid-core; pipeline bookkeeping
Block3
Block_NumberUInt64HyperCore block number; the join key across the Hyperliquid datasets
Block_TimeInt64Block time, epoch nanoseconds
Block_DateDateUTC date of the block; pipeline bookkeeping, handy for partitioning
Trade_Trader5
Trade_Trader_AddressStringAccount address for this side, 0x-prefixed hex
Trade_Trader_SignerStringAddress that signed the order action, 0x-prefixed hex, such as an API wallet; can be empty
Trade_Trader_VaultStringVault or subaccount the order acted for, 0x-prefixed hex; can be empty
Trade_Trader_BroadcasterStringAddress that broadcast the signed action, 0x-prefixed hex; can be empty
Trade_Trader_SignedAtInt64Nonce of the signed action, which Hyperliquid sets to epoch milliseconds; 0 when unknown
Trade_Market6
Trade_Market_SymbolStringReadable market name: HYPE, DRAM for xyz:DRAM, or the spot pair name when known (raw @107 otherwise)
Trade_Market_KindStringperp, hip3, spot or outcome
Trade_Market_ProtocolStringhypercore for plain perps, spot and outcome tokens; the deploying dex (such as xyz) for HIP-3 markets
Trade_Market_CoinRawStringMarket as the node names it: plain perp (HYPE), HIP-3 perp (xyz:DRAM), spot (@107) or outcome token (#1890)
Trade_Market_IsPerpBool1 for plain perps and HIP-3 perps, 0 for spot and outcome tokens
Trade_Market_MaxLeverageUInt32Maximum margin multiple on the market (40 means 40x); 0 when unknown, can be empty
Trade_Execution10
Trade_Execution_SideStringBuy or Sell, for this side of the match
Trade_Execution_DirectionStringDirection label from the node: Open Long, Close Short, Long > Short, Buy, Sell, and so on
Trade_Execution_IsAggressorBool1 when this side was the taker, 0 for the maker
Trade_Execution_PriceStringExecution price, decimal string
Trade_Execution_SizeStringExecuted size in base units, decimal string
Trade_Execution_OidUInt64Order id of this side's order
Trade_Execution_CloidStringClient order id, 0x-prefixed hex; empty when the trader set none
Trade_Execution_TidUInt64Trade id; with Block_Number and the market it keys a match, once per side
Trade_Execution_HashStringL1 transaction hash, 0x-prefixed hex; not a join key, one transaction spans many matches and TWAP fills carry 32 zero bytes
Trade_Execution_EventTimeInt64Fill time, epoch milliseconds
Trade_Fees5
Trade_Fees_FeeStringFee paid, decimal string; negative when the maker received a rebate
Trade_Fees_FeeTokenStringToken the fee was paid in, usually USDC
Trade_Fees_BuilderFeeStringBuilder fee charged on the fill, decimal string; empty when none
Trade_Fees_DeployerFeeStringHIP-3 deployer fee on the fill, decimal string; empty when none
Trade_Fees_PriorityGasStringPriority gas paid, decimal string; empty when none
Trade_Position9
Trade_Position_SideStringLong or Short: the position this fill changed; empty for spot and outcome fills
Trade_Position_SizeStringNot filled in this table, always empty; part of the shared Hyperliquid schema
Trade_Position_SizeBeforeStringSigned position before the fill, in base units, decimal string; negative is short
Trade_Position_EntryPriceStringNot filled in this table, always empty; part of the shared Hyperliquid schema
Trade_Position_RealizedPnlStringRealized PnL of this fill in USDC, decimal string
Trade_Position_FundingStringNot filled in this table, always empty; part of the shared Hyperliquid schema
Trade_Position_LeverageUInt32Account's margin multiple on this market (20 means 20x) when known; 0 otherwise, can be empty
Trade_Position_IsCrossBool1 when the account uses cross margin on this market, when known; can be empty
Trade_Position_ClosedBoolNot filled in this table, always empty; part of the shared Hyperliquid schema
Trade4
Trade_MarkPxStringNot filled in this table, always empty; part of the shared Hyperliquid schema
Trade_BuilderStringBuilder address when the order came through a builder, 0x-prefixed hex; else empty
Trade_IsTwapBool1 when the fill came from a TWAP order (its hash is all zeros), else 0
Trade_TwapIdUInt64TWAP order id on the TWAP side of the fill, joins to Twap_TwapId; 0 otherwise
Indexing3
Indexing_TimeInt64When our pipeline indexed the block, epoch nanoseconds; pipeline bookkeeping
Indexing_OnTreeBool1 when the block was on our block tree at indexing time; pipeline bookkeeping
Indexing_OnTrunkBool1 when the block was on the finalized chain at indexing time; pipeline bookkeeping
Recording2
Recording_TimeUInt32When the row was written, epoch seconds; pipeline bookkeeping
Recording_HashUInt64Row hash used to drop duplicates; pipeline bookkeeping
Sample file
perp_liquidations48 columnsOne row per side of each liquidation match, with the same execution, fee and position fields as trades plus the liquidated account, mark price and method.
ColumnTypeDescription
Other1
ChainIdStringChain identifier, always hyperliquid-core; pipeline bookkeeping
Block3
Block_NumberUInt64HyperCore block number; the join key across the Hyperliquid datasets
Block_TimeInt64Block time, epoch nanoseconds
Block_DateDateUTC date of the block; pipeline bookkeeping, handy for partitioning
Liquidation_Trader5
Liquidation_Trader_AddressStringAccount address for this side, 0x-prefixed hex
Liquidation_Trader_SignerStringAddress that signed the order action, 0x-prefixed hex, such as an API wallet; can be empty
Liquidation_Trader_VaultStringVault or subaccount the order acted for, 0x-prefixed hex; can be empty
Liquidation_Trader_BroadcasterStringAddress that broadcast the signed action, 0x-prefixed hex; can be empty
Liquidation_Trader_SignedAtInt64Nonce of the signed action, which Hyperliquid sets to epoch milliseconds; 0 when unknown
Liquidation_Market6
Liquidation_Market_SymbolStringReadable market name: HYPE, DRAM for xyz:DRAM, or the spot pair name when known (raw @107 otherwise)
Liquidation_Market_KindStringperp, hip3, spot or outcome
Liquidation_Market_ProtocolStringhypercore for plain perps, spot and outcome tokens; the deploying dex (such as xyz) for HIP-3 markets
Liquidation_Market_CoinRawStringMarket as the node names it: plain perp (HYPE), HIP-3 perp (xyz:DRAM), spot (@107) or outcome token (#1890)
Liquidation_Market_IsPerpBool1 for plain perps and HIP-3 perps, 0 for spot and outcome tokens
Liquidation_Market_MaxLeverageUInt32Maximum margin multiple on the market (40 means 40x); 0 when unknown, can be empty
Liquidation_Execution10
Liquidation_Execution_SideStringBuy or Sell, for this side of the match
Liquidation_Execution_DirectionStringDirection label from the node: Open Long, Close Short, Long > Short, Buy, Sell, and so on
Liquidation_Execution_IsAggressorBool1 when this side was the taker, 0 for the maker
Liquidation_Execution_PriceStringExecution price, decimal string
Liquidation_Execution_SizeStringExecuted size in base units, decimal string
Liquidation_Execution_OidUInt64Order id of this side's order
Liquidation_Execution_CloidStringClient order id, 0x-prefixed hex; empty when the trader set none
Liquidation_Execution_TidUInt64Trade id; with Block_Number and the market it keys a match, once per side
Liquidation_Execution_HashStringL1 transaction hash, 0x-prefixed hex; not a join key, one transaction spans many matches and TWAP fills carry 32 zero bytes
Liquidation_Execution_EventTimeInt64Fill time, epoch milliseconds
Liquidation_Fees5
Liquidation_Fees_FeeStringFee paid, decimal string; negative when the maker received a rebate
Liquidation_Fees_FeeTokenStringToken the fee was paid in, usually USDC
Liquidation_Fees_BuilderFeeStringBuilder fee charged on the fill, decimal string; empty when none
Liquidation_Fees_DeployerFeeStringHIP-3 deployer fee on the fill, decimal string; empty when none
Liquidation_Fees_PriorityGasStringPriority gas paid, decimal string; empty when none
Liquidation_Position9
Liquidation_Position_SideStringLong or Short: the position this fill changed; empty for spot and outcome fills
Liquidation_Position_SizeStringNot filled in this table, always empty; part of the shared Hyperliquid schema
Liquidation_Position_SizeBeforeStringSigned position before the fill, in base units, decimal string; negative is short
Liquidation_Position_EntryPriceStringNot filled in this table, always empty; part of the shared Hyperliquid schema
Liquidation_Position_RealizedPnlStringRealized PnL of this fill in USDC, decimal string
Liquidation_Position_FundingStringNot filled in this table, always empty; part of the shared Hyperliquid schema
Liquidation_Position_LeverageUInt32Account's margin multiple on this market (20 means 20x) when known; 0 otherwise, can be empty
Liquidation_Position_IsCrossBool1 when the account uses cross margin on this market, when known; can be empty
Liquidation_Position_ClosedBool1 when the node reported a starting position; best effort, confirm with Position_SizeBefore and Execution_Size
Liquidation4
Liquidation_MarkPxStringMark price the liquidation used, decimal string
Liquidation_MethodStringLiquidation method as the node reports it, such as market
Liquidation_LiquidatorStringNot filled in this table, always empty; part of the shared Hyperliquid schema
Liquidation_LiquidatedUserStringAddress of the liquidated account, 0x-prefixed hex; the same on both sides of the match
Indexing3
Indexing_TimeInt64When our pipeline indexed the block, epoch nanoseconds; pipeline bookkeeping
Indexing_OnTreeBool1 when the block was on our block tree at indexing time; pipeline bookkeeping
Indexing_OnTrunkBool1 when the block was on the finalized chain at indexing time; pipeline bookkeeping
Recording2
Recording_TimeUInt32When the row was written, epoch seconds; pipeline bookkeeping
Recording_HashUInt64Row hash used to drop duplicates; pipeline bookkeeping
twaps32 columnsOne row per TWAP order status change: activated, finished, terminated or error, with total size, executed size and notional.
ColumnTypeDescription
Other1
ChainIdStringChain identifier, always hyperliquid-core; pipeline bookkeeping
Block3
Block_NumberUInt64HyperCore block number; the join key across the Hyperliquid datasets
Block_TimeInt64Block time, epoch nanoseconds
Block_DateDateUTC date of the block; pipeline bookkeeping, handy for partitioning
Twap_Trader5
Twap_Trader_AddressStringAccount that placed the TWAP, 0x-prefixed hex
Twap_Trader_SignerStringAddress that signed the order action, 0x-prefixed hex, such as an API wallet; can be empty
Twap_Trader_VaultStringVault or subaccount the order acted for, 0x-prefixed hex; can be empty
Twap_Trader_BroadcasterStringAddress that broadcast the signed action, 0x-prefixed hex; can be empty
Twap_Trader_SignedAtInt64Nonce of the signed action, which Hyperliquid sets to epoch milliseconds; 0 when unknown
Twap_Market6
Twap_Market_SymbolStringReadable market name: HYPE, DRAM for xyz:DRAM, or the spot pair name when known (raw @107 otherwise)
Twap_Market_KindStringperp, hip3, spot or outcome
Twap_Market_ProtocolStringhypercore for plain perps, spot and outcome tokens; the deploying dex (such as xyz) for HIP-3 markets
Twap_Market_CoinRawStringMarket as the node names it: plain perp (HYPE), HIP-3 perp (xyz:DRAM), spot (@107) or outcome token (#1890)
Twap_Market_IsPerpBool1 for plain perps and HIP-3 perps, 0 for spot and outcome tokens
Twap_Market_MaxLeverageUInt32Maximum margin multiple on the market (40 means 40x); 0 when unknown, can be empty
Twap1
Twap_TwapIdUInt64TWAP order id; joins to Trade_TwapId on its child fills
Twap_Order4
Twap_Order_SideStringBuy or Sell
Twap_Order_SizeStringTotal size the TWAP will execute, in base units, decimal string
Twap_Order_ReduceOnlyBool1 when the TWAP can only reduce a position, else 0
Twap_Order_RandomizeBool1 when child order timing is randomized, else 0
Twap_Interval3
Twap_Interval_StartTimeInt64TWAP start time, epoch milliseconds
Twap_Interval_DurationMinutesUInt32How long the TWAP runs, in minutes
Twap_Interval_EventTimeInt64Status change time, epoch nanoseconds
Twap_State4
Twap_State_StatusStringactivated, finished, terminated or error
Twap_State_StatusErrorStringError text when State_Status is error, for example Insufficient margin to place order; else empty
Twap_State_ExecutedSizeStringSize executed so far, in base units, decimal string
Twap_State_ExecutedNotionalStringNotional executed so far, in USDC, decimal string
Indexing3
Indexing_TimeInt64When our pipeline indexed the block, epoch nanoseconds; pipeline bookkeeping
Indexing_OnTreeBool1 when the block was on our block tree at indexing time; pipeline bookkeeping
Indexing_OnTrunkBool1 when the block was on the finalized chain at indexing time; pipeline bookkeeping
Recording2
Recording_TimeUInt32When the row was written, epoch seconds; pipeline bookkeeping
Recording_HashUInt64Row hash used to drop duplicates; pipeline bookkeeping
Sample file

Ask an AI about this data

Send this dataset’s full schema to an assistant and ask it anything. It reads the plain-text brief first, so the answer comes from the real column list rather than a guess.

Start with

Opens a new chat with the question filled in. Nothing about you is sent to Bitquery, and the assistant sees only the public brief.

Delivery

Parquet files in a Requester Pays S3 bucket or a Cloudflare R2 bucket, chosen at checkout. On S3 you download with your own AWS account and AWS bills the transfer; on R2 you download with a read-only API key and pay no egress. Layout:

# trades
hyperliquid/trades<first_block>-<last_block>-<random suffix>.parquet; blocks per file vary

# perp_liquidations
hyperliquid/perp_liquidations<first_block>-<last_block>-<random suffix>.parquet; blocks per file vary

# twaps
hyperliquid/twaps<first_block>-<last_block>-<random suffix>.parquet; blocks per file vary
  1. Download a free sampleNo email needed.
  2. Pay nowName, work email and licence check.
  3. Pay the invoiceBy card or bank transfer.
  4. Download from S3 or R2The team prepares the export and emails the bucket path, plus a read-only API key for R2 orders.

Price

Latest month
Sep 13, 2026 → Oct 13, 2026
$150one-time, USD
  • All 3 tables, 128 columns
  • Parquet files in the layout under Delivery
  • S3 or R2 download, chosen at checkout
  • Licensed under the Data License
Pay now

FAQ

13 questions
What is included in Hyperliquid Trades?

Three Parquet tables from HyperCore: trades, perp_liquidations and twaps, with 128 documented columns. Every row carries Block_Number and Block_Time, so the tables join on block with each other and with the Hyperliquid Order Book and Funding datasets.

How big is it?

For the 30 days to 30 September 2026 our live tables held 345 million trade rows, 555,000 liquidation rows and 213,000 TWAP status rows, about 11.5 million, 18,500 and 7,200 a day. That is roughly 18 to 21 GB of compressed Parquet. One 1,000-block pack from 29 September held 11,082 trade rows. Volume moves with market activity; we send exact row counts and sizes with the delivery, and these figures are estimates.

How do I compute a wallet's realized PnL?

Filter trades and perp_liquidations on the account address, then sum Position_RealizedPnl and subtract Fees_Fee. Each match appears twice, once per side, so filtering by one address never double counts. Liquidation fills are only in perp_liquidations, so leave that table out and a liquidated account's PnL is incomplete.

Which markets are covered?

Plain perps such as HYPE, HIP-3 perps with a dex prefix such as xyz:DRAM, spot pairs by index such as @107, and outcome tokens such as #1890, all in the same table. The Market_Kind column says which (perp, hip3, spot or outcome), so there is no prefix to parse.

How do liquidations appear?

Each liquidation match has two rows in perp_liquidations, one for the liquidated account and one for the counterparty, and Liquidation_LiquidatedUser names the liquidated account on both. Those fills are not repeated in trades. The perp_liquidations table has no public sample file; its columns are documented here from the export schema.

Where are the orders that never traded?

In the Hyperliquid Order Book dataset. This product holds matches only; opens, cancels, rejects and L4 book deltas are sold separately because they are about a hundred times larger.

How far back does it go?

30 days. HyperCore history is kept as a rolling 30-day window, so a purchase covers the 30 days up to the day before we prepare the files, and there is no longer window to buy. For a continuous feed beyond that, ask about the live stream.

Why are there two time units?

Because the node emits them that way and we keep the values as emitted. Block_Time and Twap_Interval_EventTime are epoch nanoseconds; Trade_Execution_EventTime, Liquidation_Execution_EventTime and Twap_Interval_StartTime are epoch milliseconds. Divide by 1e9 or 1e3 respectively when converting to timestamps.

Why are some columns empty?

Position_Size, Position_EntryPrice and Position_Funding, Trade_MarkPx, Trade_Position_Closed and Liquidation_Liquidator are never filled; they are part of the shared Hyperliquid schema. Signer, vault, leverage and maximum leverage fields are filled when the source data carries them and can be empty.

How do I load a file?

With DuckDB: SELECT * FROM read_parquet('trades/*.parquet'). With pandas: pd.read_parquet('trades/'). Parse Trade_Execution_Price, Trade_Execution_Size, Trade_Fees_Fee and the other money columns with Decimal rather than float; they are stored as decimal strings on purpose.

Does this match the live stream?

Yes. These field definitions are the ones Bitquery's Hyperliquid Kafka topics use, so a backtest reading this archive and a production consumer reading the live stream decode with the same code.

How is the data delivered, and how current is it?

As Parquet files exactly as our parser writes them, one folder per table, each file covering a run of consecutive blocks. We prepare the files within 7 business days of purchase, covering the 30 days up to the day before. You choose at checkout where to collect them: a Requester Pays S3 bucket, downloaded with your own AWS account, or a Cloudflare R2 bucket with a read-only API key and no egress fees. Files stay available for 7 days from delivery.

Can I try before I buy?

Yes. The trades and twaps tables link to public sample Parquet files from a real 1,000-block pack of 29 September 2026, with every column the export writes: 100 trade rows and the 7 TWAP status rows in that pack. The sample repository on GitHub shows the first records as readable JSON. No email address required.