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 arrive on the wire. A custom wallet-PnL aggregation can be scoped separately on request.

{  "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

A custom wallet-PnL request can roll captured fills up per address into agreed realized PnL, win rate, volume, and trade-count fields after source coverage and calculation rules are confirmed.

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

Recent replay and maximum throughput.

Pro allows 25 wallet filters; platforms tracking larger trader cohorts want Ultra's unlimited filters. Custom wallet-PnL datasets are separately scoped on request.

Compare both plans

Build the leaderboard, skip the accounting.

closed_pnl preserves its raw decimal representation on each fill. Request volume and win-rate rollups as a custom dataset.