Home / Blog / Use Cases

Use Cases

How to Track Smart-Money Wallets on Solana with an API

A step-by-step tutorial for tracking profitable Solana memecoin wallets with the fomoapi.io API, from finding candidates on the leaderboard to diffing their live trades.

Tracking smart-money wallets on Solana means finding the addresses that consistently make money on memecoins and then watching what they buy, sell, and hold. This tutorial walks through doing that with the fomoapi.io API, from finding candidate wallets to pulling their live positions. The API is independent and unofficial. It is not affiliated with the fomo.family app. It reads public on-chain data and resolves it into wallets and PnL you can query.

What "smart money" actually means here

"Smart money" is a loose term. For our purposes it is concrete: a wallet whose on-chain trading has produced real profit over a meaningful window, at meaningful volume. Not a wallet that got one airdrop that went up. Not an account that claims a return in a bio. A wallet you can point to on-chain and say, this address bought these tokens and came out ahead.

That definition matters because it decides which wallets are worth following. A wallet that shows a large profit on tiny volume is often noise. A wallet with steady profit across real turnover is the kind of signal worth an alert.

Step 1: find candidate wallets from the leaderboard

You do not start by guessing addresses. You start from a ranked list of traders and take their resolved wallets.

curl -s "https://api.fomoapi.io/v2/leaderboard/30d"

A trimmed response:

{
  "window": "30d",
  "traders": [
    {
      "rank": 1,
      "handle": "coldstartkyle",
      "pnlUsd": 233010.40,
      "volumeUsd": 1904220.00,
      "wallets": { "solana": "9Fh2...Tq4X", "evm": null },
      "holdings": [
        { "mint": "6Kp3...pump", "symbol": "PNUT2", "valueUsd": 51200.0 }
      ]
    }
  ]
}

The wallets.solana field is the real, resolved trading address. This is worth being explicit about: the wallet fields exposed by the fomo.family app are custodial addresses that no longer reflect real activity, so following those directly would track a dead wallet. The API resolves each trader to the address that actually holds and trades the positions, and that is the one you want to watch.

Filter the list down to the profile of smart money you defined above. For example, keep traders with meaningful volume so you are not following a one-hit wallet:

curl -s "https://api.fomoapi.io/v2/leaderboard/30d" \
  | jq '[.traders[]
         | select(.pnlUsd > 25000 and .volumeUsd > 250000)]
         | map({handle, pnlUsd, volumeUsd, sol: .wallets.solana})'

Step 2: confirm a wallet by pulling the full profile

Once you have a handle from the board, pull its full profile to confirm both wallets and current stats before you commit to watching it.

curl -s "https://api.fomoapi.io/v2/users/coldstartkyle"
{
  "handle": "coldstartkyle",
  "wallets": { "solana": "9Fh2...Tq4X", "evm": null },
  "pnlUsd": 233010.40,
  "stats": {
    "tradeCount": 412,
    "winRatePct": 58.7,
    "avgHoldMinutes": 92
  }
}

The stats block gives you texture the leaderboard row does not. A wallet with a high trade count and a short average hold is a fast scalper. A wallet with few trades and long holds is a position holder. Those two are worth watching in different ways, and the stats tell you which you are dealing with.

Step 3: watch what the wallet holds and trades

Two endpoints give you the live picture for any handle.

Current balances, which is the wallet's holdings right now:

curl -s "https://api.fomoapi.io/v2/users/coldstartkyle/balances"
{
  "handle": "coldstartkyle",
  "solana": "9Fh2...Tq4X",
  "balances": [
    { "mint": "6Kp3...pump", "symbol": "PNUT2", "amount": 1250000, "valueUsd": 51200.0 },
    { "mint": "2Ax9...bonk", "symbol": "MOODENG3", "amount": 88000, "valueUsd": 9400.0 }
  ]
}

Trade history, which is the individual swaps behind the PnL:

