Skip to main contentSkip to navigation
Full API and WebSocket coverage for Robinhood Chain trading data is now available on Birdeye Data. Check it out!
Blog>Uncategorized>How to Build a Profitable Smart Money Copy Trading Signal in 4 Steps

How to Build a Profitable Smart Money Copy Trading Signal in 4 Steps

Build a smart money copy trading signal on Solana with Birdeye Data. Find the tokens smart wallets buy, score them, and monitor their moves in 4 steps.

How to Build a Profitable Smart Money Copy Trading Signal in 4 Steps

Copying a profitable wallet sounds simple until you try to automate it. You need to know which tokens skilled wallets are actually buying, which specific wallets are driving that flow, whether those wallets have a real track record or just got lucky once, and when they enter or exit next. Each of those is a separate data problem, and guessing at any one of them turns a promising idea into a money loser.

This guide builds the data layer for smart money copy trading on Solana with Birdeye Data. The layer does one job well: it produces a clean signal that says “a wallet worth following just acted.” What your bot does with that signal (sizing, routing, and execution) stays your decision. By the end you will have a four-stage pipeline that surfaces smart money tokens, confirms the wallets behind them, scores those wallets across their full history, and watches them for live moves.

Smart Money Copy Trading in 4 Steps

Here is the whole pipeline in plain terms, so you can follow it even if you read nothing else.

Smart money copy trading pipeline showing four Birdeye Data endpoints from token discovery to live wallet monitoring.
  1. Find the tokens smart money is buying. Call the smart money token list endpoint and rank tokens by net inflow from skilled wallets. This tells you where the attention is before the rest of the market notices.
  2. Identify the wallets behind the move. For a token that looks strong, pull its top traders ranked by realized profit, and use each trader’s behavior tags to drop the wallets you would not want to copy.
  3. Score each candidate wallet. Before trusting a wallet, pull its profit and loss across the whole portfolio, not just the one token, so a single lucky trade cannot fool you. Keep the wallets with a genuine win rate and real realized profit.
  4. Monitor the trusted wallets for new moves. Poll each wallet’s recent trades on a short loop. When a trusted wallet enters or exits a position, the layer emits a signal in seconds.

Every endpoint below runs on Solana and works on a Premium plan over standard REST (representational state transfer) calls, so you can build the entire layer with simple polling and no special infrastructure.

Rank the Top 20 Smart Money Tokens

Start here because the hardest part of copy trading is knowing where to look. Scanning every token on Solana is wasted effort when a single endpoint already tells you which tokens skilled wallets are accumulating right now.

Endpoint: GET /smart-money/v1/token/list

Chains: Solana

Plan availability: Starter plan and higher, so it runs on Premium

Docs: Smart Money Token List

This endpoint returns the tokens that smart money traders are buying, segmented by trader style and ranked by the metric you choose. You can sort by net flow to find fresh accumulation, by the number of smart traders to find broad conviction, or by market capitalization to keep the list within a size band you trust.

ParameterInRequiredNotes
x-chainheadernoSolana only, defaults to solana
sort_byquerynonet_flow, smart_traders_no (default), or market_cap
trader_stylequerynoall (default), risk_averse, risk_balancers, trenchers
intervalqueryno1d (default), 7d, 30d
sort_typequerynodesc (default) or asc
offsetquerynopagination start, offset + limit must stay at or under 10,000
limitquerynoup to 20 (default 20)

The parameter that matters most is sort_by. Sort by net_flow when you want tokens that are being bought hard right now, and switch to smart_traders_no when you would rather see broad agreement among many skilled wallets than a large position from a few. There is no volume sort here, so do not reach for one.

curl -s "<https://public-api.birdeye.so/smart-money/v1/token/list?sort_by=net_flow&trader_style=all&interval=1d&limit=20>" \
  -H "X-API-KEY: YOUR_API_KEY" \
  -H "x-chain: solana"

The response data is a flat array. Each row gives you the token address in the token field, plus net_flow, smart_traders_no, volume_buy_usd, and volume_sell_usd. Read volume_buy_usd against volume_sell_usd to confirm the inflow is buying pressure and not churn.

