Overview
The get_holder_data() method retrieves detailed information about token holders for a specific trading pair on the Solana blockchain. This data is crucial for analyzing token distribution, identifying whale wallets, detecting smart money movements, and assessing holder concentration risk.
Whale Tracking
Identify large holders and their positions
Smart Money Detection
Track wallets with successful trading history
Distribution Analysis
Understand token concentration
Risk Assessment
Detect concentration risk and potential dumps
Method Signature
def get_holder_data(
self,
pair_address: str,
only_tracked_wallets: bool = False
) -> DictParameters
pair_address (str, required)
- Description: The DEX pair address (liquidity pool address) for the token
- Format: Base58-encoded Solana public key (32-44 characters)
- Example:
"Cr8Qy7quTPDdR3sET6fZk7bRFtiDFLeuwntgZGKJrnAY"
Where to find:
- ⢠DEX Screener pair information
- ⢠New pair WebSocket events (pair_address field)
- ⢠Token explorers (Solscan, SolanaFM)
- ⢠get_pair_info() method
only_tracked_wallets (bool, optional)
- Description: Filter to show only "tracked" wallets (whales, smart money, influencers)
- Default:
False(return all holders) - Use Case: Set to
Trueto focus on important wallets only
Return Value
Returns a dictionary containing comprehensive holder information:
{
"holders": [
{
"walletAddress": "Wallet123...",
"tokenBalance": 1500000,
"tokenBalanceFormatted": "1,500,000",
"percentageOfSupply": 15.5,
"solValue": 25.5,
"usdValue": 2850.00,
"isTracked": true,
"trackedReason": "Smart Money",
"entryPrice": 0.00001,
"currentPnL": 125.50,
"pnlPercentage": 35.2,
"holdingTimeHours": 48,
"lastActivity": "2026-01-14T10:30:00Z"
}
],
"summary": {
"totalHolders": 1250,
"trackedWallets": 15,
"top10HoldingPercentage": 45.5,
"top20HoldingPercentage": 62.3,
"averageHoldingSize": 800,
"medianHoldingSize": 150
},
"concentration": {
"giniCoefficient": 0.75,
"concentrationRisk": "High",
"largestHolderPercentage": 12.5,
"whaleCount": 8
},
"smartMoney": {
"smartMoneyWallets": 12,
"smartMoneyPercentage": 18.5,
"avgSmartMoneyWinRate": 65.0
}
}holders (Array)
List of all token holders with position details, PnL, and tracking status
summary (Object)
Overall statistics: total holders, top holder percentages, averages
concentration (Object)
Distribution metrics: Gini coefficient, risk level, whale count
smartMoney (Object)
Smart money analytics: count, percentage held, average win rate
Basic Usage Examples
Example 1: Get All Holders
Retrieve complete holder data for a token pair.
from axiomtradeapi import AxiomTradeClient
client = AxiomTradeClient()
client.login("username", "password")
pair_address = "Cr8Qy7quTPDdR3sET6fZk7bRFtiDFLeuwntgZGKJrnAY"
# Get all holder data
result = client.get_holder_data(pair_address, only_tracked_wallets=False)
print(f"š Token Holder Analysis")
print(f"=" * 50)
print(f"Total holders: {result['summary']['totalHolders']}")
print(f"Tracked wallets: {result['summary']['trackedWallets']}")
print(f"Top 10 hold: {result['summary']['top10HoldingPercentage']:.1f}%")
print(f"Top 20 hold: {result['summary']['top20HoldingPercentage']:.1f}%")
print(f"\nš Concentration Risk")
print(f"Risk Level: {result['concentration']['concentrationRisk']}")
print(f"Gini: {result['concentration']['giniCoefficient']:.2f}")
print(f"Largest: {result['concentration']['largestHolderPercentage']:.1f}%")Example 2: Track Smart Money Wallets
Focus on tracked wallets only (smart money, whales, influencers).
from axiomtradeapi import AxiomTradeClient
client = AxiomTradeClient()
client.login("username", "password")
pair_address = "Cr8Qy7quTPDdR3sET6fZk7bRFtiDFLeuwntgZGKJrnAY"
# Get only tracked wallets
result = client.get_holder_data(pair_address, only_tracked_wallets=True)
print("šÆ Tracked Wallets Analysis\n")
for holder in result['holders'][:10]:
wallet = holder['walletAddress'][:8] + "..."
percentage = holder['percentageOfSupply']
reason = holder.get('trackedReason', 'Unknown')
pnl = holder.get('pnlPercentage', 0)
pnl_emoji = "š¢" if pnl > 0 else "š“"
print(f"{reason:15} | {wallet} | {percentage:5.2f}% | {pnl_emoji} {pnl:+.1f}%")
print(f"\nš° Smart Money Summary:")
print(f" Wallets: {result['smartMoney']['smartMoneyWallets']}")
print(f" Owns: {result['smartMoney']['smartMoneyPercentage']:.1f}%")
print(f" Win rate: {result['smartMoney']['avgSmartMoneyWinRate']:.1f}%")Example 3: Identify Whale Wallets
Find and analyze whale holders.
from axiomtradeapi import AxiomTradeClient
client = AxiomTradeClient()
client.login("username", "password")
result = client.get_holder_data(pair_address)
print("š Whale Wallet Analysis\n")
# Define whale threshold (> 5% of supply)
WHALE_THRESHOLD = 5.0
whales = [
holder for holder in result['holders']
if holder['percentageOfSupply'] >= WHALE_THRESHOLD
]
print(f"Found {len(whales)} whale wallets\n")
for i, whale in enumerate(whales, 1):
wallet = whale['walletAddress'][:8] + "..."
percentage = whale['percentageOfSupply']
usd_value = whale.get('usdValue', 0)
print(f"{i}. {wallet}")
print(f" Holding: {percentage:.2f}% (${usd_value:,.0f})")
print()Advanced Examples
Advanced usage patterns for production applications:
Real-Time Monitoring
Detect accumulation/distribution patterns
Concentration Calculator
Calculate detailed risk metrics
Smart Money Tracker
Track and copy winning wallets
Distribution Visualizer
Generate distribution statistics
Full advanced examples with complete code are available in the GitHub repository
View Examples on GitHubBest Practices
1. Filter by Tracked Wallets for Efficiency
# ā
Good: Use filter when you only need tracked wallets
tracked = client.get_holder_data(pair_address, only_tracked_wallets=True)
# ā Inefficient: Getting all then filtering manually
all_holders = client.get_holder_data(pair_address, only_tracked_wallets=False)
tracked = [h for h in all_holders['holders'] if h.get('isTracked')]2. Cache Results for Multiple Analyses
# Get once, use multiple times
holder_data = client.get_holder_data(pair_address)
# Multiple analyses
concentration_risk = analyze_concentration(holder_data)
whale_count = count_whales(holder_data)
distribution = analyze_distribution(holder_data)3. Set Realistic Thresholds
def get_whale_threshold(market_cap: float) -> float:
"""Adjust whale threshold based on market cap"""
if market_cap > 10_000_000: # > $10M
return 2.0 # 2%
elif market_cap > 1_000_000: # > $1M
return 5.0 # 5%
else:
return 10.0 # 10% for small capsRisk Indicators
š© High Risk Signals
- ⢠Top holder > 15%
- ⢠Top 10 > 60%
- ⢠Top 20 > 80%
- ⢠Gini coefficient > 0.8
- ⢠Smart money exiting
ā Good Signs
- ⢠Top 10 < 50%
- ⢠Gini coefficient < 0.7
- ⢠Growing holder count
- ⢠Smart money profitable
- ⢠Low whale concentration
Troubleshooting
Issue: Empty Holder List
Possible Causes:
- ⢠Invalid pair address
- ⢠Very new token (data not indexed yet)
- ⢠Token has no holders yet
holder_data = client.get_holder_data(pair_address)
if holder_data['summary']['totalHolders'] == 0:
print("No holders - check pair address or wait for indexing")Issue: Slow Performance
Solution: Use tracked wallets filter
# Use tracked wallets only when possible
if need_whale_data_only:
holder_data = client.get_holder_data(
pair_address,
only_tracked_wallets=True
)Need Help?
Our support team can help you with holder analysis and risk assessment
Related Documentation
Build Smart Trading Systems
Need help implementing holder analysis and whale tracking? We're here to help.