How to export your Hyperliquid trade history
updated october 2026 · ~5 min · not tax advice
There is no export button
Hyperliquid has no account statements, no tax documents, no download link. Everything the venue knows about your account lives behind its public info API — four separate streams you have to request, page, and assemble yourself.
That means every 'export' you have ever seen — from a portfolio tracker, a tax tool, a community script — is a reconstruction over those endpoints. The quality of your export is the quality of that reconstruction, and most of them fail in the same place.
The obvious path silently truncates
The natural endpoint for trades is userFillsByTime — the same one the venue UI reads. Two properties make it unusable as an export source: it only retains roughly the last 30 hours, and it caps at 2,000 rows per call. An 'all-time' export built on it typically holds a few days of an account's life.
This is the single most common silent failure in Hyperliquid tax data. Nothing errors; you simply get a CSV that looks complete and isn't. A quick sanity check catches it: if the row count or date span of an import seems light relative to how much you actually traded, the import was probably built on this endpoint.
What a complete export actually contains
Four streams, all required. Fills — every trade with price, size, side, the venue's own realized PnL, and the signed fee (negative = paid, positive = rebate; get the sign wrong and your fee line inverts). These only exist in full through a chain indexer such as HypurrScan.
Funding — a separate endpoint entirely (userFunding), settled hourly per market. It does serve full history, but tools that only read fills never see a single row of it. Ledger — deposits, withdrawals, sends, spot transfers, sub-account moves (userNonFundingLedgerUpdates, also full history). And the sampled portfolio curves — not for export, but for checking the export: Δ account value minus every boundary flow should equal reported PnL.
One more coverage gap: builder-dex markets (HIP-3 venues like xyz:, flx:, vntl:) now carry over half of perp volume. Any export that enumerates only the main perp book misses them — and on dex-heavy accounts, misses the majority.
Getting the rows out
If you run the free check, the recompute already pulls the full stream — fills from the indexer, funding and ledger from the venue — and verifies the totals against the venue's own curves. Row-level CSVs (the complete fill ledger, per-disposal lot records, open inventory) are the paid report's deliverable.
If you'd rather assemble it yourself: pull fills from HypurrScan's indexed feed (mind the same-millisecond ordering — sort by timestamp then event index), funding and ledger from the venue endpoints with 500-row pagination, and keep the fee sign convention exactly as the API returns it. Whatever you build, verify the result against an independent recomputation before it goes anywhere near a filing.
Common questions
?Why does my Hyperliquid export only show recent trades?
The venue's fill endpoint (userFillsByTime) retains roughly the last 30 hours and caps at 2,000 rows per call. Anything built on it truncates silently — full history requires a chain indexer.
?Does a fills export include funding payments?
No — funding is a separate endpoint (userFunding), settled hourly. A fills-only export produces a $0 funding line, which on an account that held positions means data was dropped.
?How do I get a CSV my accountant can use?
Run the free check to verify your totals are complete and correct first. Row-level CSV exports — the fill ledger, per-disposal records, open inventory — are what the paid report delivers.
Verify your export is complete — free
The check pulls the full stream — indexed fills, every funding event, the complete ledger — and closes the account-value identity against the venue's own curves.
Run the free check