> ## Documentation Index
> Fetch the complete documentation index at: https://docs.codex.io/llms.txt
> Use this file to discover all available pages before exploring further.

# tokenWalletStats

> Returns the sniper, bundler and insider wallets that still hold a token, and how much of the supply they hold.

<div data-generated>
  ## GraphQL

  ```
  type Query {
    # Requires a Growth or Enterprise plan.
    tokenWalletStats(
      input: TokenWalletStatsInput!
    ): TokenWalletStats!
  }

  type TokenWalletStats {
    tokenId: String!
    tokenAddress: String!
    networkId: Int!
    tokenTotalSupply: String!
    sniperCount: Int!
    sniperHeldPercentage: Float!
    sniperAddresses: [String!]!
    sniperHeldAmount: String!
    bundlerCount: Int!
    bundlerHeldPercentage: Float!
    bundlerAddresses: [String!]!
    bundlerHeldAmount: String!
    insiderCount: Int!
    insiderHeldPercentage: Float!
    insiderAddresses: [String!]!
    insiderHeldAmount: String!
    suspiciousCount: Int!
    suspiciousHeldPercentage: Float!
    suspiciousAddresses: [String!]!
    suspiciousHeldAmount: String!
    devHeldPercentage: Float!
    devAddress: String!
    devHeldAmount: String!
  }

  input TokenWalletStatsInput {
    tokenAddress: String!
    networkId: Int!
  }
  ```
</div>

### Example

<a href="/explore" target="_blank" rel="noopener noreferrer">Test this query in the Explorer →</a>

```graphql theme={null}
{
  tokenWalletStats(
    input: {
      tokenAddress: "FvMLDEUDKUr9C34e8Nynz5Aqfdk34a2RBKQxygLpfomo"
      networkId: 1399811149
    }
  ) {
    tokenId
    tokenTotalSupply
    sniperCount
    sniperHeldPercentage
    sniperAddresses
    bundlerCount
    bundlerHeldPercentage
    bundlerAddresses
    insiderCount
    insiderHeldPercentage
    insiderAddresses
    suspiciousCount
    suspiciousHeldPercentage
    suspiciousAddresses
    devAddress
    devHeldPercentage
    devHeldAmount
  }
}
```

### Usage Guidelines

* Pass the token's contract address and `networkId`. The response is per token: a wallet's label here says nothing about its behavior on other tokens
* Every count, percentage, amount, and address list covers wallets that still hold the token. A labelled wallet that sold its whole balance drops out, so the numbers fall over time as those wallets sell
* Held percentages are measured against `tokenTotalSupply`. Amounts are unshifted raw units
* `suspicious*` is the deduplicated union of the sniper, bundler, and insider cohorts, not the sum of the three
* Address lists are capped at 200 per cohort. The counts and percentages still cover every labelled holder
* `devAddress` is empty when the creator is unknown. The creator's wallet can also appear in `sniperAddresses` if it bought within the sniper window
* For the same counts and percentages without addresses, use the matching fields on [`filterTokens`](/api-reference/queries/filtertokens) (launchpad tokens only), [`pairMetadata`](/api-reference/queries/pairmetadata) (`walletActivity`), or the [launchpad subscriptions](/api-reference/subscriptions/onlaunchpadtokeneventbatch)
* How each label is defined is explained in [Snipers, bundlers, and insiders](/recipes/discover-tokens#snipers-bundlers-and-insiders)

### Troubleshooting Tips

<AccordionGroup>
  <Accordion title="Why does every field come back zero or empty?">
    The token is outside coverage. Stats are computed for launchpad tokens on every network, and for EVM tokens without a launchpad that have a known creator and were created since October 8, 2025. Tokens that launched before tracking began also return zeros.
  </Accordion>

  <Accordion title="Why is sniperCount lower than what I saw at launch?">
    Only wallets that still hold the token are counted. Snipers and bundlers usually sell early, so a token that was heavily sniped can show a small count later.
  </Accordion>

  <Accordion title="How do these labels relate to wallet labels on filterWallets?">
    They are separate systems. These labels are applied per wallet and token from launch activity. The labels on [`filterWallets`](/api-reference/queries/filterwallets) and [`walletLabelTypes`](/api-reference/queries/walletlabeltypes) classify a wallet's behavior across every token it trades.
  </Accordion>
</AccordionGroup>

### Related Recipes

* [Discover tokens](/recipes/discover-tokens#snipers-bundlers-and-insiders): How snipers, bundlers, insiders, and the suspicious roll-up are defined
* [Launchpad lifecycle](/recipes/launchpad-lifecycle): Track tokens from creation through graduation


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.