A tape with names on it.

Wallet-level attribution on every fill (realized PnL, positions, volume), so you can surface top traders, not anonymous flow.

Your problem

The parts you keep working around.

01

Anonymized tapes make 'who is worth copying' unanswerable.

02

Computing trader PnL from raw fills is an accounting project with float-rounding landmines.

03

Following a specific set of wallets means filtering a firehose client-side.

The proof

Every fill carries its trader.

Wallet, position context, realized PnL, and fee on the wire, plus the same attribution aggregated per address in the wallet-PnL dataset below.

{  "block_height": 612408133,  "block_time": "2026-06-09T08:14:02.418Z",  "coin": "BTC",  "px": "67012.0",  "sz": "0.14523",  "notional": "9732.15",  "side": "B",  "crossed": true,  : "0x7c4ee0c0c5d3ab91f7f0f3c2a3d6b18452e9a3f9",  : "Close Short",  "start_position": "-0.42100",  : "182.337041",  : "2.433037",  "is_rebate": false,  "oid": 91834221107,  "cloid": "0x00000000000000000000000000a1b2c3",  "tid": 442191083327011,  "twap_id": null,  "liquidation": null}
Aggregated per address

The wallet-PnL derived dataset rolls the same fills up per address into realized PnL, win rate, volume, and trade count, so the leaderboard is a query, not a pipeline.

0x5dd8…9faf+$1.8M57.7%$373.1M84,171
0x1cc6…e6e7+$1.6M58.4%$371.2M80,281
0x5001…e11b+$1.4M70.0%$208.4M37,961
0xcc9e…845c+$584,84757.6%$229.7M53,889
0x8626…57c5+$560,77967.4%$84.8M73,173
0x4f86…6de2+$471,77853.8%$106.5M71,010
0xe69b…d3f8+$439,82266.3%$55.0M54,893
0x5eee…55bd$562,59051.0%$202.4M65,747
0x6745…e58b$1.2M51.1%$335.1M18,859

Sample rows in the wallet-PnL dataset format: 63,000+ wallets tracked across the full tape.

Integration sketch

Follow specific wallets, server-side.

Pass the addresses you track in the subscription and receive only their fills. Pro allows 25 wallet filters; Ultra removes the limit.

Read the docs
# Follow specific traders, server-sidefills = swap_stub.StreamSwaps(    swaps_pb2.SwapRequest(        market_type="ALL",        wallets=[            "0x7c4ee0c0c5d3ab91f7f0f3c2a3d6b18452e9a3f9",            "0xa4f17bd09e26c3158c0b7341fa882ce05d97b264",        ],    ),    metadata=metadata,)for fill in fills:    print(fill.user, fill.coin, fill.dir, fill.closed_pnl)
Where to start

The plan that fits.

Ultra

$199/moRecommended

Full archive, replay, and maximum throughput.

Pro allows 25 wallet filters; platforms tracking trader cohorts want Ultra's unlimited filters and the wallet-PnL derived dataset.

Compare both plans

Build the leaderboard, skip the accounting.

closed_pnl arrives byte-exact on every fill, and the derived dataset carries volume and win-rate per address.