HyperCore fills, order statuses, L4 book diffs, oracle pushes, ledger events, TWAPs and CoreWriter actions, block by block, as Parquet.
Coverage
Latest monthto Sep 23, 2026 · yesterday
Tables
7Parquet, one prefix each
Columns
156across 7 tables
Coverage ends yesterday, UTC
Overview
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.
Use cases
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
7 tables
156 columns · free sample for each table
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.
hyperliquid/fills<start_block>_<end_block>.parquet200 blocks per file
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.
hyperliquid/order_statuses<start_block>_<end_block>.parquet200 blocks per file
Actions written into HyperCore from HyperEVM contracts through the CoreWriter precompile: spot sends, orders, vault and class transfers, staking, with the HyperEVM transaction hash.
hyperliquid/core_writer_actions<start_block>_<end_block>.parquet200 blocks per file
fills25 columnsOne 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.
ColumnTypeDescription
Block2
Block_NumberUInt64HyperCore block number; the join key across all seven tables
order_statuses25 columnsOne 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.
ColumnTypeDescription
Block2
Block_NumberUInt64HyperCore block number; the join key across all seven tables
Block_TimeUInt64Block time, epoch nanoseconds
Other6
UserStringAccount address, 0x-prefixed hex
StatusStringopen, canceled, filled, triggered, or one of the *Rejected states such as badAloPxRejected
TimeUInt64Status time, epoch nanoseconds
HashStringL1 transaction hash, 0x-prefixed hex; not a join key, one transaction spans many events and TWAP trades carry 32 zero bytes
BuilderStringBuilder address when the order came through a builder, else null
ExtraMapForward-compatibility map; non-empty when the node emitted a field not yet modelled
oracle_updates11 columnsOne 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.
ColumnTypeDescription
Block_NumberUInt64HyperCore block number; the join key across all seven tables
Block_TimeUInt64Block time, epoch nanoseconds
UpdateClassStringWho pushed the update: Validator or Deployer (HIP-3 markets)
MarkPxInputsArrayCoin and price pairs used as mark price inputs
SpotPxInputsArrayCoin and price pairs from spot markets
ExternalPerpPxInputsArrayCoin and price pairs from external perp venues
OraclePxs_CoinToMarkPxArrayResulting mark price per coin with LastUpdateTime and DailyPx
OraclePxs_CoinToOraclePxArrayResulting oracle price per coin with LastUpdateTime and DailyPx
OraclePxs_CoinToExternalPerpPxArrayResulting external perp price per coin with LastUpdateTime and DailyPx
OraclePxs_ExtraMapForward-compatibility map; non-empty when the node emitted a field not yet modelled
ExtraMapForward-compatibility map; non-empty when the node emitted a field not yet modelled
core_writer_actions27 columnsActions written into HyperCore from HyperEVM contracts through the CoreWriter precompile: spot sends, orders, vault and class transfers, staking, with the HyperEVM transaction hash.
ColumnTypeDescription
Block2
Block_NumberUInt64HyperCore block number; the join key across all seven tables
Block_TimeUInt64Block time, epoch nanoseconds
Other4
UserStringSystem address that emitted the action, 0x-prefixed hex
NonceUInt64Action nonce
EvmTxHashStringHyperEVM transaction hash that triggered the action, 0x-prefixed hex
ExtraMapForward-compatibility map; non-empty when the node emitted a field not yet modelled
Action21
Action_TypeStringAction type, for example SystemSpotSendAction, LimitOrderAction, VaultTransferAction
Action_DestinationStringDestination address for send actions, else null
Action_TokenUInt64Token index for send actions, else null
Action_WeiUInt64Amount in wei for send actions, else null
Action_DestinationDexOrSpotNullable(String)Destination dex or spot for transfers, else null
Action_SourceDexOrSpotNullable(String)Source dex or spot for transfers, else null
Action_FromSubAccountStringSub-account the action came from, else null
Action_NtlDecimalNotional for USD class transfers, else null
Action_ToPerpBoolFor class transfers: true when moving to perp, else null
Action_GroupingNullable(String)Order grouping (na, normalTpsl, positionTpsl) for order actions, else null
Action_OrdersArrayOrders placed by an order action, empty otherwise
Action_AgentAddressStringAgent address for approve-agent actions, else null
Action_AgentNameNullable(String)Agent name for approve-agent actions, else null
Action_SignatureChainIdNullable(String)Chain id the action was signed for, else null
Action_HyperliquidChainNullable(String)Mainnet or Testnet, else null
Action_ValidatorStringValidator address for staking actions, else null
Action_IsUndelegateBoolTrue for undelegate actions, else null
Action_ActionNonceUInt64Nonce inside the signed action, else null
Action_BuilderStringBuilder address for approve-builder-fee actions, else null
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.
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.
How big is it?
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.
How is this different from Hyperliquid's free S3 archive?
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.
How do I compute a wallet's realized PnL?
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).
Which markets does Coin cover?
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.
Why are there two time units?
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.
What does a non-empty Extra column mean?
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.
How do I load a file?
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.
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.
Can I buy just part of it?
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.
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 yesterday and there is no longer window to buy. For a continuous feed beyond that, ask about the live stream.
How is the data delivered, and how current is it?
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.
Can I try before I buy?
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.