Solutions · Smart money
The MadeOnSol smart money API returns the trades of tracked Solana KOL wallets with each trader's win rate, PnL percentile and strategy attached, alpha wallets scored from early-buyer results, the first KOL buy of every token and a 0 to 100 coordination score when several KOLs buy the same token, over REST, WebSocket channels and signed webhooks.
A raw address says nothing about whether a wallet deserves attention. Start from traders with a record, see who reached a token first, and know when several of them converge.
A Free key reads the roster, profiles, PnL, both leaderboards and first touches, and the KOL feed 5 minutes delayed. Coordination, consensus and the live kol:* channels from Pro; alpha wallet profiles on Ultra.
What an address does not tell you
Four questions, four REST endpoints, each with its plan from the route gate.
Who is this wallet?
GET /kol/walletsFreenametwitter_urlstrategy_tagtracked_since
Is their record any good?
GET /kol/leaderboardFreewin_rateprofit_factorpercentile_pnl_30dmedian_hold_minutes_30d
Were they first on this token?
GET /kol/first-touchesFreefirst_kol.scout_tiertoken_age_minutesmarket_cap_usd_at_first_buy
Who else is buying it?
GET /kol/coordinationProkol_countexited_countcoordination_score
The problem
Every wallet on Solana is an address. Deciding which ones deserve attention means building a trader roster, a trade parser, a PnL model that survives partial sells, a record of who bought each token first, and a way to tell several strong traders converging on a token from one wallet buying twice. That is years of history before the first useful signal.
Show me
Three real response shapes for one token. Field names are the routes' and the rule engine's own keys; values are illustrative and the bodies are abridged.
The KOL feed returns each trade with the trader's win rate, PnL percentile, strategy tag and heating-up flag, plus the token's age, deployer tier and market cap at the trade.
// GET /api/v1/kol/feed?action=buy&min_kol_winrate=55&limit=1
{
"trades": [
{
"wallet_address": "CyaE...n5Lb",
"kol_name": "Cented",
"kol_strategy_tag": "scalper",
"kol_auto_strategy_tag": "scalper",
"kol_winrate_7d": 58.3,
"kol_early_entry_pct_30d": 18.2,
"kol_is_heating_up": true,
"kol_percentile_pnl_7d": 0.93,
"kol_percentile_winrate_7d": 0.81,
"token_mint": "8vdc...pump",
"token_symbol": "NEW",
"launchpad": "pumpfun",
"token_age_minutes": 6,
"action": "buy",
"sol_amount": 4.2,
"market_cap_usd_at_trade": 31800,
"tx_signature": "5K7j...",
"deployer": { "wallet": "8kP4...Qe2x", "tier": "good", "bonding_rate": 0.41 },
"deployer_tier": "good",
"traded_at": "2026-09-25T10:02:11.000Z"
}
],
"count": 1,
"has_more": true
}The coordination ranking groups the buys, times the convergence, marks the KOL that already net-sold and scores the cluster. 30 + 6 + 13.3 + 8.6 + 11.8 rounds to 70.
// GET /api/v1/kol/coordination?period=1h&min_kols=3&window_minutes=15
{
"coordination": [
{
"token_mint": "8vdc...pump",
"token_symbol": "NEW",
"kol_count": 3,
"total_buys": 4,
"total_sells": 1,
"net_sol_flow": 6.2,
"signal": "accumulating",
"avg_winrate_7d": 57.4,
"entry_rank_avg": 21.6,
"unique_strategies": 2,
"strategies": ["scalper", "day_trader"],
"first_buy_at": "2026-09-25T10:02:11.000Z",
"last_buy_at": "2026-09-25T10:09:47.000Z",
"time_to_consensus_sec": 456,
"peak_kols": 3,
"exited_count": 1,
"holders_count": 2,
"coordination_score": 70,
"market_cap_usd_at_first_buy": 31800,
"market_cap_usd": 58200,
"kols": [
{ "name": "Cented", "wallet": "CyaE...n5Lb", "buy_sol": 4.2, "sell_sol": 0, "exited": false },
{ "name": "Jijo", "wallet": "4BdK...9sQe", "buy_sol": 2.5, "sell_sol": 0, "exited": false },
{ "name": "Orange", "wallet": "9pQz...Lm3a", "buy_sol": 1.1, "sell_sol": 1.6, "exited": true }
]
}
],
"period": "1h",
"min_kols": 3,
"window_minutes": 15,
"score_version": "v1"
}A rule for three KOLs inside 15 minutes fired on the third buy, before anyone sold, so the score is higher than the later ranking. Only your connections and your webhook receive it.
{
"id": "kol:coordination:98765",
"seq": 402113,
"channel": "kol:coordination",
"event": "kol:coordination",
"data": {
"signal_id": 98765,
"rule_id": "1111...5555",
"rule_name": "3+ KOLs in 15m",
"fired_at": "2026-09-25T10:09:48.310Z",
"token_mint": "8vdc...pump",
"token_symbol": "NEW",
"token_name": "New Token",
"triggering_trade": {
"wallet_address": "9pQz...Lm3a",
"kol_name": "Orange",
"sol_amount": 1.1,
"tx_signature": "3Hq9...",
"traded_at": "2026-09-25T10:09:47.000Z",
"market_cap_usd_at_trade": 52400,
"price_usd_at_trade": 0.0000524
},
"kol_count": 3,
"exited_count": 0,
"avg_winrate_7d": 57.4,
"entry_rank_avg": 21.6,
"coordination_score": 76,
"score_version": "v1",
"window_minutes": 15,
"kols": [
{ "wallet": "CyaE...n5Lb", "name": "Cented" },
{ "wallet": "4BdK...9sQe", "name": "Jijo" },
{ "wallet": "9pQz...Lm3a", "name": "Orange" }
],
"is_rearm": false
},
"ts": 1790330988310
}rest.kolFeed({ min_kol_winrate: 55 })rest.kolCoordination({ period: "1h", min_kols: 3 })rest.firstTouches({ preset: "scout" })rest.coordinationAlertsCreate(rule)client.kol_coordination(period="1h")madeonsol_kol_coordinationTry it
The KOL Tracker shows the live trades, the leaderboard and each KOL's record in the browser. A free key then reads the same roster, records and first touches over REST, with the feed 5 minutes delayed.
From wallet activity to smart-money signal
Each stage answers one question about the trader or the token and returns it as named fields. The first six run on MadeOnSol; the last one is yours.
01 · MadeOnSol
kol-tracker parses the swap of a wallet on the KOL roster into a buy or sell with SOL and token amounts and the market cap at that moment.
kol:trades channelGET /kol/feed
wallet_addressactionsol_amountmarket_cap_usd_at_trade02 · MadeOnSol
A name and X profile from the roster, a strategy tag (scalper, day_trader, swing_trader, hodler, mixed) and, for any address, KOL, alpha-wallet and bot flags.
GET /kol/walletsGET /wallet/{address}
kol_namekol_strategy_tagis_alpha_trackedbot_confidence03 · MadeOnSol
Cost-basis realized PnL, win rate, profit factor and peer percentiles per period, plus hold times and mark-to-market on bags still held.
GET /kol/leaderboardGET /kol/{wallet}/pnlGET /alpha/leaderboard
kol_winrate_7dkol_percentile_pnl_7drealized_pnl_solunrealized_pnl_sol04 · MadeOnSol
The first buy of each token by any tracked KOL is stored once, with the token's age and market cap at that buy and the first KOL's scout tier (S/A/B/C).
GET /kol/first-toucheskol:first_touches channel
first_buy_attoken_age_minutesfirst_kol.scout_tierfirst_kol.n_first_touches_30d05 · MadeOnSol
How many tracked KOLs bought the same token in a period, how fast they converged, how many already net-sold, in which order they entered, and a 0 to 100 score over five inputs.
GET /kol/coordinationGET /kol/tokens/{mint}/entry-orderGET /tokens/{mint}/kol-consensus
kol_counttime_to_consensus_secexited_countcoordination_score06 · MadeOnSol
A coordination rule names the minimum KOLs, window, score and market cap band; each qualifying buy fires one kol:coordination event for your connections or your webhook, with a cooldown per token.
POST /kol/coordination/alertskol:coordination channel
min_kolswindow_minutesmin_scorecooldown_min07 · Your product
Rank, alert, display or ignore. How much a first touch, a percentile or a score is worth to your users is your logic, not ours.
your weightsyour thresholdsChips are the response or event fields each stage returns. KOL endpointsAlpha wallet endpoints
Coordination
Five inputs, each scaled 0 to 1, weighted to a total of 100 (score_version v1). The REST ranking scores the top 150 clusters by KOL count in the period; a coordination rule scores the token on every KOL buy inside its own window.
| Input | Weight | What it measures |
|---|---|---|
| Density | 30 | Share of the KOLs that bought inside the densest window_minutes slice (peak_kols ÷ kol_count). A rule fire is scored inside the rule's own window, so this is 1 there. |
| Convergence | 20 | How many KOLs are in, saturating at 10. |
| Conviction | 20 | Share of those KOLs that have not net-sold. A KOL counts as exited once it sold more SOL of the token than it bought. |
| Quality | 15 | Average 7-day win rate of the KOLs in the cluster (50 when none is known). |
| Earliness | 15 | How early these KOLs usually enter tokens, from their 30-day early-entry rank (50 when unknown). It describes the traders, not this token. |
An observable pattern, not a claim about intent
A high score says several tracked KOLs bought the same token close together, most have not sold, and their recent records are strong. It does not say they talked, planned it or are moving the price. Traders reacting independently to the same launch produce the same pattern.
Why exits are part of it
exited_count counts the KOLs that already sold more than they bought, so a cluster whose early buyers are leaving scores lower. A rule re-fires on the same token after its cooldown (30 minutes by default), or sooner when the score climbs 20 points; is_rearm marks that.
The datasets
All three are Solana populations, counted live when the page renders. Data dictionaryMethodology
Solana · roster
Active roster wallets with a Solana address: the set kol-tracker follows and the only wallets that produce kol:trade events. KOL wallets traced to Robinhood Chain are counted separately and are not in this number.
GET /kol/wallets
Solana · early buyers
Wallets scored from their realized PnL as one of the first 20 buyers of launch-pipeline tokens, each with a bot_confidence of high, medium, low, none. A scored wallet is not a recommendation: the leaderboard keeps wallets with non-negative PnL, at least one win and 5 tokens by default, and drops high and medium bot confidence.
GET /alpha/leaderboard
Solana · trade tape
Stored trades by the tracked Solana KOL wallets, with no retention window since June 2026. The figure is the planner's row estimate, measured nightly, not an exact count.
GET /kol/feed
Compared
Three products that all start from wallets. Wallet Tracking follows your own list, Copy Trading turns KOL trades into sized signals, and this page is about knowing which traders matter. To check any single address, scan it for free.
| Aspect | Wallet Tracking | Copy Trading | Smart Money |
|---|---|---|---|
| Whose wallets | Addresses you choose. | Tracked KOL wallets you name in a rule. | The tracked KOL roster and the scored alpha wallets, maintained by MadeOnSol. |
| What you get | Swap and transfer events for your watchlist. | One sized signal per trade your rule accepts. | Trades with the trader's record attached, first touches, coordination clusters and scores. |
| The question it answers | What did my wallets just do? | Should my bot follow this trade, and with how much? | Which traders deserve attention, and where are several of them converging? |
Plans
| Capability | Where | Plan |
|---|---|---|
| Roster, profiles, PnL, leaderboard | GET /kol/wallets, /kol/{wallet}, /kol/{wallet}/pnl, /kol/leaderboard | FreeOpen positions on /kol/{wallet}/pnl on Ultra |
| KOL trades over REST | GET /kol/feed | Free5 minutes delayed on Free |
| First touches over REST | GET /kol/first-touches | Free5 minutes delayed on Free; the first KOL's wallet address on Ultra |
| Alpha leaderboard | GET /alpha/leaderboard | Freebot_confidence and behaviour fields on Ultra |
| Coordination, consensus, scouts | GET /kol/coordination, /tokens/{mint}/kol-consensus, /kol/scouts/leaderboard | From Pro |
| Flags for any address | GET /wallet/{address} | From Pro |
| Live KOL trades and first touches | kol:trades channel, kol:first_touches channel | From Pro |
| Coordination rules | POST /kol/coordination/alerts, kol:coordination channel | From ProRules per account depend on the plan |
| KOL trade webhooks | kol:trade webhook event | From Pro |
| First-touch webhook rules | POST /kol/first-touches/subscriptions | From Ultra |
| Alpha wallet profile and linked wallets | GET /alpha/{wallet}, /alpha/{wallet}/linked | Ultra |
Compare plans for request limits and the number of rules per plan.
Architecture
1 · Source
Chain activity
Transactions and program events
2 · MadeOnSol
Data and intelligence layer
3 · Delivery
4 · Yours
Your weights, thresholds and ranking
Keys and business logic stay server-side
5 · Users
Your smart-money product
Build outcomes
Showing MadeOnSol data to your own users requires a Business plan. See pricing
Keep going
Solution
Wallet Tracking
Watch your own list of addresses.
Solution
Copy Trading
Turn a KOL trade into a sized signal for your bot.
Solution
Trading Bots
Combine KOL activity with deployer alerts and token context.
Product
KOL Tracker
Live KOL trades and the leaderboard in the browser.
Guide
Push alerts on KOL coordination
Peak density, rules and the WebSocket push.
Guide
How alpha wallets are scored
From early buyers to a filtered leaderboard.
FAQ
Next step
Read how each label is defined, browse the traders, then wire the records and coordination into your product.