Enter one wallet per line — add every Hyperliquid address the client controls so gains and losses are consolidated correctly. Then drop the Koinly export(s); rows are matched to each wallet automatically. Reporting is broken out per tax year. Keyless — nothing leaves your browser except read-only address lookups.
Drop the Koinly CSV export(s) or click to choose
Koinly → Export transactions (Universal CSV). One combined export or one per wallet — both work. Optional (HL-only runs too).
2 · Reconciliation
How it works
Reconciles one or more Hyperliquid wallets for a client against Koinly — consolidated and broken out by tax year — and produces the exact correcting entries to book.
What it produces
A consolidated per-tax-year result across every wallet you enter (realized PnL, funding, total).
Per-wallet detail: year-by-year Koinly-vs-Hyperliquid variance, plus a time-phased schedule of correcting entries.
Flags for possible inter-wallet self-transfers (same-owner moves that are not taxable and must not be booked as income).
A downloadable XLSX workpaper (Consolidated + one tab per wallet + Koinly Import) and a ready-to-import Koinly CSV.
Why multiple wallets & per-tax-year
A client may trade from several Hyperliquid wallets. A gain in one and a loss in another only tell the true story when consolidated — but gains and losses in different tax years do not net across years, so every figure is reported per year. Money moved between the client's own wallets is a non-taxable transfer, flagged for review so it isn't mistaken for income or a disposal.
How realized PnL is computed — and why not from trades
Hyperliquid's per-trade fill API is lossy for high-volume accounts (large chunks of fills are not served), and Koinly books PnL in sparse lump sums. So realized PnL is derived from the cash-flow + account-value identity, which needs no trade data and cannot be fooled by missing fills:
realized PnL (net of fees) = Δ account value − deposits + withdrawals − net funding
It's corroborated by Hyperliquid's own reported all-time PnL. Fills are never summed for PnL.
Why the correcting entries are time-phased
Koinly tracks the running balance chronologically, so a large withdrawal made before its funding gains were recorded drives the balance negative — triggering negative-balance and missing-basis errors on every downstream row. The tool inserts a realized-gain entry before each withdrawal that would overdraw (sized to the wallet's actual equity then) and a true-up at each year-end, so the balance stays funded and each year's PnL is recognized in the right year.
Deterministic, not AI
Every figure is computed deterministically from Hyperliquid data and your Koinly CSV — no AI, no estimation. Data source: Hyperliquid's free public API. Your CoinMarketMan / HyperTracker key is not used (its API excludes wallet history).