A common mistake is to treat every token on the list as a buy. The list is a watchlist, not a recommendation, so the address you carry forward is only a candidate. Now that you have a token with real smart money interest, the next step finds the specific wallets responsible for that flow.

Pull the Top 10 Traders Driving the Flow

A token-level signal hides the wallets underneath it. To copy anyone, you need names, so this call drops from the token down to the individual traders moving it.

Endpoint: GET /defi/v2/tokens/top_traders

Chains: All chains, though the profit sort fields and the 2d to 90d timeframes are Solana only

Plan availability: Standard plan and higher, so it runs on Premium

Docs: Token Top Traders

This endpoint lists the most active traders on a token, ranked by the field you pick. Sort by realized profit to put the wallets that actually booked gains at the top, since a wallet with high volume and poor profit is just noise.

ParameterInRequiredNotes
addressqueryyesthe token address from stage one
time_framequeryyes30m through 90d, with 2d to 90d on Solana only
sort_byqueryyesrealized_pnl or total_pnl to rank by profit, Solana only
sort_typequeryyesdesc or asc
offsetquerynopagination start, offset + limit must stay at or under 10,000
limitquerynoup to 10 (default 10)
ui_amount_modequerynoraw or scaled (default), Solana only

This endpoint uses address, not token_address, and three parameters are required: address, time_frame, and sort_type, along with sort_by. Omit any one and the call returns a 400 error, so set all of them on the first request.

curl -s "<https://public-api.birdeye.so/defi/v2/tokens/top_traders?address=TOKEN_ADDRESS&time_frame=24h&sort_by=realized_pnl&sort_type=desc&limit=10>" \
  -H "X-API-KEY: YOUR_API_KEY" \
  -H "x-chain: solana"

The response is data.items, and each trader’s wallet sits in the owner field. The profit fields such as realizedPnl let you rank traders by booked gains directly. Each trader also carries a tags array of dev, bundler, sniper, and insider, which works as a risk filter to deprioritize wallets you would rather not mirror. Treat a tag as a caution flag that lowers a wallet’s priority rather than proof of bad behavior, since a tag alone does not condemn a wallet.

One number quirk is worth setting once: aggregate volume comes back as volumeUsd, while the buy and sell breakdowns use uppercase volumeBuyUSD and volumeSellUSD. Map those field names exactly so your parser does not silently drop the values.

You now hold a short list of candidate wallets that are both profitable on this token and reasonably clean by tag. That is still not enough to copy them, because being good on one token is not the same as being good. Stage three settles that.

Score a Wallet with One Profit and Loss Call

A wallet can look brilliant on a single token and be reckless everywhere else. Before you let a wallet into your signal set, you want its whole record, and one call gives you exactly that.

Endpoint: POST /wallet/v2/pnl/details

Chains: Solana plus 12 chains built on the Ethereum Virtual Machine

Plan availability: Lite plan and higher, so it runs on Premium

Docs: Wallet Profit and Loss Details

This endpoint returns a wallet’s profit and loss (PnL) summary and a token-by-token breakdown in a single response. The summary is the scorecard: win rate, realized profit, unrealized profit, and total profit across everything the wallet has traded in the window you choose.

FieldInRequiredNotes
walletbodyyesthe candidate wallet address
token_addressesbodynooptional array to scope the breakdown
durationbodynoall (default), 90d, 30d, 7d, 24h
position_scopebodynoduration_only (default) or cumulative
sort_bybodynolast_trade only
offsetbodynopagination start, offset + limit must stay at or under 10,000
limitbodynoup to 100 (default 10)

Because this is a POST request, the parameters go in the JSON body, not the query string. For the trust gate this stage exists to run, set duration to all and position_scope to cumulative, since duration_only, the default, scopes the win rate and profit to just the chosen window rather than the wallet’s full history. A shorter window such as 30d is useful later for checking whether a wallet’s edge is still working recently, but it is not a substitute for the full-history check on a wallet you have not vetted yet. Keep sort_by as last_trade, since that is the only accepted value and any other value returns a 400 error.

curl -s -X POST "<https://public-api.birdeye.so/wallet/v2/pnl/details>" \
  -H "X-API-KEY: YOUR_API_KEY" \
  -H "x-chain: solana" \
  -H "Content-Type: application/json" \
  -d '{"wallet":"WALLET_ADDRESS","duration":"all","position_scope":"cumulative","limit":100}'

