# Hyperliquid — Bitquery Data Store HyperCore fills, order statuses, L4 book diffs, oracle pushes, ledger events, TWAPs and CoreWriter actions, block by block, as Parquet. Dataset page: https://bitquery.io/datastore/datasets/hyperliquid Network: Hyperliquid Category: Trades, Orders, Events Tables: 7 Columns: 156 Coverage: first block to 2026-09-23 Format: Apache Parquet, Snappy compression, one prefix per table Licence: https://bitquery.io/datastore/legal/data-license ## What this is Hyperliquid data from the HyperCore L1 order-book exchange, not HyperEVM: seven event tables recorded per block and joined on Block_Number. The fills table carries one row per counterparty per match with ClosedPnl, Fee, StartPosition and a taker flag, so maker and taker attribution and per-wallet realized PnL come straight out of the file. The order_statuses table keeps every order that never traded, including cancels and rejects, and book_diffs holds per-order L4 deltas rather than L2 snapshots, so the book can be rebuilt at any block. Hyperliquid's own S3 archive publishes L2 snapshots and asset contexts and nothing else. This dataset is the shape a quant or data engineer needs for execution analysis: money and sizes are decimal strings, addresses and hashes are 0x-prefixed hex, and Block_Time is epoch nanoseconds while Fill.Time and Order.Timestamp are epoch milliseconds. Key matches on (Block_Number, Coin, Tid); Hash is not a join key because one L1 transaction spans many matches. ## What people use it for - Order-book microstructure research at L4: queue position, order lifetime, cancel and reject rates - Per-wallet realized PnL, fees and liquidation history from both sides of every fill - Backtests that decode with the same schema as Bitquery's live Hyperliquid stream - Funding, oracle and mark-price studies across plain perps, HIP-3 markets and spot ## Tables (7) ### fills — 25 columns One row per counterparty per match: price, size, direction, realized PnL, fees, taker flag and liquidation details. A match appears twice, keyed by (Block_Number, Coin, Tid). Time is epoch milliseconds. S3 prefix: hyperliquid/fills File naming: _.parquet, 200 blocks per file Free sample (real Parquet, no email needed): https://bitquery-blockchain-dataset.s3.us-east-1.amazonaws.com/hyperliquid/fills/1075858800_1075858999.parquet Sample updated: Sep 2, 2026 | column | type | description | | --- | --- | --- | | Block_Number | UInt64 | HyperCore block number; the join key across all seven tables | | Block_Time | UInt64 | Block time, epoch nanoseconds | | User | String | Account address, 0x-prefixed hex | | Coin | String | Market: plain perp (HYPE), HIP-3 perp (xyz:DRAM), spot (@107) or outcome token (#1890) | | Side | String | B for bid (buy), A for ask (sell) | | Px | Decimal | Price, decimal string | | Sz | Decimal | Size in base units, decimal string | | StartPosition | Decimal | Signed position before the fill (negative is short), in base units | | Dir | String | Direction label: Open Long, Close Short, Buy, and so on | | ClosedPnl | Decimal | Realized PnL of this fill in USDC | | Fee | Decimal | Fee paid, negative when the maker received a rebate | | FeeToken | String | Token the fee was paid in, usually USDC | | Hash | String | L1 transaction hash, 0x-prefixed hex; not a join key, one transaction spans many events and TWAP trades carry 32 zero bytes | | Oid | UInt64 | Order id | | Tid | UInt64 | Trade id; the match key with Block_Number and Coin, appearing once per side | | Crossed | Bool | True when this side was the taker | | Time | UInt64 | Fill time, epoch milliseconds | | Cloid | String | Client order id, 0x-prefixed hex | | TwapId | UInt64 | TWAP id when the order is a TWAP child, else null | | BuilderFee | Decimal | Builder fee charged on the fill, else null | | Liquidation | Map | Liquidation details (liquidated user, mark price, method) when the fill was a liquidation, else null | | Builder | String | Builder address when the order came through a builder, else null | | DeployerFee | Decimal | HIP-3 deployer fee charged on the fill, else null | | PriorityGas | Nullable(String) | Priority gas attached to the order, else null | | Extra | Map | Forward-compatibility map; non-empty when the node emitted a field not yet modelled | ### order_statuses — 25 columns One row per order status change: open, canceled, filled, triggered and every *Rejected state, with time in force, reduce-only, trigger and TP/SL bracket fields. Time is epoch nanoseconds. S3 prefix: hyperliquid/order_statuses File naming: _.parquet, 200 blocks per file Free sample (real Parquet, no email needed): https://bitquery-blockchain-dataset.s3.us-east-1.amazonaws.com/hyperliquid/order_statuses/1075858800_1075858999.parquet Sample updated: Sep 2, 2026 | column | type | description | | --- | --- | --- | | Block_Number | UInt64 | HyperCore block number; the join key across all seven tables | | Block_Time | UInt64 | Block time, epoch nanoseconds | | User | String | Account address, 0x-prefixed hex | | Status | String | open, canceled, filled, triggered, or one of the *Rejected states such as badAloPxRejected | | Time | UInt64 | Status time, epoch nanoseconds | | Order_Coin | String | Market: plain perp (HYPE), HIP-3 perp (xyz:DRAM), spot (@107) or outcome token (#1890) | | Order_Side | String | B for bid (buy), A for ask (sell) | | Order_LimitPx | Decimal | Limit price, decimal string | | Order_Sz | Decimal | Remaining size at this status, in base units | | Order_OrigSz | Decimal | Original size when the order was placed, in base units | | Order_Oid | UInt64 | Order id | | Order_Timestamp | UInt64 | Order placement time, epoch milliseconds | | Order_OrderType | String | Limit, Market, Stop Market, Take Profit Limit, and so on | | Order_TriggerCondition | String | Trigger condition for trigger orders, N/A otherwise | | Order_TriggerPx | Decimal | Trigger price, 0.0 for non-trigger orders | | Order_IsTrigger | Bool | True for stop and take-profit orders | | Order_IsPositionTpsl | Bool | True when the order is a position-level take-profit or stop-loss | | Order_ReduceOnly | Bool | True when the order can only reduce a position | | Order_Cloid | String | Client order id, 0x-prefixed hex | | Order_Tif | String | Time in force: Gtc, Ioc, Alo, or FrontendMarket | | Order_Children | Array | Child TP/SL bracket orders attached to this order | | Order_Extra | Map | Forward-compatibility map; non-empty when the node emitted a field not yet modelled | | Hash | String | L1 transaction hash, 0x-prefixed hex; not a join key, one transaction spans many events and TWAP trades carry 32 zero bytes | | Builder | String | Builder address when the order came through a builder, else null | | Extra | Map | Forward-compatibility map; non-empty when the node emitted a field not yet modelled | ### book_diffs — 12 columns L4 order-book deltas: one row per new, update or remove of a single order, with owner, order id, price and size. S3 prefix: hyperliquid/book_diffs File naming: _.parquet, 200 blocks per file Free sample (real Parquet, no email needed): https://bitquery-blockchain-dataset.s3.us-east-1.amazonaws.com/hyperliquid/book_diffs/1075858800_1075858999.parquet Sample updated: Sep 2, 2026 | column | type | description | | --- | --- | --- | | Block_Number | UInt64 | HyperCore block number; the join key across all seven tables | | Block_Time | UInt64 | Block time, epoch nanoseconds | | User | String | Account address, 0x-prefixed hex | | Oid | UInt64 | Order id | | Coin | String | Market: plain perp (HYPE), HIP-3 perp (xyz:DRAM), spot (@107) or outcome token (#1890) | | Side | String | B for bid (buy), A for ask (sell) | | Px | Decimal | Price, decimal string | | Kind | String | new, update or remove | | Sz | Decimal | Size of a new order, in base units; null for update and remove | | OrigSz | Decimal | Size before an update, in base units; null otherwise | | NewSz | Decimal | Size after an update, in base units; null otherwise | | Extra | Map | Forward-compatibility map; non-empty when the node emitted a field not yet modelled | ### oracle_updates — 11 columns One row per oracle push: the mark, oracle and external perp price inputs and results for every coin the validator set or a HIP-3 deployer priced. S3 prefix: hyperliquid/oracle_updates File naming: _.parquet, 200 blocks per file Free sample (real Parquet, no email needed): https://bitquery-blockchain-dataset.s3.us-east-1.amazonaws.com/hyperliquid/oracle_updates/1075858800_1075858999.parquet Sample updated: Sep 2, 2026 | column | type | description | | --- | --- | --- | | Block_Number | UInt64 | HyperCore block number; the join key across all seven tables | | Block_Time | UInt64 | Block time, epoch nanoseconds | | UpdateClass | String | Who pushed the update: Validator or Deployer (HIP-3 markets) | | MarkPxInputs | Array | Coin and price pairs used as mark price inputs | | SpotPxInputs | Array | Coin and price pairs from spot markets | | ExternalPerpPxInputs | Array | Coin and price pairs from external perp venues | | OraclePxs_CoinToMarkPx | Array | Resulting mark price per coin with LastUpdateTime and DailyPx | | OraclePxs_CoinToOraclePx | Array | Resulting oracle price per coin with LastUpdateTime and DailyPx | | OraclePxs_CoinToExternalPerpPx | Array | Resulting external perp price per coin with LastUpdateTime and DailyPx | | OraclePxs_Extra | Map | Forward-compatibility map; non-empty when the node emitted a field not yet modelled | | Extra | Map | Forward-compatibility map; non-empty when the node emitted a field not yet modelled | ### misc_events — 38 columns Ledger updates (deposits, withdrawals, sends, transfers, vault flows), funding payments, bridge events, delegations, validator rewards and gossip. InnerType says which; only that group's columns are filled. S3 prefix: hyperliquid/misc_events File naming: _.parquet, 200 blocks per file Free sample (real Parquet, no email needed): https://bitquery-blockchain-dataset.s3.us-east-1.amazonaws.com/hyperliquid/misc_events/1075858800_1075858999.parquet Sample updated: Sep 2, 2026 | column | type | description | | --- | --- | --- | | Block_Number | UInt64 | HyperCore block number; the join key across all seven tables | | Block_Time | UInt64 | Block time, epoch nanoseconds | | Time | UInt64 | Event time, epoch nanoseconds | | Hash | String | L1 transaction hash, 0x-prefixed hex; not a join key, one transaction spans many events and TWAP trades carry 32 zero bytes | | InnerType | String | Which event this row is: LedgerUpdate, Funding, CDeposit, CWithdrawal, Delegation, ValidatorRewards or Gossip | | LedgerUpdate_Users | Array | Accounts touched by the ledger update | | LedgerUpdate_Delta_Type | String | Ledger delta type: send, deposit, withdraw, accountClassTransfer, subAccountTransfer, vaultDeposit, and so on | | LedgerUpdate_Delta_User | String | Account the delta applies to | | LedgerUpdate_Delta_Amount | Decimal | Amount moved, in the token's units | | LedgerUpdate_Delta_Token | String | Token moved, for example USDC | | LedgerUpdate_Delta_Usdc | Decimal | USDC amount for deltas denominated in USDC, else null | | LedgerUpdate_Delta_UsdcValue | Decimal | USD value of the delta | | LedgerUpdate_Delta_Destination | String | Receiving account for sends and transfers | | LedgerUpdate_Delta_DestinationDex | String | Destination HIP-3 dex for cross-dex transfers, empty otherwise | | LedgerUpdate_Delta_SourceDex | String | Source HIP-3 dex for cross-dex transfers, empty otherwise | | LedgerUpdate_Delta_Fee | Decimal | Fee charged on the delta | | LedgerUpdate_Delta_FeeToken | String | Token the fee was charged in, empty when no fee | | LedgerUpdate_Delta_NativeTokenFee | Decimal | Fee charged in the native token | | LedgerUpdate_Delta_Nonce | UInt64 | Nonce of the originating action | | LedgerUpdate_Delta_ToPerp | Bool | For account class transfers: true when moving spot to perp, else null | | LedgerUpdate_Delta_Operation | Nullable(String) | Operation label for vault and staking deltas, else null | | LedgerUpdate_Delta_InterestAmount | Decimal | Interest component for lending deltas, else null | | LedgerUpdate_Delta_Vault | String | Vault address for vault deltas, else null | | LedgerUpdate_Delta_Basis | Decimal | Cost basis for vault withdrawals, else null | | LedgerUpdate_Delta_ClosingCost | Decimal | Closing cost for vault withdrawals, else null | | LedgerUpdate_Delta_Commission | Decimal | Vault leader commission, else null | | LedgerUpdate_Delta_NetWithdrawnUsd | Decimal | Net USD withdrawn from a vault, else null | | LedgerUpdate_Delta_RequestedUsd | Decimal | USD requested in a vault withdrawal, else null | | LedgerUpdate_Delta_IsDeposit | Bool | True for deposit-type deltas, else null | | LedgerUpdate_Delta_Extra | Map | Forward-compatibility map; non-empty when the node emitted a field not yet modelled | | LedgerUpdate_Extra | Map | Forward-compatibility map; non-empty when the node emitted a field not yet modelled | | Funding | Map | Funding payment details when InnerType is Funding, else null | | CDeposit | Map | Bridge deposit details when InnerType is CDeposit, else null | | CWithdrawal | Map | Bridge withdrawal details when InnerType is CWithdrawal, else null | | Delegation | Map | Staking delegation details when InnerType is Delegation, else null | | ValidatorRewards | Map | Validator reward details when InnerType is ValidatorRewards, else null | | Gossip | Map | Gossip event details when InnerType is Gossip, else null | | Extra | Map | Forward-compatibility map; non-empty when the node emitted a field not yet modelled | ### twap_statuses — 18 columns One row per TWAP order status change: activated, finished, terminated or error, with size executed so far and notional. S3 prefix: hyperliquid/twap_statuses File naming: _.parquet, 200 blocks per file Free sample (real Parquet, no email needed): https://bitquery-blockchain-dataset.s3.us-east-1.amazonaws.com/hyperliquid/twap_statuses/1075858400_1075858599.parquet Sample updated: Sep 2, 2026 | column | type | description | | --- | --- | --- | | Block_Number | UInt64 | HyperCore block number; the join key across all seven tables | | Block_Time | UInt64 | Block time, epoch nanoseconds | | Time | UInt64 | Status time, epoch nanoseconds | | TwapId | UInt64 | TWAP order id | | State_Coin | String | Market: plain perp (HYPE), HIP-3 perp (xyz:DRAM), spot (@107) or outcome token (#1890) | | State_User | String | Account address, 0x-prefixed hex | | State_Side | String | B for bid (buy), A for ask (sell) | | State_Sz | Decimal | Total TWAP size, in base units | | State_ExecutedSz | Decimal | Size executed so far, in base units | | State_ExecutedNtl | Decimal | Notional executed so far, in USDC | | State_Minutes | UInt64 | TWAP duration in minutes | | State_Timestamp | UInt64 | TWAP start time, epoch milliseconds | | State_ReduceOnly | Bool | True when the TWAP can only reduce a position | | State_Randomize | Bool | True when sub-order timing is randomized | | State_Extra | Map | Forward-compatibility map; non-empty when the node emitted a field not yet modelled | | Status | String | activated, finished, terminated or error | | StatusError | Nullable(String) | Error text when Status is error, else null | | Extra | Map | Forward-compatibility map; non-empty when the node emitted a field not yet modelled | ### core_writer_actions — 27 columns Actions written into HyperCore from HyperEVM contracts through the CoreWriter precompile: spot sends, orders, vault and class transfers, staking, with the HyperEVM transaction hash. S3 prefix: hyperliquid/core_writer_actions File naming: _.parquet, 200 blocks per file Free sample (real Parquet, no email needed): https://bitquery-blockchain-dataset.s3.us-east-1.amazonaws.com/hyperliquid/core_writer_actions/1075858800_1075858999.parquet Sample updated: Sep 2, 2026 | column | type | description | | --- | --- | --- | | Block_Number | UInt64 | HyperCore block number; the join key across all seven tables | | Block_Time | UInt64 | Block time, epoch nanoseconds | | User | String | System address that emitted the action, 0x-prefixed hex | | Nonce | UInt64 | Action nonce | | EvmTxHash | String | HyperEVM transaction hash that triggered the action, 0x-prefixed hex | | Action_Type | String | Action type, for example SystemSpotSendAction, LimitOrderAction, VaultTransferAction | | Action_Destination | String | Destination address for send actions, else null | | Action_Token | UInt64 | Token index for send actions, else null | | Action_Wei | UInt64 | Amount in wei for send actions, else null | | Action_DestinationDexOrSpot | Nullable(String) | Destination dex or spot for transfers, else null | | Action_SourceDexOrSpot | Nullable(String) | Source dex or spot for transfers, else null | | Action_FromSubAccount | String | Sub-account the action came from, else null | | Action_Ntl | Decimal | Notional for USD class transfers, else null | | Action_ToPerp | Bool | For class transfers: true when moving to perp, else null | | Action_Grouping | Nullable(String) | Order grouping (na, normalTpsl, positionTpsl) for order actions, else null | | Action_Orders | Array | Orders placed by an order action, empty otherwise | | Action_AgentAddress | String | Agent address for approve-agent actions, else null | | Action_AgentName | Nullable(String) | Agent name for approve-agent actions, else null | | Action_SignatureChainId | Nullable(String) | Chain id the action was signed for, else null | | Action_HyperliquidChain | Nullable(String) | Mainnet or Testnet, else null | | Action_Validator | String | Validator address for staking actions, else null | | Action_IsUndelegate | Bool | True for undelegate actions, else null | | Action_ActionNonce | UInt64 | Nonce inside the signed action, else null | | Action_Builder | String | Builder address for approve-builder-fee actions, else null | | Action_MaxFeeRate | Nullable(String) | Maximum builder fee rate approved, else null | | Action_Extra | Map | Forward-compatibility map; non-empty when the node emitted a field not yet modelled | | Extra | Map | Forward-compatibility map; non-empty when the node emitted a field not yet modelled | ## Price - Latest month (Aug 23, 2026 → Sep 23, 2026): $250 one-time, USD One-time purchase. The files are yours to keep under the licence above. ## Questions buyers ask Q: What is included in the Hyperliquid dataset? A: Seven Parquet tables from HyperCore: fills, order_statuses, book_diffs, oracle_updates, misc_events, twap_statuses and core_writer_actions, with 156 documented columns. Every row carries Block_Number and Block_Time, so the tables join on block without a separate blocks table. HyperEVM transactions and contract events are not part of this bundle. Q: How big is it? A: Large, and driven by book activity. In a measured 1,000-block slice (about 73 seconds) we counted 142,955 order statuses, 89,241 book diffs and 1,552 fills. Scaled to a day that is roughly 170 million order statuses, 105 million book diffs and 1.8 million fills; exact row counts and sizes come with the delivery manifest, and these figures are estimates. Q: How is this different from Hyperliquid's free S3 archive? A: Hyperliquid's archive holds L2 book snapshots and asset contexts, uploaded roughly monthly, and states that no other historical data is provided that way. This dataset is L4: each book_diffs row names the order and the address behind it, and fills, rejects, cancels, funding and ledger events are all included. Q: How do I compute a wallet's realized PnL? A: Filter fills on User, then sum ClosedPnl and Fee. Each match appears twice, once per counterparty, so filtering by one User never double counts. Crossed tells you whether that side was the taker, and StartPosition is the signed position before the fill (negative is short). Q: Which markets does Coin cover? A: 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 stream. Filter on the prefix to separate them. Q: Why are there two time units? A: Because the node emits them that way and we keep the values as emitted. Block_Time, OrderStatus.Time and misc_events.Time are epoch nanoseconds; Fill.Time and Order.Timestamp are epoch milliseconds. Divide by 1e9 or 1e3 respectively when converting to timestamps. Q: What does a non-empty Extra column mean? A: The node emitted a field that the schema does not model yet, and we kept it rather than dropping it. Extra is empty on nearly every row. When a new field appears it lands there first, so nothing is silently lost between schema versions. Q: How do I load a file? A: With DuckDB: SELECT * FROM read_parquet('fills/*.parquet'). With pandas: pd.read_parquet('fills/'). Parse Px, Sz, Fee and the other money columns with Decimal rather than float; they are stored as decimal strings on purpose. Q: Does this match the live stream? A: 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. Q: Can I buy just part of it? A: Yes. The same tables are sold as three smaller datasets: Hyperliquid Trades (fills and TWAP statuses), Hyperliquid Order Book (order statuses, L4 book diffs and oracle updates) and Hyperliquid Ledger and Funding (ledger events and CoreWriter actions). This bundle is all seven tables in one purchase. Q: How far back does it go? A: 30 days. HyperCore history is kept as a rolling 30-day window, so a purchase covers the 30 days up to yesterday and there is no longer window to buy. For a continuous feed beyond that, ask about the live stream. Q: How is the data delivered, and how current is it? A: As flat Parquet files under a stable S3 layout, one prefix per table and one file per 200-block range, with a JSON manifest listing every file and its sha256. Signed HTTPS links are emailed once the files are prepared. Refreshed daily with T+1 latency; a purchase made today includes everything up to yesterday. Q: Can I try before I buy? A: Yes. Every table links to a public sample Parquet file from a real 1,000-block slice, and the sample repository on GitHub shows the first records of each table as readable JSON. No email address required. ## What this file is, and is not This is a description of one dataset sold by Bitquery, written for assistants and for people. It lists every column, but holds no data rows — the sample files linked under each table are real Parquet and are free to download. Figures here come from the product record and are exact unless marked otherwise; the delivery manifest is authoritative for a purchased file. If a question needs a row that is not in a sample, say so rather than guessing at it.