curl -s "https://api.fomoapi.io/v2/users/coldstartkyle/trades"
{
  "handle": "coldstartkyle",
  "trades": [
    { "ts": "2026-08-27T13:40:02Z", "side": "buy", "mint": "6Kp3...pump", "symbol": "PNUT2", "amountUsd": 12000.0, "priceUsd": 0.041 },
    { "ts": "2026-08-27T11:12:55Z", "side": "sell", "mint": "2Ax9...bonk", "symbol": "MOODENG3", "amountUsd": 6400.0, "priceUsd": 0.107 }
  ]
}

To track a wallet over time, poll /trades on a schedule and diff against the last set you saw. A new buy that was not in your previous pull is a wallet entering a position. A new sell on a mint you were holding for them is an exit. That diff is the core of a smart-money alert.

Step 4: cross-reference a token across wallets

When you see several tracked wallets buy the same mint, that is stronger than any single wallet acting alone. Use search to pivot on a token:

curl -s "https://api.fomoapi.io/v2/search?q=PNUT2&type=tokens"

Each result carries a type field, so with type=all you can search traders and tokens together and split them apart in your code. From a token's mint you can also pull the thesis endpoint to see the written rationale attached to it:

curl -s "https://api.fomoapi.io/v2/thesis/token/6Kp3...pump"
curl -s "https://api.fomoapi.io/v2/thesis/user/coldstartkyle"

Reading the trades, not just the balances

It is tempting to watch only balances, since holdings are the simplest thing to look at. The trade history is more useful for two reasons. First, balances tell you where a wallet is now, but not how it got there or when. A wallet can be up on a position it entered days ago, and that is old news. The ts on each trade tells you exactly when a wallet acted, which is what you need if timing is part of your edge. Second, a sell does not always show up cleanly in a balance snapshot if the wallet rotated straight into another token. In the trade feed the exit is explicit. So treat balances as the current picture and trades as the timeline, and lean on the timeline when you are deciding whether an action is fresh.

One more thing the trade feed gives you is average entry. If you pull a wallet's buys on a mint and weight them by size, you get the price they are actually in at, which is more honest than the last trade price. That lets you judge whether a wallet is sitting on a real gain or is close to flat, which changes how much weight you give their next move.

A minimal tracker loop

Putting the steps together, a basic tracker is: pull the leaderboard, filter to your smart-money profile, store the resolved Solana wallets and handles, then on a schedule pull /trades for each and diff. When a new buy appears across two or more tracked wallets on the same mint, raise it.

# once: capture the set of wallets you care about
curl -s "https://api.fomoapi.io/v2/leaderboard/7d" \
  | jq '[.traders[] | select(.pnlUsd > 25000 and .volumeUsd > 250000) | .handle]' \
  > watchlist.json

# on a schedule: pull trades for each handle and diff against last run
for h in $(jq -r '.[]' watchlist.json); do
  curl -s "https://api.fomoapi.io/v2/users/$h/trades" > "trades_$h.json"
done

At 60 requests per minute you can hold a watchlist of a few dozen wallets and refresh their trades on a short cadence without hitting the limit. The API is free, so the cost of running this is your own compute, not per-call fees.

What to keep honest

  • Volume matters. A wallet up 40,000 dollars on 60,000 of volume is a different animal from one up 40,000 on two million. Filter on both PnL and volume so you are not following luck.
  • Balances and holdings are point-in-time. They move with price. Re-fetch when you need current value rather than trusting a cached snapshot.
  • The evm field is often null for Solana-native memecoin traders. That is normal, not a gap.
  • This is read-only market data. It tells you what wallets did. It does not place trades and it is not financial advice. Following a smart-money wallet is a starting point for your own research, not a signal to copy blindly.

Ship on verified trader data

Both-chain wallets, real PnL, and a realtime feed. One API.

Get an API key

FAQ

How do I find smart-money wallets to track in the first place?
Start from GET /v2/leaderboard/{window}, which ranks traders by on-chain PnL, and filter on both PnL and volume so you follow consistent performers rather than one-hit wallets. Each row includes the resolved real Solana wallet to watch.
Why not just use the wallet address shown in the fomo.family app?
Those are custodial addresses that no longer reflect real trading activity, so watching them tracks a dead wallet. The API resolves each trader to the real Solana (and EVM, where present) address that actually holds and trades the positions.