The response nests under data, with data.summary, data.tokens, and data.meta. Read the win rate from data.summary.counts.win_rate. It arrives as a ratio between 0 and 1, so multiply by 100 when you display it. Resist the urge to recompute the win rate from total_win and total_loss, because its denominator counts every unique token the wallet touched, not just the wins plus losses. The percentage fields behave differently from the ratio: realized_profit_percent already arrives as a percentage, so leave it as is rather than scaling it again.

Quantities in the breakdown are already normalized by the token’s decimals, and pricing.current_price can be null for a token with no live price, so guard for that before any math. Use the scorecard to keep only wallets with a healthy win rate and real realized profit, and drop the rest.

At this point your candidate list has become a trusted set: wallets that are profitable on the target token, clean by tag, and proven across their whole history. The final stage turns that set into a live feed.

Monitor Wallet Entries Every 2 to 5 Seconds

A trusted wallet is only useful while it is acting. The closing stage watches each wallet so the layer fires the moment one enters or exits a position.

Endpoint: GET /trader/txs/seek_by_time

Chains: All chains

Plan availability: Lite plan and higher, so it runs on Premium

Docs: Trader Trades Seek By Time

This endpoint returns a wallet’s trades within a time window, which makes it ideal for incremental polling. On each pass you ask for trades after the last timestamp you saw, and any new fills are your signal.

ParameterInRequiredNotes
addressqueryyesthe trader wallet, not a token
tx_typequerynoswap, add, remove, all
after_timequerynounix timestamp in seconds, the lower bound
before_timequerynounix timestamp in seconds, the upper bound
offsetquerynopagination start, offset + limit must stay at or under 10,000
limitquerynoup to 100 (default 100)
ui_amount_modequerynoraw or scaled (default), Solana only

Set after_time to the block_unix_time of the last trade you processed, and use tx_type=swap to catch the fills that matter for copying. To avoid recounting a trade that lands on the boundary second, dedupe records on the combination of tx_hash, ins_index, and inner_ins_index, because one transaction can produce several trade legs that share a hash but differ by index.

curl -s "<https://public-api.birdeye.so/trader/txs/seek_by_time?address=WALLET_ADDRESS&tx_type=swap&after_time=1755058900&limit=100>" \
  -H "X-API-KEY: YOUR_API_KEY" \
  -H "x-chain: solana"

The response is data.items, with the pagination flag in hasNext on Solana. Inside each item, the trader wallet is owner, while the item-level address is the pool, so do not confuse the two. Every trade splits into a base leg and a quote leg, each carrying a type_swap of to or from. Read direction from the leg of the token you are tracking: that token on the to side means the wallet bought it, which is an entry, and on the from side means the wallet sold it, which is an exit. Each leg also carries basePrice and quotePrice, the USD price of that token at the moment of the trade, which lets you size the entry in dollars without a separate price lookup.

For teams that want push delivery instead of polling, the wallet transactions stream SUBSCRIBE_WALLET_TXS is available on higher plans and removes the need to poll at all. On a Premium plan, the short polling loop above is the reliable default and keeps the whole layer on plain REST.

A polling interval of two to five seconds per wallet catches most new fills without straining your credit budget, though a handful of especially active wallets can warrant something tighter. Going much below roughly one second rarely buys meaningful extra warning, since a trade still has to confirm on chain before it shows up in the response, and it multiplies your credit spend for little benefit.

That closes the loop. You have gone from a market-wide question, “who is smart money buying,” down to a precise, trustworthy event, “a proven wallet just entered this token.”

Trace One Token Through All 4 Stages

The field names above stay abstract until you see them attached to numbers. Here is an illustrative run through the pipeline so the trace feels concrete.

Suppose stage one returns a token with a net_flow near $50,000 and a smart_traders_no of 30, well ahead of everything else on the list. That single row is the trigger for everything that follows, since it tells you where to point the next call rather than where to scan the entire market.

