Every Solana wallet has a public trading history. Every buy, every sell, every token touched — all recorded on-chain and visible to anyone who knows how to read it. The problem is that raw transaction data is nearly useless. A wallet with 500 swaps across 80 tokens tells you nothing until someone aggregates the buys and sells into round-trip positions, calculates cost basis, tracks hold durations, and computes actual profit and loss.
That's what the Wallet Analyzer does. Paste any Solana wallet address and get the full picture: win rate, ROI, realized PnL, trading style classification, a verdict on overall skill, the best and worst trades, and the "biggest miss" — the token the wallet sold that later went to a much higher market cap.
The same data is available programmatically via the MadeOnSol API for bots, dashboards, and automated screening workflows.
Why Analyze Wallets
Three practical use cases drive most wallet analysis:
Vetting alpha callers. Someone on Twitter posts a 20x screenshot and tells you to follow their calls. Before you do, paste their wallet into the analyzer. Their actual win rate might be 22%. That 20x could be their only winner across 40 losing trades. For institutional-grade labeling of who a wallet actually belongs to, pair this with a platform like Nansen — our guide to using Nansen for Solana covers its entity labels and Smart Money signals.
Pre-copy-trade due diligence. Before wiring a wallet into a copy-trade rule, you want to know: does this wallet actually make money consistently? What's their typical hold time? Do they snipe early or chase pumps? The analyzer answers all of this in seconds.
Finding alpha wallets. The deployer cross-reference shows which deployer tiers a wallet buys from. If a wallet has a 65% win rate and buys overwhelmingly from Elite deployers tracked by Deployer Hunter, that's a signal worth investigating further. The same analyzer is useful in reverse — for tracking Solana insider wallets like dev wallets and team-token holders you want to watch, not copy.
The Enrichment Stack
When you analyze a wallet, the system computes several layers of data from the raw trade history. Here's what each one means.
Win Rate and ROI
Win rate is the percentage of round-trip tokens (tokens where the wallet both bought and sold) that ended with positive realized PnL. A round trip is a completed position — the wallet bought some amount of a token and later sold some or all of it.
ROI is (total realized PnL / total SOL spent on buys) * 100. A wallet that spent 100 SOL total and realized 140 SOL from sells has an ROI of 40%.
Both numbers only count completed round-trips. Tokens the wallet bought but never sold (open positions) don't affect win rate or ROI — there's no realized outcome yet. If it's specifically your own performance you want to measure across wallets and over time, a dedicated tracker is the better fit — see our roundup of the best Solana PnL tracking tools.
The Verdict System
The verdict is an AI-classified label based on a combination of win rate, ROI, sniper rate, round-trip rate, median hold duration, and deployer tier preference. Nine possible verdicts exist:
| Verdict | Tone | What It Means |
|---|
| Sharp sniper | Green | High sniper rate (early entries in the first 10 buyers), profitable, win rate above 50%. Targets early and exits fast. |
| Smart money | Green | 60%+ win rate, profitable, buying predominantly from elite deployers. Selective and disciplined. |
| Consistent trader | Green | Winning more than losing with positive realized PnL. Solid execution without a specialized style. |
| Quick flipper | Amber | Rapid entries and exits with short median hold times. Making it work — PnL is positive. |
| Swing trader | Green/Amber | Medium hold times with disciplined round-trips. Green if profitable, amber if not. |
| Diamond hands | Green/Muted | Low round-trip rate — holding most positions rather than selling. Green if sitting on realized gains, muted if bag-holding. |
| Active trader | Green/Muted | Enough trades and round-trips to classify but no dominant pattern. Net positive or negative. |
| Degen flipper | Red | Fast in, fast out, high round-trip rate, but underwater on realized PnL. The classic losing pattern. |
| Struggling | Red | Below 30% win rate across 3+ round-trip tokens. Consistently picking losers. |
The verdict is not a recommendation. A "Sharp sniper" can have a terrible week. A "Struggling" wallet might be experimenting with a new strategy. The label describes the historical pattern, not the future.
Biggest Miss
This is the most psychologically interesting metric. The biggest miss is the token the wallet sold that later peaked at the highest market cap — the one that got away.
The system scans all round-trip pump tokens (not just the top 10), looks up the ATH market cap via the pump.fun API, and only counts cases where the ATH occurred after the wallet's last sell. It calculates potential_sol_at_ath (what the position would have been worth at peak) minus actual_sol_out (what the wallet actually got).
A biggest miss of 500 SOL on a token that hit $2M ATH MC tells you the wallet sold at roughly $400K MC and missed the remaining 5x. This is useful for understanding a wallet's exit discipline — or lack of it.
The threshold is 0.5 SOL missed. Small dust positions are excluded.
Top Tokens and Trading Style
The top tokens breakdown shows the 10 most-traded tokens by volume in the 90-day window. For each token: buy count, sell count, SOL in, SOL out, realized PnL, current MC, and peak MC. This reveals whether the wallet trades a diverse set of tokens or concentrates on a few.
Trading style metrics include:
- Sniper rate: fraction of trades where the wallet was in the first 10 buyers (0 to 1)
- Round-trip rate: fraction of tokens that have both buys and sells
- Median hold time: first buy to first sell, median across all tokens
- Dominant action: whether the wallet leans buy-heavy, sell-heavy, or balanced
Deployer Breakdown
Shows which Pump.fun deployer tiers this wallet has bought from: elite, good, rising, moderate, cold, or unranked. A wallet that primarily buys from elite and good deployers is using deployer reputation as a filter — that's a meaningful behavioral signal.
Using the Free Web Scanner
Go to madeonsol.com/wallet, paste a wallet address, and the analysis runs immediately. No login, no API key, no rate limit for normal usage. Results are cached for 15 minutes — repeated checks of the same wallet are instant.
The web scanner shows all of the above: stats summary, verdict, top tokens, biggest miss, trading style, deployer breakdown, and recent trades. It's identical to the API response — same data, same source of truth.
Using the API
For programmatic access — screening wallets in bulk, feeding data into a dashboard, or running automated vetting before copy-trade activation — use the REST API.
import MadeOnSol from "madeonsol";
const client = new MadeOnSol({ apiKey: process.env.MADEONSOL_API_KEY! });
async function analyzeWallet(address: string) {
const wallet = await client.wallet.get(address);
console.log(`Win rate: ${(wallet.derived.win_rate * 100).toFixed(1)}%`);
console.log(`ROI: ${wallet.derived.roi_pct.toFixed(1)}%`);
console.log(`PnL (SOL): ${wallet.derived.total_realized_pnl_sol.toFixed(2)}`);
if (wallet.derived.verdict) {
console.log(`Verdict: ${wallet.derived.verdict.label}`);
console.log(` ${wallet.derived.verdict.description}`);
}
if (wallet.derived.biggest_miss) {
const miss = wallet.derived.biggest_miss;
console.log(`Biggest miss: ${miss.token_symbol}`);
console.log(` Sold for ${miss.actual_sol_out.toFixed(1)} SOL`);
console.log(` Could have been ${miss.potential_sol_at_ath.toFixed(1)} SOL`);
console.log(` ATH MC: $${miss.ath_mc_usd.toLocaleString()}`);
}
// Check deployer tier preference
const eliteBuys = wallet.deployer_breakdown.by_tier
.find(t => t.tier === "elite")?.count ?? 0;
const totalTokens = wallet.deployer_breakdown.total_tokens;
console.log(`Elite deployer rate: ${((eliteBuys / totalTokens) * 100).toFixed(0)}%`);
}
analyzeWallet("WALLET_ADDRESS_HERE").catch(console.error);
Screening Multiple Wallets
A practical workflow for finding wallets to copy-trade: pull early buyers of a trending token, then screen each one. Our dedicated guide on finding the early buyers of Pump.fun tokens covers how to source that buyer list and decide whether they're actually smart money.
async function screenEarlyBuyers(tokenMint: string) {
const capTable = await client.tokens.capTable(tokenMint);
for (const buyer of capTable.buyers) {
const wallet = await client.wallet.get(buyer.wallet);
// Filter: win rate > 50%, positive PnL, not a bot
if (
wallet.derived.win_rate > 0.5 &&
wallet.derived.total_realized_pnl_sol > 0 &&
wallet.trading_style.sniper_rate < 0.8 // likely not a bot
) {
console.log(`${buyer.wallet} — ${wallet.derived.verdict?.label}`);
console.log(` Win rate: ${(wallet.derived.win_rate * 100).toFixed(0)}%`);
console.log(` PnL: ${wallet.derived.total_realized_pnl_sol.toFixed(1)} SOL`);
}
}
}