Home / Blog / Data API

Data API

FOMO Leaderboard API: Rank Memecoin Traders by Real On-Chain PnL

How to use the FOMO leaderboard API to rank memecoin traders by profit computed from real on-chain trades, with endpoints, JSON shapes, and worked curl examples.

The FOMO leaderboard API ranks memecoin traders by profit and loss that is computed from their real on-chain trades, not from anything a trader typed into a profile. This guide covers how the ranking is built, what the endpoint returns, and how to call it. The API is independent and unofficial. It is not affiliated with the fomo.family app. It reads public data and resolves it into something you can query.

Why on-chain PnL, not self-reported numbers

Most trader leaderboards you find in the wild are gameable. A user can claim a return, screenshot a position, or point at a wallet that is not actually theirs. If your product ranks people on numbers they supply, the ranking is only as honest as the least honest user on it.

On-chain PnL removes that problem. Every buy and sell a trader makes on Solana settles on the chain and is public. When PnL is derived from those settled trades, a trader cannot inflate it. They would have to actually make the trades. That is the whole point of this API: the leaderboard reflects what wallets did, not what people said.

Two things make this harder than it sounds, and both are handled for you:

  1. Wallet resolution. The wallet fields exposed by the fomo.family app are custodial addresses that no longer reflect a trader's real activity. They are effectively dead for PnL purposes. This API resolves each trader to the real Solana wallet (and EVM wallet where one exists) that holds and trades their positions. The PnL is computed against those resolved wallets.
  2. Trade reconstruction. Raw transfers on a wallet include airdrops, transfers in from other wallets, and fee movements that are not real buys. Counting those as cost basis makes an airdrop look like a purchase and distorts PnL. The computation separates genuine swaps from transfers so the profit number reflects trading, not receiving.

The endpoint

GET https://api.fomoapi.io/v2/leaderboard/{window}

window is one of 24h, 7d, 30d, or all. The API is free. The current rate limit is 60 requests per minute, which is generous for a leaderboard you refresh on a schedule.

A basic call for the 7 day board:

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

A trimmed response:

{
  "window": "7d",
  "updatedAt": "2026-08-27T14:02:11Z",
  "count": 100,
  "traders": [
    {
      "rank": 1,
      "handle": "sunriseape",
      "pnlUsd": 184230.55,
      "volumeUsd": 1290440.10,
      "followers": 5121,
      "wallets": {
        "solana": "7Xy9...q4Tf",
        "evm": null
      },
      "holdings": [
        { "mint": "9nXk...pump", "symbol": "TURBO", "valueUsd": 42110.0 },
        { "mint": "3Va2...bonk", "symbol": "WIF2", "valueUsd": 18800.5 }
      ]
    },
    {
      "rank": 2,
      "handle": "liquidateddan",
      "pnlUsd": 96540.20,
      "volumeUsd": 774300.00,
      "followers": 2043,
      "wallets": {
        "solana": "Bd7p...9RtC",
        "evm": "0x4fA1...c920"
      },
      "holdings": [
        { "mint": "5Qm1...pump", "symbol": "GORK", "valueUsd": 30110.0 }
      ]
    }
  ]
}

Fields you get per trader

  • rank and pnlUsd: position on the board and profit in US dollars over the window, from on-chain trades.
  • volumeUsd: total traded volume in the window. Useful for separating a trader who made a large return on one lucky position from someone turning over real size.
  • wallets.solana and wallets.evm: the resolved real addresses. evm is null when the trader only trades on Solana.
  • holdings: current positions with their mint, symbol, and dollar value. This is a snapshot, so refresh it if you need it current.
  • followers: follower count carried over from the social side, for context on reach.

A worked example: build your own ranking view

Say you want the top 25 by PnL over 30 days, but you only care about traders doing real volume, so you filter out anyone under 50,000 dollars of volume. That is a few lines:

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

Because pnlUsd is already computed on-chain, you are not doing any of the heavy lifting. You are just choosing how to slice a list you trust.

Going from a leaderboard row to a full profile

The leaderboard gives you the shape of each trader, but two follow-up endpoints let you go deeper on anyone who catches your eye.

Look up a single trader by handle:

curl -s "https://api.fomoapi.io/v2/users/sunriseape"

That returns both wallets, PnL, and stats for that one trader. From there you can pull their trade history or current balances:

curl -s "https://api.fomoapi.io/v2/users/sunriseape/trades"
curl -s "https://api.fomoapi.io/v2/users/sunriseape/balances"

The /trades endpoint is where you can see the individual swaps that add up to the PnL number on the board. If you want to audit why someone ranks where they do, this is the endpoint that shows the work.

You can also search across traders and tokens in one call:

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

Each result carries a type field so you can tell traders and tokens apart when you search everything at once with type=all.

What is and isn't built

To be straight about scope:

  • The leaderboard windows are 24h, 7d, 30d, and all. There is no arbitrary custom date range on the leaderboard endpoint today.
  • holdings values are point-in-time snapshots. They move with the market. If you need live position value, re-fetch rather than caching for long.
  • PnL is realized-plus-unrealized against resolved wallets. It is a strong signal for ranking, but it is not a tax-grade accounting export.
  • The API is read-only. There is no trading, no order placement, nothing that touches funds.

Practical notes

Cache the leaderboard on your side and refresh on a cadence that fits the window. A 24h board changes fast, a 30d board changes slowly. At 60 requests per minute you have plenty of room to refresh a board and then fan out to a handful of /users/{handle} calls for the traders you want to detail.

Handle the case where wallets.evm is null. Plenty of memecoin traders live entirely on Solana, and that is expected, not an error.

If you build a public ranking on top of this, the honest framing is that the numbers come from on-chain trades and cannot be self-reported. That is the reason to use resolved-wallet PnL in the first place, and it is worth saying plainly to your own users.

Ship on verified trader data

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

Get an API key

FAQ

How is the PnL on the leaderboard calculated?
It is computed from a trader's real on-chain Solana trades against their resolved wallet, separating genuine swaps from airdrops and transfers so the profit reflects trading, not receiving. Because it comes from settled on-chain activity, it cannot be self-reported.
Which time windows does the leaderboard endpoint support?
GET /v2/leaderboard/{window} accepts 24h, 7d, 30d, and all. There is no custom date range on the leaderboard endpoint today. The API is free with a 60 requests per minute limit.