Stage two pulls the top 10 traders on that token sorted by realized_pnl. Three wallets sit at the top with six figure realized profit, but one of them carries tags of bundler and insider. You do not throw that wallet out, since a tag alone is not proof of bad behavior, but you push it to the back of the queue and look harder at the two clean wallets first.

Stage three scores those two wallets across their entire history rather than just this token, using duration=all and position_scope=cumulative. The first comes back with a win_rate near 0.62, solid realized profit going back as far as the wallet’s history runs, and a unique_tokens count showing dozens of trades, which reads as a real strategy rather than one lucky call. The second wallet looked just as strong on this single token, but its full history shows a win_rate under 0.2, so it gets dropped despite the good showing here. Only the first wallet earns a spot on your watch list, which is exactly the filtering job this stage exists to do.

Stage four then polls that one wallet every few seconds with after_time set to its last seen trade. When a new item shows the monitored token on the to side of a swap, the layer fires: a wallet with a proven track record just bought back into a token smart money already flagged. That alert, not the raw token list from stage one, is the actual output of a smart money copy trading layer, and it is the moment your own bot takes over.

Track Your Credit Usage

Every stage above consumes API credits, and a monitoring layer that polls on a loop can consume them faster than a one-off script. Check your consumption with a single call so a tight polling interval does not surprise you.

curl -s "<https://public-api.birdeye.so/utils/v1/credits>" \
  -H "X-API-KEY: YOUR_API_KEY"

Use the result to tune your polling interval and the number of wallets you watch, so coverage and cost stay in balance.

Putting It Together: Reference Architecture

The four stages chain into a funnel that narrows the whole market down to a single actionable event.

Vertical reference architecture for a smart money copy trading layer built on four Birdeye Data endpoints.

Use this checklist before you ship:

  • Sort the token list by net_flow and treat the output as a watchlist, not a buy list.
  • Set all required parameters on the top traders call so it never returns a 400 error.
  • Apply the behavior tags as a soft risk filter, not a hard ban.
  • Score every wallet with duration=all and position_scope=cumulative, and read the win rate from data.summary.counts.win_rate as a ratio.
  • Poll the trades endpoint with after_time and dedupe on the composite key.
  • Watch your credit usage and tune the polling interval to match.

Frequently Asked Questions

What is smart money copy trading?

Smart money copy trading is the practice of mirroring the trades of wallets with a proven record of profitable activity. The data layer in this guide handles the hard part, which is finding those wallets, verifying them, and detecting their moves, while your own system decides how to act on the signal.

Which chains does this work on?

The smart money token list is a Solana endpoint, so this build targets Solana. The top traders, wallet profit and loss, and trader trades endpoints also support other chains, with some profit fields and timeframes specific to Solana.

How do you avoid copying a wallet that just got lucky?

Score the wallet across its entire portfolio with the profit and loss endpoint rather than judging it on one token, using duration=all and position_scope=cumulative so the result is not quietly scoped to a recent window. A wallet with a healthy win rate and real realized profit over its full history is far more reliable than one that posted a single large gain.

How often should you poll for new trades?

Match the interval to how fast you need to react and to your credit budget. A few seconds between calls is typical for active wallets, and the credits endpoint lets you confirm the cost of your chosen interval.

Can you get real-time alerts instead of polling?

Yes. The wallet transactions stream delivers updates by push on higher plans, which removes polling entirely. On a Premium plan, a short polling loop on the trades endpoint achieves the same outcome over standard REST.

How do you read trade direction correctly?

Each trade has a base leg and a quote leg, each with a type_swap of to or from. The token you track on the to side is a buy, and on the from side is a sell, so anchor your logic on the tracked token’s leg rather than a fixed side.


Ready to build your smart money copy trading layer? Start with the Birdeye Data API and the full endpoint reference at docs.birdeye.so. For background on the network these wallets trade on, see the Solana documentation.

Read next

Build a Solana liquidity monitoring tool with Birdeye Data. Resolve the deepest pool, track liquidity OHLC, align price, and flag a rug with security data.
Build a wallet PnL tracker on Solana with Birdeye Data. Snapshot net worth, plot the equity curve, and compute realized and unrealized profit per token.
Don't miss out on what's next
Subscribe now and be the first to catch trends, tools, and exclusive updates.
© 2025, Wings Lab Pte. Ltd