Web Scraping Layers for AI & Automation

back to blog

How to Find Profitable Wallets to Copy-Trade — Without Just Following the Top of the Leaderboard

ParseBird·11 Sep 2026

Key Takeaways

Why is the #1 wallet by profit usually a bad wallet to copy? Raw profit is dominated by variance — one wallet that aped into a token that went up 400x looks identical on a profit leaderboard to a wallet with genuinely repeatable skill. Sort by profit alone and you're mostly finding lucky outliers, not skilled traders.

What metric actually correlates with a repeatable edge? Win rate combined with transaction count is a better starting filter than profit alone — a wallet with a 65% win rate across 800+ transactions in a week has a much more repeatable pattern than a wallet with one enormous winning trade and a handful of others.

Does this work the same way across every chain? The underlying due-diligence logic is chain-agnostic, but liquidity and rug-pull risk differ a lot by chain — Solana's meme-coin volume in particular means high win rates can still hide wallets that are simply insiders or snipers on new token launches, which is a different (and much less copyable) skill than genuine trading.

Why Leaderboard Rank Alone Is a Trap

A copy-trading leaderboard sorted by raw 7-day profit rewards variance, not skill. A wallet that put a small position into a token that 50x'd looks exactly as impressive on a profit-sorted leaderboard as a wallet that's been consistently extracting a smaller edge across hundreds of trades — but only one of those is a pattern you can expect to repeat by following it going forward.

The GMGN CopyTrade Wallet Scraper returns exactly the fields you need to tell these two wallet types apart, across Solana, Ethereum, BSC, Base, Tron, and Monad:

{
  "wallet_address": "BAr5csYtpWoNpwhUjixX7ZPHXkUciFZzjBp9uNxZXJPh",
  "realized_profit_7d": "4909.52",
  "pnl_7d": "0.1100850083282489",
  "winrate_7d": 0.651685393258427,
  "txs_7d": 866,
  "volume_7d": "87114.30",
  "tags": ["top_followed", "top_renamed", "wash_trader"],
  "twitter_username": "jackduval"
}

The Due-Diligence Filter

Instead of sorting by realized_profit_7d, build a composite filter that requires both a real win rate and enough transaction volume for that win rate to mean something statistically:

function qualifiesForFollow(wallet) {
  const winRate = wallet.winrate_7d;
  const txCount = wallet.txs_7d;
  const pnlPct = parseFloat(wallet.pnl_7d);

  // require a track record with enough trades to not be noise
  if (txCount < 100) return { qualifies: false, reason: "too few trades to be meaningful" };
  if (winRate < 0.55) return { qualifies: false, reason: "win rate below coinflip-plus-fees threshold" };
  if (wallet.tags?.includes("wash_trader")) return { qualifies: false, reason: "flagged wash-trading pattern" };

  return { qualifies: true, winRate, txCount, pnlPct };
}

Two of the fields in the sample record above are exactly why this filter matters in practice: txs_7d: 866 is enough volume that a 65% win rate is a real pattern, not luck — but tags includes "wash_trader", which on GMGN's own tagging means this specific wallet has a detected wash-trading pattern and should be excluded regardless of how good its other numbers look. Sorting by profit alone would have surfaced this wallet as a top candidate; the tag is what actually disqualifies it.

Set Your Own Sort Order, Don't Trust the Default

The actor exposes over 20 sortBy options — profit_7d and pnl_7d are the defaults most people reach for, but winrate_7d combined with a minimum threshold on min_pnl_7d gets you a fundamentally different, generally more repeatable list:

const input = {
  chain: "sol",
  traderType: "smart_money", // GMGN's own pre-filtered category, a useful starting point
  sortBy: "winrate_7d",
  min_pnl_7d: 0.10, // require at least 10% return, not just a positive one
  min_winrate_7d: 0.55,
};

traderType: "smart_money" is worth starting from rather than the full unfiltered wallet universe — it's GMGN's own pre-classification of wallets showing a repeatable pattern, which you're then further filtering with the due-diligence rules above rather than replacing entirely.

Cross-Checking the Actual Tokens, Not Just the Wallet

A wallet's win rate can look strong because it's trading tokens with real liquidity, or because it's an insider/sniper catching new launches before anyone else can react — a very different, much less copyable skill. Cross-reference a candidate wallet's recent activity against the DexScreener Crypto Scraper to check whether the tokens it's trading actually have real liquidity you could enter and exit at, not just a favorable price chart:

{
  "tokenName": "Wrapped SOL", "tokenSymbol": "SOL", "chainId": "solana",
  "priceUsd": 81.23, "priceChange24h": -0.8,
  "volumeUsd": 117914398.54, "liquidityUsd": 25486870.57
}

If a wallet's winning trades are concentrated in tokens with liquidityUsd under a few thousand dollars, that wallet's edge may not be copyable at all — by the time you see the trade and act on it, the liquidity that made the original trade profitable may already be gone.

FAQ

How often should you re-run this due-diligence check on a wallet you're already following? Weekly at minimum — win rates and PnL are rolling 7-day windows, and a wallet that qualified two weeks ago can drift into wash-trading patterns or a losing streak without you noticing if you only checked once.

Is a high win rate ever misleading on its own? Yes — a wallet can post a high win rate by taking many small, low-conviction wins and one rare, large loss. Check pnl_7d (overall return) alongside win rate, not instead of it — a high win rate with mediocre overall PnL usually means exactly this pattern.

For a similarly signal-heavy due-diligence workflow in traditional markets, see Tracking Congressional Stock Trades and Insider Form 4 Filings, or browse ParseBird's developer tools actors for more on-chain data sources.