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.
The parts you keep working around.
Anonymized tapes make 'who is worth copying' unanswerable.
Computing trader PnL from raw fills is an accounting project with float-rounding landmines.
Following a specific set of wallets means filtering a firehose client-side.
How the platform answers, point by point.
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}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.8M | 57.7% | $373.1M | 84,171 |
| 0x1cc6…e6e7 | +$1.6M | 58.4% | $371.2M | 80,281 |
| 0x5001…e11b | +$1.4M | 70.0% | $208.4M | 37,961 |
| 0xcc9e…845c | +$584,847 | 57.6% | $229.7M | 53,889 |
| 0x8626…57c5 | +$560,779 | 67.4% | $84.8M | 73,173 |
| 0x4f86…6de2 | +$471,778 | 53.8% | $106.5M | 71,010 |
| 0xe69b…d3f8 | +$439,822 | 66.3% | $55.0M | 54,893 |
| 0x5eee…55bd | −$562,590 | 51.0% | $202.4M | 65,747 |
| 0x6745…e58b | −$1.2M | 51.1% | $335.1M | 18,859 |
Sample rows in the wallet-PnL dataset format: 63,000+ wallets tracked across the full tape.
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)The plan that fits.
Ultra
$199/moRecommendedRecent 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 plansBuild 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.