Approach The indexer reads every finalized transaction that references the token's mint, in chain order, from a known start point (the mint's creation). Each transaction is normalized from its own balance metadata: token changes are netted per owner across all of that owner's token accounts, and the owner's SOL change (native plus wrapped) is taken from the same transaction. Each (transaction, owner) pair has a unique identity, so re-reading a transaction never double counts. A durable cursor lets the indexer resume after restarts.
Supported venues - Pump bonding curve (before migration) - PumpSwap canonical pool (after migration) - Aggregator routes (for example Jupiter) that settle against one of these venues inside the same transaction. Netting per transaction means intermediate hops are not double counted.
Purchases paid with assets other than SOL are tracked as quantity without cost basis. Other venues are not supported.