If you're building a trading terminal, bot, dashboard, or AI agent on Solana, the memecoin-intelligence layer — KOL flow, deployer reputation, coordination signals, a MEV-stripped DEX firehose — is the part that's painful to build in-house. This is the builder's guide to embedding it instead: what the data is, how to access it (REST, WebSocket, webhooks, MCP, SDKs), and when to white-label it under your own brand.
Copy-trading tools promise to mirror smart wallets for you — for a fee, on their rules, with their wallet list. But the logic underneath is simple enough to own: watch labeled smart-money wallets, open when they open, close when they close, measure whether following them would actually have made money. That last part is the point of this tutorial.
You'll run the open-source kol-copytrade-bot-starter (MIT, ~300 lines, one dependency): a paper-trading bot that follows live trades from 1,000+ tracked KOL wallets and tracks virtual PnL from real market-cap data. No funds, no execution, no risk — just an honest answer to "is this KOL worth copying?" before a single lamport moves.
Data only: MadeOnSol never executes trades or touches funds, and neither does this starter. It's a measurement instrument you can later fork into whatever you want.
What you'll build
MadeOnSol KOL paper-trader · key tier: BASIC · paper size 0.5 SOL · min KOL buy 1 SOL
Mode: REST polling every 480s (tier BASIC).
🟢 OPEN $WIF 0.500 SOL @ MC $2.31M (copying Ansem)
🟣 CLOSE $WIF 1.84x → +0.420 SOL (Ansem exited)
📊 realized +0.420 SOL · 1 closed · 3 open
Every position opens at the market cap the KOL actually entered at (indexed at the moment of the swap, not when your poll happened to run) and closes at the multiple when they exit. Positions persist across restarts in a local JSON file.
Step 1 — Clone and run
git clone https://github.com/madeonsol/kol-copytrade-bot-starter
cd kol-copytrade-bot-starter
npm install
# Free key (200 req/day, no payment): https://madeonsol.com/pricing
export MADEONSOL_API_KEY=msk_your_key_here
node index.mjs
The bot detects your key tier with one GET /me call and picks its data mode automatically:
| Key | Mode | Latency |
|---|
| Free (BASIC) | Polls GET /kol/feed at a rate-limit-safe interval | ~8 min behind |
| PRO / ULTRA | Real-time WebSocket (kol:trades channel) | under 3 seconds from on-chain |
Same engine, same logic in both modes — upgrading doesn't change the code, it changes the clock. Eight minutes of delay is fine for measuring whether a KOL's entries hold up; it's obviously not an execution edge, which is exactly why the free tier is the right place to start.
Step 2 — Decide who you're copying
Copying all 1,000+ wallets is a firehose, and most KOLs are not worth following — a suspiciously perfect win rate is usually a red flag. Two ways to narrow it:
- Explicit list:
FOLLOW_WALLETS=wallet1,wallet2 copies only those wallets. Pick candidates from the live KOL leaderboard — sort by 30d PnL and win rate — or programmatically via GET /kol/leaderboard.
- Quality filters in code: every feed row carries
kol_winrate_7d and the token's deployer_tier, so a two-line filter like "only copy KOLs above 60% win rate into tokens from non-trash deployers" is already possible with the data on hand.
The other knobs are environment variables: PAPER_SOL (virtual size per position), MIN_KOL_SOL (ignore small KOL buys — a 0.2 SOL nibble is not conviction), MAX_POSITIONS.
Step 3 — Read the engine
All trading logic lives in lib.mjs as pure functions — entry rules, exit matching, PnL math, filters — with a unit-test suite that runs without network access (node test.mjs also adds live shape-tests against production when a key is set). The separation is deliberate: when you fork this into something bigger, the engine is the part you keep and the I/O is the part you replace.
Step 4 — Ask better questions than "did it profit?"
Once it has run for a few days, the positions file is a dataset. The questions that separate a real edge from noise:
- Multi-KOL confirmation — does requiring 2+ tracked wallets in the same token before entering beat single-wallet copying?
GET /kol/coordination gives you the cluster data directly; our own signal scorecard tracks how coordination density performs out-of-sample.
- Risk-gated entries — how much PnL do you save by skipping tokens that fail a rug check?
GET /tokens/{mint}/risk (PRO) returns a 0–100 score with named factors, the same scoring used in the rug-check Telegram bot tutorial.
- Exit discipline — KOLs often exit in tranches. Copying the first sell versus the last sell produces very different curves; the feed gives you every partial.
From paper to product
The starter is a measurement tool, but the same API powers real products — trading terminals, alert services, agent frameworks. If you're building something users will pay for, the builder's guide to embedding Solana memecoin intelligence covers the four integration paths (REST, WebSocket, webhooks, MCP) and when white-labeling makes sense.
Full endpoint reference: madeonsol.com/api-docs. Free key and plans: madeonsol.com/pricing.