vike

Recipe 63 of 65

How many traders were active on Hyperliquid each day, and what share were makers?

Count distinct wallets per UTC day in the archive's daily fills files, and per wallet the share of its notional filled as maker; the API itself does not serve a daily active-traders count.

GET /v1/hyperliquid/archive/url answers it with one download per day, because every fill of every wallet is in the archive's daily fills file, with is_maker on each row. Distinct wallet values in a day's file are that day's active traders. Group by wallet first to say what kind of trader each was: a wallet whose notional is mostly maker fills provides liquidity, the rest take it. The full parameter list is on Archive download link.

Quick answer

Download each day, then count wallets per day in Polars.

cURL
# download one UTC day of every fill; repeat per day
curl -s -L -H "X-API-Key: $VIKE_API_KEY" -o fills-2026-10-23.parquet \
  "https://data.vike.io/v1/hyperliquid/archive/url?dataset=fills&date=2026-10-23&redirect=1"
Polars
import polars as pl

per_wallet = (
    pl.scan_parquet("fills-2026-10-*.parquet")  # every day you downloaded, read as one table
    .group_by(pl.col("fill_ts").dt.date().alias("day"), "wallet")
    .agg(usd=pl.col("size_usd").sum(), maker_usd=pl.col("size_usd").filter(pl.col("is_maker")).sum())
)
daily = (
    per_wallet.group_by("day")
    .agg(
        active_wallets=pl.len(),
        with_a_maker_fill=(pl.col("maker_usd") > 0).sum(),
        mostly_maker=(pl.col("maker_usd") > 0.5 * pl.col("usd")).sum(),
    )
    .sort("day")
    .collect()
)
print(daily)

Example response

Computed with the Polars code on the free fills sample, captured from the live API on 2026-10-24 at 17:16 UTC, shown as JSON. The sample is one BTC hour (2026-10-21 00:00 to 01:00 UTC), so this row is that hour of BTC, not the whole day of the venue.

1,800 wallets traded BTC in that hour. 518 had at least one fill resting on the book, and 485 did most of their notional that way; the other 1,315 only took liquidity. Each count is of wallets, not fills.

Example response
[
  {"day": "2026-10-21", "active_wallets": 1800, "with_a_maker_fill": 518, "mostly_maker": 485}
]

Variations

New wallets per day. A wallet's first day in the files you hold. The archive starts on 2026-05-01, so "new" means new since then.

Polars — first seen
first = (
    pl.scan_parquet("fills-2026-*.parquet")
    .group_by("wallet").agg(first_day=pl.col("fill_ts").min().dt.date())
    .group_by("first_day").agg(new_wallets=pl.len())
    .sort("first_day")
    .collect()
)

Per coin. Add asset to the first grouping to count active wallets per coin and day.

Polars — per coin
per_coin = (
    pl.scan_parquet("fills-2026-10-*.parquet")
    .group_by(pl.col("fill_ts").dt.date().alias("day"), "asset")
    .agg(active_wallets=pl.col("wallet").n_unique())
    .sort("day", "active_wallets", descending=[False, True])
    .collect()
)

What the API counts instead. /stats has count_wallets per hour: wallets with an account snapshot that hour, traded or not. It is not this number.

cURL — stats
# venue-wide hourly equity, open interest and account counts
curl -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/hyperliquid/stats?limit=24"

Before you rely on it

The maker share of fills is always one half

Every trade has a maker row and a taker row, so is_maker is true on 50% of the rows in any file (exactly 0.5 on the sample) and says nothing about the market. Ask per wallet, as the Quick answer code does. The thresholds (any maker fill, or more than half of the notional) are a choice; state the one you use.

One file per day, from 2026-05-01; no API count

The API does not serve a daily active-traders figure; this needs one download per day, 0.1 to 0.5 GB each (0.36 GB for 2026-10-23), and links count against 20 GB per user per rolling 24 hours. A day's file is published in the early UTC morning after it ends. Spot pairs (@ names) and builder dexes are in the same file; filter asset to count one market.

Ask your agent

No MCP tool reads the archive: use the files.

Example response
[  {"day": "2026-10-21", "active_wallets": 1800, "with_a_maker_fill": 518, "mostly_maker": 485}]