Hyperliquid Leaderboard: How to Track Top Addresses' PnL
How to get Hyperliquid leaderboard data using the Hyperliquid API.

Hyperliquid's leaderboard ranks its top accounts by PnL, ROI and volume, for the day, week, month and all time. It's the obvious place to find traders worth studying or following, but it's a web page, and you can't build on a web page.
To track those traders in your own tools, or rank them your own way, you need the same data through an API. On Hyperliquid, all of it is public.
Hyperliquid's leaderboard vs a CEX leaderboard
On a centralized exchange (CEX), a leaderboard is a showcase the exchange curates. On Hyperliquid, every account trades on-chain, so the ranking is just a view over public data:
| Leaderboard on Hyperliquid | Leaderboard on a CEX | |
|---|---|---|
| Who's ranked | Any account that meets the listing threshold, under its wallet address | Usually traders who opt in |
| Checking the numbers | Pull any trader's PnL, positions and fills yourself | Usually only the stats the exchange shows |
| Following a trader | Watch their wallet live through the API | Usually through the exchange's own copy program |
So on Hyperliquid, you can rebuild the leaderboard yourself and check every number behind it. Here's how, in four parts:
- Rank top traders from the file behind Hyperliquid's leaderboard.
- Check one trader's numbers with documented requests.
- Avoid the traps in leaderboard data.
- See how Hydromancer's API comes in, with and without it side by side.
Numbers are a snapshot from when we tested, and addresses are shortened.
About the snippets: like our docs, they're excerpts. They assume Python with requests installed and imported, and HYDROMANCER_API_KEY set in your environment for the Hydromancer examples.
Step 1: Rank top traders from the leaderboard file
Hyperliquid has no documented leaderboard request. Its leaderboard page reads its data from a public file, https://stats-data.hyperliquid.xyz/Mainnet/leaderboard.
It lists every ranked account with its account value, plus PnL, ROI and volume for the day, week, month and all time. No key is needed:
import requests
rows = requests.get(
"https://stats-data.hyperliquid.xyz/Mainnet/leaderboard"
).json()["leaderboardRows"]
def month_pnl(row):
return float(dict(row["windowPerformances"])["month"]["pnl"])
for r in sorted(rows, key=month_pnl, reverse=True)[:3]:
addr = r["ethAddress"]
print(f"{addr[:6]}…{addr[-4:]} ${month_pnl(r):,.0f}")0x5b5d…c060 $106,736,282
0xb83d…6e36 $94,443,652
0x87f9…e2cf $26,653,991Each row has the wallet's ethAddress, its accountValue, an optional displayName, and windowPerformances with pnl, roi and vlm (volume) for each window. Swap "month" for "day", "week" or "allTime" to rank a different window.
Vaults sit in the same file as people. To remove them, match addresses against Hyperliquid's vault list file, stats-data.hyperliquid.xyz/Mainnet/vaults (also undocumented). Here's the result with vaults removed:

