Solana Token Holders API
Get real-time and historical token holder data for any SPL token on Solana. Bitquery provides two approaches to retrieve token holders — choose the one that fits your use case.
Choosing the Right API
Bitquery provides two versions of Solana APIs — each with different strengths for retrieving token holder data:
| Feature | V1 API (Transfers) | V2 API (Balance Updates) |
|---|---|---|
| Data coverage | Complete historical data from token launch | Last ~8 hours of balance updates |
| Best for | Any token, any age | Newly launched tokens (< 8 hours old) |
| Data freshness | Lags a few minutes behind real-time | Real-time |
| Method | Calculates holders from cumulative transfers (sum of inflows − outflows) | Reads latest balance snapshot directly |
| Query complexity | Requires aggregation (sum, expression) | Simple — just read PostBalance |
| Ideal use cases | Tokens older than 8 hours, historical holder analysis, whale tracking | Tokens launched within the last 8 hours, Pump.fun launches, fast holder snapshots |
- Token launched more than 8 hours ago → Use V1 API (complete history)
- Token launched within the last 8 hours → Use V2 API (faster, simpler)
- Need both speed and history → Combine both: V2 for the latest snapshot, V1 for historical trends
V1 API — Historical Token Holders via Transfers
The V1 API calculates token holders by summing all incoming and outgoing transfers for each wallet address. This gives you complete, accurate holder data for any token regardless of when it was launched.
Strengths:
- Full historical coverage from token genesis
- Works for any SPL token, any age
- Accurate holder balances computed from on-chain transfer history
Limitation:
- Data may lag a few minutes behind real-time
For more V1 Solana transfer examples, see the V1 Solana Transfers documentation.
Top Token Holders
Get the top holders for any SPL token by calculating net balances from transfer history.
Try it live: Solana Token Holders V1
{
solana(network: solana) {
transfers(
date: { since: "2026-02-19" }
currency: { is: "943YczGfS95e1ZnUSMd5DPQrGXaKBS2zGR76htycpump" }
options: { limit: 10000, desc: "balance" }
) {
sum_in: amount(calculate: sum)
sum_out: amount(calculate: sum)
balance: expression(get: "sum_in - sum_out")
count_in: countBigInt
count_out: countBigInt
currency {
address
symbol
tokenType
}
receiver {
address
}
}
}
}
How This Query Works
- Fetches all transfers for the specified token since the given date
- Groups by receiver address — each row represents a unique wallet
sum_in— total tokens received by that walletsum_out— total tokens sent out by that walletbalance— net balance calculated assum_in - sum_out- Results sorted by balance in descending order — top holders first
Customization Options
Filter by date range — Narrow down to a specific period:
date: { since: "2026-01-01", till: "2026-02-19" }
Increase result limit — Get more holders (up to the API limit):
options: { limit: 25000, desc: "balance" }
Filter out zero balances — Only show current holders:
Add a filter to exclude wallets where balance equals zero by checking sum_in - sum_out > 0 in your application logic after receiving the results.
V2 API — Real-Time Token Holders via Balance Updates
The V2 API reads the latest balance snapshot directly from Solana's balance update records. This is faster and simpler but only covers the last ~8 hours of data.
Strengths:
- Real-time data with minimal delay
- Simpler query — reads balance directly instead of calculating from transfers
- Great for newly launched tokens and fast-moving markets
Limitation:
- Only covers the last ~8 hours of balance updates
- Best suited for tokens launched within that window
Top Token Holders
Get the top 50 holders for a recently launched token using balance updates.
Try it live: Solana Token Holders V2
{
Solana {
BalanceUpdates(
orderBy: { descendingByField: "BalanceUpdate_balance_maximum" }
limit: { count: 50 }
where: {
BalanceUpdate: {
PostBalance: { gt: "0" }
Currency: {
MintAddress: {
is: "943YczGfS95e1ZnUSMd5DPQrGXaKBS2zGR76htycpump"
}
}
}
}
) {
BalanceUpdate {
Account {
Owner
}
balance: PostBalance(maximum: Block_Slot)
}
}
}
}
How This Query Works
- Fetches balance update records for the specified token mint address
- Filters out zero balances —
PostBalance: { gt: "0" }ensures only current holders are shown PostBalance(maximum: Block_Slot)— gets the most recent balance by taking the value at the highest block slot- Sorted by balance in descending order — top holders first
Account.Owner— returns the wallet owner address
Customization Options
Get more holders — Increase the limit:
limit: { count: 200 }
Filter by minimum balance — Only show significant holders:
PostBalance: { gt: "1000000" }
Use Cases
Whale Tracking
Monitor large holders and track their accumulation or distribution patterns. Use V1 for historical whale behavior or V2 for real-time whale alerts on new tokens.
Token Distribution Analysis
Analyze how evenly a token is distributed across holders. Calculate metrics like the Gini coefficient or top-10 holder concentration to assess decentralization.
New Token Launch Monitoring
Track holder growth for newly launched tokens (especially Pump.fun launches). Use V2 for instant holder snapshots within the first 8 hours.
Holder Count Over Time
Use V1 to track how the number of unique holders changes over different date ranges, revealing adoption trends.
Airdrop Verification
Verify that airdrop recipients actually hold the tokens by querying current balances.
Smart Money Tracking
Identify wallets that consistently hold tokens early in successful launches. Cross-reference with the Solana Trader API for deeper analysis.
Best Practices
- Choose the right API for your use case — V1 for historical/complete data, V2 for speed on new tokens
- Set appropriate date ranges in V1 — Narrower ranges reduce query complexity and points consumed
- Filter out zero balances — Exclude wallets that have sold all tokens for cleaner results
- Account for token decimals — Raw balances need to be divided by
10^decimalsfor human-readable amounts - Exclude known program accounts — Filter out system programs, DEX pools, and bridge contracts for accurate retail holder counts
- Cache results — Token holder data doesn't change every second; cache for 1–5 minutes to reduce API usage
- Combine V1 and V2 — Use V2 for the latest snapshot and V1 for historical trend analysis
Related APIs
- Solana Balance Updates API — Real-time balance change monitoring
- Solana Transfers API — Track token transfers
- Solana DEX Trades API — Trading activity for tokens
- Solana Trader API — Trader analytics and smart money tracking
- Solana Token Supply API — Token supply data
- Pump.fun API — Pump.fun token data
Support
For questions or issues: