Skip to content

PnL cards

The PnL subsystem answers one question: how much have my wallets actually made or lost on this NFT collection?

It does that by fetching transfer history from Alchemy, running a FIFO cost-basis match across ETH + WETH inflows, and rendering a shareable PNG.

Prerequisites

  • An Alchemy URL with API key for the chain in question, set in Settings → PnL.
  • The collection’s wallet group has at least one buy or mint with a payable side (or it’s a free mint — that’s fine too).

Without an Alchemy URL, the PnL button still opens the panel but the card will be empty / no data.

How the math works

For each wallet in the group:

  1. Pull all token-in events (mint, buy, transfer-in) and all token-out events (sale, transfer-out) for the contract via Alchemy’s alchemy_getAssetTransfers.
  2. Pair each outgoing token with the FIFO-earliest incoming token (the one you “bought first”, you “sold first”).
  3. Compute realized PnL per pair: sell_price - buy_price - gas.
  4. For unrealized (still-held) tokens, the floor estimate is the latest known sale price on that collection — not a real-time floor query.

What counts as a buy / sell

DirectionWhat counts as the basis / proceeds
ETH transfer in the same txYes.
WETH transfer in the same txYes — including OpenSea offer-accepts where the buyer paid in WETH.
Stablecoin or other tokensNo, not currently.
Pure airdrops (no payable side)Basis = 0, gas only.

The WETH inclusion is the big differentiator — OpenSea offer-accepts paid in WETH are common, and missing them would understate proceeds significantly.

The PNG card

Click Render Card in the panel. The image:

  • Header: collection name + your group label.
  • Tiles: count of NFTs held, realized PnL, unrealized PnL, total.
  • Per-token breakdown rows.
  • Background: one of three configurable slots (Settings → PnL backgrounds).

The PNG is saved to your downloads folder (or wherever the file dialog lands). Standard 16:9 share format.

Background slots

Three slots, configurable via the PnL settings card. Each slot is a path to a local PNG/JPG. Slot 1 is the default; slot 2/3 are for variant cards (e.g., a darker variant for X, a lighter one for Discord).

Common questions

“My PnL shows 0 ETH proceeds but I sold for 2 ETH.” The sale used a payment token the PnL engine doesn’t recognize (a stablecoin, or a non-WETH wrapped token). Currently only ETH + WETH on the same tx count.

“PnL took 30 seconds to compute.” Wallet groups with deep history (hundreds of transfers) take time on the Alchemy fetch. The compute step is fast — the fetch is the slow part.

“Numbers don’t match my OpenSea history.” OpenSea’s UI sometimes shows different math (gross before fees, royalties folded differently). PnL here is sell - buy - gas, net of fees baked into the on-chain value.