Two wallets stand far above the rest. Rankings like this move fast, because the file's PnL includes open positions.
Step 2: Check one trader with documented requests
The file is undocumented, so use it to find traders, not as the numbers you show users. For one wallet, Hyperliquid's documented portfolio request returns account value and PnL history for the same windows:
import requests
portfolio = dict(requests.post(
"https://api.hyperliquid.xyz/info",
json={"type": "portfolio", "user": TRADER},
).json())
month = portfolio["month"]
value = float(month["accountValueHistory"][-1][1])
pnl = float(month["pnlHistory"][-1][1])
print(f"account value ${value:,.0f} | month PnL ${pnl:,.0f}")account value $231,996,569 | month PnL $92,705,622TRADER is the top wallet from Step 1, as a full address. The file showed $106.7M of month PnL for it, while portfolio showed $92.7M. The file's windows and refresh timing aren't documented, so the exact reason for the gap isn't known. Show portfolio numbers to users.
For the rest of a trader's picture, clearinghouseState gives open positions and userFills gives recent trades. Our trade history guide covers fills in depth.
Step 3: Avoid the traps in leaderboard data
- It isn't sorted by PnL. Sort it yourself, as above.
- PnL includes open positions. Hyperliquid's portfolio graphs docs define PnL from account value, which includes unrealized PnL. A big number can reverse.
- ROI isn't simple PnL over account value. Hyperliquid's leaderboard page defines it as PnL ÷ max(100, starting account value + maximum net deposits) for the window. PnL is easier to compare across traders.
- It's large, so don't re-download it every time. Send the
ETagback in anIf-None-Matchheader, and you get a304 Not Modifieduntil the file changes. - One person can hold many wallets. Sub-accounts and vaults have their own addresses.
How Hydromancer's API comes in when tracking Hyperliquid's top traders
The leaderboard file can't tell you who is a person, how many trades someone made, or whether their profit is locked in. And watching what top traders do next means following many wallets at once.
| What you need | Without Hydromancer (Hyperliquid's API only) | With Hydromancer's API |
|---|---|---|
| A ranking | The undocumented file: PnL includes open positions | userPnlLeaderboard :realized PnL from closed trades, after fees and funding |
| Filter out bots and one-off wallets | Not possible from the file | Filters for trade count, active days, account age and a human score |
| One trader's record | portfolio ,userFills(recent fills) | userPnlSummary :win rate, fees, funding and trades since 1 August 2025 |
| Top traders' positions | clearinghouseState, one wallet per request | batchClearinghouseStates: up to 1,000 wallets on one DEX in one request |
| Watch top traders trade live | One subscription per wallet; the docs allow 10 users per IP | One userFillssubscribe request for up to 1,000 addresses; each counts toward your plan's subscription total (500 on Starter) |
The ranking and summary requests are part of Hydromancer's user performance add-on.
Example: rank traders by closed trades, with bot filters
Without Hydromancer: the file's top 3 by month PnL (Step 1), including open positions, with no way to filter out bots.
With Hydromancer: realized PnL from closed trades, keeping only wallets with 20+ trades and a human score of 70 or more:
import os
import requests
board = requests.post(
"https://api.hydromancer.xyz/info",
json={
"type": "userPnlLeaderboard",
"window": "30d",
"sortBy": "totalPnl",
"limit": 3,
"minTrades": 20,
"minHumanScore": 70,
},
headers={"Authorization": f"Bearer {os.environ['HYDROMANCER_API_KEY']}"},
).json()
for u in board["users"]:
addr, pnl = u["user"], float(u["totalPnl"])
print(f"{addr[:6]}…{addr[-4:]} ${pnl:,.0f} win rate {u['winRate']:.0%}")0x9546…181c $4,629,851 win rate 9%
0x9321…d75a $4,617,371 win rate 49%
0x77ee…a018 $4,232,734 win rate 90%It's a completely different list. The file rewards open positions that have moved in a trader's favor; this ranks profit that's been taken. The human score is a 0–100 heuristic built from how a wallet trades, so treat it as a filter, not a label.
Which to use: for a public ranking based on the app's data, the file is free and enough. Choose Hydromancer when you need to filter out bots, rank by closed trades, or watch many top traders at once.
FAQ
Does Hyperliquid have a leaderboard API?
Not a documented one. The app's leaderboard reads a public JSON file at stats-data.hyperliquid.xyz/Mainnet/leaderboard, which works without a key.
How do I see what top Hyperliquid traders are holding?
Take their addresses from the leaderboard, then read each one's open positions with clearinghouseState. For many traders at once, Hydromancer's batchClearinghouseStates reads up to 1,000 wallets on one DEX in one request. Our guide to what top traders are holding shows it in practice.
How do I get a Hyperliquid trader's PnL?
Send {"type": "portfolio", "user": "0x…"} to https://api.hyperliquid.xyz/info. It returns account value and PnL history for the day, week, month and all time.
How often does the Hyperliquid leaderboard update?
Hyperliquid doesn't publish a schedule. Check the file's Last-Modified header to see how old your copy is.
Can I tell bots from human traders on the leaderboard?
Not from the file. Hydromancer's userPnlLeaderboard has a minHumanScore filter based on how a wallet trades. It's a heuristic, not a label.
Next steps
- Rank traders now: run the Step 1 snippet and change the window.
- Follow a trader live: our whale tracker guide.
- Copy a top trader automatically: our copy trading bot guide.
- Need a filtered ranking? See Hydromancer's REST API.
Read next

How to Build a Hyperliquid Copy Trading Bot
Learn how to build a Hyperliquid copy trading bot on Hyperliquid with the Hyperliquid API.
Read ↗
How to Build a Hyperliquid Trading Bot
Learn how to build a Hyperliquid trading bot: a signal from market data, signed orders through Hyperliquid's API, risk limits and a kill switch, with examples.
Read ↗
How to Build a Hyperliquid Orderbook Heatmap
Learn how to build a Hyperliquid order book heatmap: sample l2Book snapshots, choose the price grouping, then read walls, pulled liquidity and depth.
Read ↗