> For the complete documentation index, see [llms.txt](https://docs.j.tools/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.j.tools/tools/utilities/token-snapshot.md).

# Holder Snapshot and Analytics

Last updated: June 2026 · Solana mainnet

[Token Snapshot](https://j.tools/en/tools/token-snapshot) scans any Solana token mint and exports a ranked holder list (exact balance, share of supply, optional native SOL, and a CSV/Excel/JSON download) straight from your browser wallet on Solana mainnet. It is read-only and free, with any platform fee shown before you sign. Use it for a point-in-time holder export before an airdrop, a vote, or a distribution audit.

{% hint style="warning" %}
**About fees.** Every action has two costs: the Solana **network fee** paid to validators, and the **J Tools platform fee**. The platform fee always shows in the app before you confirm, and nothing is charged until you sign. Fees can change over time, so trust the in-app summary rather than a number you saw once.
{% endhint %}

## When to use this

* You are preparing an airdrop and need an exact holder list to send to.
* You are building a governance or voting eligibility list from current holders.
* You are auditing distribution or checking concentration before a launch.
* You need a point-in-time holder export for treasury or compliance reporting.

The export feeds straight into the wallet tools. Pull a snapshot here, then send with [Multi Sender](/tools/wallets/multi-sender.md). If you are not sure what a holder or mint address is, the [Glossary](/getting-started/glossary.md) covers the terms.

## Before you start

* A connected wallet ([how to connect](/getting-started/quick-start.md)). The run stays blocked with a "connect your wallet" message until you connect.
* The token's mint address (CA). It can be a classic SPL mint or a Token-2022 mint. The difference is explained in [SPL vs Token-2022](/concepts/spl-vs-token2022.md).
* An active RPC endpoint. The app supplies this from your current connection, so there is nothing to paste.

{% hint style="info" %}
The scan itself is a read-only lookup. It reads on-chain state and does not move any tokens or change your holdings.
{% endhint %}

## Step by step

{% stepper %}
{% step %}

### Open Token Snapshot and connect

Connect your wallet if you have not already, then open the tool page.
{% endstep %}

{% step %}

### Enter the token mint

Pick the token with the built-in selector and confirm the mint address (CA). The address is validated as a real Solana public key before the run starts.
{% endstep %}

{% step %}

### Pick a top-holder limit and SOL option

Choose how many top holders to return: 100, 500, 1000, 5000, or 10000. The default is 1000. Leave "Include SOL Balances" on to also pull each top holder's native SOL balance, or turn it off for a faster, token-only run.
{% endstep %}

{% step %}

### Run the snapshot

Click **Run Snapshot**. The page scans every token account holding that mint, groups them by owner, sums multiple accounts per owner, then sorts by token amount and keeps the top rows you asked for. The full holder count is still measured even when the table is capped.
{% endstep %}

{% step %}

### Review and filter

Read the ranked table: rank, holder, token amount, USD value, share %, SOL, and how many accounts each owner holds. Each row is classified, so LP pools, exchange wallets, burn addresses, and the dev/creator wallet are tagged instead of being mistaken for real holders. Wallets first seen within the last 30 days show a fresh tag with their age, and the table reports how many of the sampled wallets are fresh. Filter by address with search, change the sort, or set a minimum SOL threshold (only when SOL balances are included).
{% endstep %}

{% step %}

### Export

Download the visible rows as CSV, Excel (.xlsx), or JSON. Each file carries a metadata header with the mint, the requested top count, the generated-at time, and any filters you applied.
{% endstep %}
{% endstepper %}

[**Open Token Snapshot in the app →**](https://j.tools/en/tools/token-snapshot)

## Why use Token Snapshot instead of writing a script?

You can pull a holder list yourself with an RPC `getProgramAccounts` call and some glue code, but it is slow to build and easy to get wrong (multiple accounts per owner, Token-2022 mints, LP and exchange wallets counted as real holders). Token Snapshot does that work for you and runs in your browser, so no keys leave your machine.

|                    | Token Snapshot                                 | A hand-rolled script                   |
| ------------------ | ---------------------------------------------- | -------------------------------------- |
| Setup              | None, runs in your browser                     | Write and host code, manage RPC access |
| Holder grouping    | Sums multiple accounts per owner automatically | You handle the grouping logic          |
| Wallet tagging     | LP, CEX, burn, dev, and fresh tags built in    | Manual, if at all                      |
| Token-2022 support | Reads classic SPL and Token-2022               | You add the branch yourself            |
| Export             | CSV, Excel, JSON with a metadata header        | Roll your own formatting               |
| Cost               | Free, any platform fee shown before you sign   | Your dev time plus RPC bills           |

## The options, explained

| Field                | What it does                                                                                                                                                 |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Token mint (CA)      | The token to snapshot. Required. Entered through the built-in token selector and validated as a real Solana address.                                         |
| Top holders          | How many top holders to return: 100, 500, 1000, 5000, or 10000. Default 1000. This caps the table rows; the full holder set is still scanned for the totals. |
| Include SOL balances | On by default. Adds each top holder's native SOL balance, fetched in batches. Turn it off for a quicker, token-only run.                                     |
| Search               | Filters the table by holder address. Runs in your browser; it is not sent to the server.                                                                     |
| Sort by              | Reorders the rows by token amount, share, SOL, or address. The server already returns rows by token amount, highest first.                                   |
| Minimum SOL          | Hides wallets below a SOL threshold. Only available when SOL balances are included. Also a browser-side filter.                                              |

{% hint style="info" %}
Search, sort, and minimum-SOL all run on the rows already loaded in your browser. They reshape what you see and export without re-running the scan.
{% endhint %}

## A snapshot is a single moment

{% hint style="warning" %}
Solana state changes block by block. A snapshot reflects holders at the moment it ran, not five minutes later. Re-run it right before any final airdrop or governance action so you are sending to the current set, not a stale one.
{% endhint %}

## If something goes wrong

Holder scanning is RPC-heavy, since the tool pages through every token account for the mint. The page names the specific failure so you know what to do next.

* **RPC errors (AUTH\_FORBIDDEN, METHOD\_UNSUPPORTED, UNSUPPORTED\_INDEX, RATE\_LIMITED, TIMEOUT).** The endpoint refused, throttled, or could not serve the account-scan method. The most common fix is to lower the Top Holder Limit and run again.
* **Heavy-scan timeout.** Very large holder sets can hit the scan time limit. The page suggests dropping to a smaller top limit and retrying.
* **USD value shows "-".** The USD column comes from an external price lookup made from your browser. If that lookup fails, USD shows a dash and the rest of the snapshot still works.

For the full list, see the [Error codes reference](/reference/error-codes.md).

## FAQ

<details>

<summary>Does it scan all holders even if I pick "top 100"?</summary>

Yes. The scan covers the full set of token accounts so the holder totals are accurate. The top-holder limit only caps how many rows land in the table and the export, so the unique-holder count can be much larger than the rows you see.

</details>

<details>

<summary>Does it work with Token-2022 tokens?</summary>

Yes. The tool reads both classic SPL mints and Token-2022 mints. It loads the mint's supply and decimals first, then scans the matching token accounts. See [SPL vs Token-2022](/concepts/spl-vs-token2022.md) for how the two standards differ.

</details>

<details>

<summary>Why is the USD value sometimes blank?</summary>

USD pricing relies on an external price feed called from your browser. When that feed is unreachable or rate-limited, the USD column falls back to a dash. The balances and shares are read straight from the chain and stay correct.

</details>

<details>

<summary>Can the displayed amount be slightly off for huge balances?</summary>

For extremely large balances, the displayed and exported token amount can lose a little precision because of how the number is divided by the token's decimals. Shares and ranking still hold; treat the largest figures as close rather than exact to the last digit.

</details>

<details>

<summary>What do the LP, CEX, burn, dev, and fresh tags mean?</summary>

Each holder is classified so you can read the list without treating infrastructure wallets as real holders. LP marks liquidity pool accounts, CEX marks known exchange wallets, and burn marks burn addresses. The dev tag flags the creator wallet. A fresh tag appears on wallets first seen within the last 30 days, with the wallet's age shown next to it, which is useful for spotting newly created clusters.

</details>

<details>

<summary>Does J Tools hold my tokens during a snapshot?</summary>

No. This is a read-only scan. J Tools never takes custody of your tokens or asks for your keys.

</details>

## Related tools

{% content-ref url="/pages/ABVX2mBQDoCv7DEdVmKp" %}
[Multi Sender](/tools/wallets/multi-sender.md)
{% endcontent-ref %}

{% content-ref url="/pages/o5eO6abVdoCCB4WkfKVR" %}
[Holder Booster](/tools/boost/holder-booster.md)
{% endcontent-ref %}

{% content-ref url="/pages/7CPBHR61Y6akMdkeSBGW" %}
[Batch Collector](/tools/wallets/batch-collector.md)
{% endcontent-ref %}

{% content-ref url="/pages/a7TACAPAW24OFOSbtgNw" %}
[Wallet Generator](/tools/wallets/wallet-generator.md)
{% endcontent-ref %}

{% hint style="success" %}
**J Tools is non-custodial.** We never hold your private keys and never ask for them. Every transaction is built in your browser and signed by your own wallet. If any page ever asks you to paste a private key, stop, close it, and let us know.
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.j.tools/tools/utilities/token-snapshot.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
