Alpha Leaderboard

Real-time smart money rankings
LIVE
DOCS FAQ

Signals

Loading signals...
Tracked Wallets -
Top Realized PnL -
Last Updated -
Refresh Interval 30s
Refreshing in 30s
# Wallet Score Realized PnL Win Rate Buy Vol Sell Vol Trades Tokens Avg Size Largest Last Trade
Loading leaderboard...
Loading...

Signal Performance

Live prices via DexScreener (DEX-oriented; Polymarket rows may be incomplete)
Token Chain Type Signal Price Current Price Return Sent

Developer Documentation

Integrate smart money signals into your platform. Understand signal types, query our APIs, and build real-time notification flows for your users.

🏆 Trader Score

Wallets are ranked by a proprietary composite trader_score that identifies consistently skilled traders. Unlike single-metric rankings (PnL, win rate), the score is resistant to one-trade flukes, dust-wallet noise, and garbage upstream data.

Profitability
Return on Capital
How efficiently a wallet converts capital into profit, measured relative to trading volume. Wallets need a meaningful track record of closed positions to earn credit.
Win Rate
Smoothed Success Rate
Statistically adjusted win rate that accounts for sample size. A wallet with 1 winning trade out of 1 doesn’t score the same as one with 50 wins out of 70 — the score rewards proven consistency.
Consistency
Track Record Depth
Rewards wallets with a real history of completed trades. Wallets that only hold open positions or have very few closed trades receive lower scores.
Activity
Trading Frequency
Ensures the wallet is active enough to generate useful signals. Inactive wallets with stale data are deprioritized.

The score includes multiple safety filters to automatically exclude bots, dust wallets, and wallets with anomalous data. MEV/arb bots (detected by zero net PnL) are filtered by default. Each wallet also receives a data_confidence badge (high/medium/low) based on the number of closed positions, so you know how trustworthy the score is. Scores are recomputed every 15 minutes.

Signal Types

Convergence P0 — Critical
Multiple Top Traders Buying the Same Token
Fired when several high-ranked wallets independently buy the same token within a short window. This is the strongest signal — independent conviction from multiple smart money sources.
Trigger:5 distinct top-200 wallets (after min trade size / quality filters) buy the same token within the convergence window. P0 vs P1 is by wallet count; your convergence_min_wallets (default 3) is still required. Global engine window is set via Lambda env CONVERGENCE_WINDOW_HOURS (default 6h).
Convergence P1 — Notable
Emerging Trader Convergence
Fires earlier in the convergence window with fewer traders than P0. Useful for early alerts before five wallets accumulate. Lower confidence but earlier signal.
Trigger: At least convergence_min_wallets (default 3) but fewer than 5 qualifying wallets on the same token; set min wallets to 2 for the earliest P1 tier.
Whale Move — High Value
Single Large Trade by a Top Wallet
A single top-ranked wallet makes an unusually large purchase on a DEX chain. Indicates high conviction from one smart money source. Not emitted for Polymarket in the current pipeline.
Trigger: Top-50 wallet buys ≥$10,000 in a single trade (defaults; configurable via whale_min_trade_usd and whale_max_rank)
Sell Signal — Exit Alert
Smart Money Exiting a Position
Multiple top wallets are selling the same token, or a single whale is dumping a large position. DEX only — Polymarket v1 is buy-side outcome convergence only.
Trigger: ≥2 top-200 wallets sell the same token within 6 hours, with significant outflow
Polymarket convergence P0
Multiple top bettors on the same outcome
Same idea as DEX convergence, for prediction markets: several ranked Polymarket wallets take the same side (same CLOB / outcome) inside your window. Payload includes a market object (question, outcome, slug) from DynamoDB enrichment.
Trigger:5 distinct ranked wallets on the same clob_token_id (buys only), subject to convergence_min_wallets and the same global window as DEX (env CONVERGENCE_WINDOW_HOURS).
Polymarket convergence P1
Early outcome convergence
Fewer wallets than P0 but same outcome clustering — earlier heads-up before the full P0 bar is met.
Trigger: At least convergence_min_wallets (default 3) but fewer than 5 on the same CLOB; use 2 for earliest P1 if you lower that setting in customer-config.

🎲 Using Polymarket controls

Polymarket uses the same page layout as DEX chains, but a separate ranked wallet pool and outcome-based convergence (grouping by clob_token_id). Use the controls below to explore bettors, tune PM notifications, and deep-link to markets.

Leaderboard bar
  • Polymarket tab — Switches the table to chain=polymarket. Wallets show a PM badge; explorer links go to Polygonscan.
  • Rank by / Show / Min trades — Same as other chains. Polymarket requests use looser API defaults: min_tokens=2, min_closed=0, min_buy_vol=1000 (see API Reference table).
  • Columns — Headers match DEX; Tokens counts distinct outcomes/CLOB legs the indexer attributes to each wallet.
Config panel (gear icon)
  • Chains → Polymarket — When checked, your account can receive Polymarket pipeline signals. Uncheck to turn off PM delivery only.
  • Signal types → PM convergence P0 / P1 — Toggle pm_convergence_bet_p0 and pm_convergence_bet_p1 independently of DEX convergence.
  • Convergence min wallets / window / min trade size — Apply to PM as well: they control how many distinct bettors must hit the same outcome and within what horizon, and the per-trade USD floor.
  • Quality gates (trader score, win rate, closed positions, holding period) — Filter which ranked wallets can count toward a signal; same idea as DEX.
  • Token liquidity & holder filters — DEX-oriented; Polymarket convergence does not use these in the detector.
  • Cooldown — Applies per outcome key (CLOB + chain), same idea as “per token” on DEX.
  • Market enrichment (question/outcome) — the detector fills market.question/market.outcome_label via Postgres first (secret POLYMARKET_PG_SECRET, default pg_ds1_config), then falls back to DynamoDB mappings/items. If enrichment can’t resolve, the UI falls back to the CLOB id prefix.
Notifications & trader profile
  • PM signals show a market line when enrichment returns question / outcome.
  • View on Polymarket → uses cta.slug or cta.item_id from the payload.
  • Open a wallet from the Polymarket tab: the positions table labels the first column Outcome (CLOB) instead of Token.
API & config (programmatic)
  • GET /leaderboard?chain=polymarket — Ranked bettor pool.
  • GET /trader?wallet=...&chain=polymarket — Profile and positions by CLOB id.
  • PUT /config — Include polymarket in chains and PM types in signal_types as in the config body table above.

Whale-move and sell-signal types are DEX-only today; enabling them does not create Polymarket whale/sell alerts.

🔌 API Reference

Base URL
https://api.mbd.xyz/v3/alpha

Authentication
All endpoints require a Bearer token in the Authorization header.
Authorization: Bearer mbd-your-api-key-here

Requests without a valid token return 401 Unauthorized.

Download OpenAPI Spec (YAML)
GET /leaderboard
Returns ranked smart money wallets sorted by your chosen metric. Default ranking uses realized_pnl_usd. Switch to trader_score for a composite view blending PnL efficiency, win rate, consistency, and activity. Bot wallets are filtered by default.
Parameter Default Description
rank_by realized_pnl_usd Sort metric. Options: trader_score, realized_pnl_usd, true_win_rate (or win_rate), net_pnl_usd, total_buy_volume_usd, trade_count, tokens_traded, avg_trade_size_usd, largest_trade_usd. Invalid values return 400.
limit 50 Number of results (max 200)
min_trades 1 Minimum trade count filter
min_tokens 5 (base/eth), 3 (sol), 2 (polymarket) Minimum unique tokens traded (filters market-maker bots)
min_closed 5 (base/eth/sol), 0 (polymarket) Minimum closed positions (wallets need closed trades for PnL/win-rate data)
min_buy_vol 5K (base/eth), 1K (sol/polymarket) Minimum buy volume USD — filters out dust wallets with negligible activity
max_buy_vol 1B Maximum buy volume USD — filters out aggregators and bots with unrealistic volume
chain base Chain to query: base, ethereum, solana, polymarket
offset 0 Pagination offset. Use with limit to paginate results (e.g., offset=20&limit=20 for page 2)
hide_bots true Filter out MEV/arb bot wallets (detected by zero net PnL). Set to false to see the full unfiltered pool
Response includes: data_confidence (high/medium/low based on closed positions), pipeline_info (data_since, data_age_days, latest_trade), and trader_score for every wallet.
Example
# Top 25 wallets on Base (default: sorted by realized PnL, bots filtered)
curl -H "Authorization: Bearer mbd-your-api-key-here" \
  "https://api.mbd.xyz/v3/alpha/leaderboard?limit=25&chain=base"

# Top 50 wallets on Solana sorted by composite trader score
curl -H "Authorization: Bearer mbd-your-api-key-here" \
  "https://api.mbd.xyz/v3/alpha/leaderboard?rank_by=trader_score&chain=solana&limit=50"

# Polymarket smart-money leaderboard (notification pipeline index)
curl -H "Authorization: Bearer mbd-your-api-key-here" \
  "https://api.mbd.xyz/v3/alpha/leaderboard?chain=polymarket&limit=25"

# Page 2 of results (wallets 21-40)
curl -H "Authorization: Bearer mbd-your-api-key-here" \
  "https://api.mbd.xyz/v3/alpha/leaderboard?limit=20&offset=20&chain=base"
GET /notifications
Returns the latest signals (newest first, flat list). Supports chain and type filters — filtered queries paginate through DynamoDB to return the full limit of matching items. Use /signals for cursor-based paginated history.
Parameter Default Description
since 24h ago ISO 8601 timestamp — return notifications newer than this
limit 50 Max results (max 100)
type all Filter by signal type: convergence_p0, convergence_p1, whale_move, sell_signal, pm_convergence_bet_p0, pm_convergence_bet_p1
chain all Filter by chain: base, ethereum, solana, polymarket
wallet_id Wallet address for personalized enrichment. Each signal is checked against this wallet's on-chain positions (DEX token holdings and/or Polymarket outcome bets). Matching signals receive a personal block with position details and are boosted to the top of results.
Example
# Latest 20 signals
curl -H "Authorization: Bearer mbd-your-api-key-here" \
  "https://api.mbd.xyz/v3/alpha/notifications?limit=20"

# Personalized: signals enriched with your wallet's positions
curl -H "Authorization: Bearer mbd-your-api-key-here" \
  "https://api.mbd.xyz/v3/alpha/notifications?wallet_id=0x7a3f...9e2d&limit=20"

# Only sell signals on Base
curl -H "Authorization: Bearer mbd-your-api-key-here" \
  "https://api.mbd.xyz/v3/alpha/notifications?type=sell_signal&chain=base&limit=10"

# Poll for new signals since last check
curl -H "Authorization: Bearer mbd-your-api-key-here" \
  "https://api.mbd.xyz/v3/alpha/notifications?since=2026-03-23T10:00:00Z&limit=50"
GET /config
Returns your current notification configuration — chains, signal types, daily budget, quality filters.
Example
curl -H "Authorization: Bearer mbd-your-api-key-here" \
  "https://api.mbd.xyz/v3/alpha/config"
PUT /config
Update your configuration. Partial updates — only send the fields you want to change.
Body Field Type Description
daily_budget number Max notifications per day (5–50)
chains list Active chains: ["base", "ethereum", "solana", "polymarket"] (subset per account)
signal_types list Active signal types: ["convergence_p0", "convergence_p1", "whale_move", "sell_signal", "pm_convergence_bet_p0", "pm_convergence_bet_p1"] (subset per account)
min_trades number Minimum trade count for ranked wallets
min_win_rate number Minimum win rate (0–1) for signal-generating wallets
min_closed_positions number Minimum closed positions required
webhook_url string Webhook endpoint for real-time signal delivery
min_trade_size_usd number Min individual trade size in USD to count toward a signal (default: 50). Trades below this threshold are excluded from convergence counts and sell signals.
convergence_min_wallets number Minimum distinct qualifying wallets before a convergence can fire (default: 3). Classification: P0 when count is 5+, P1 when between this minimum and 4. Set to 2 for earliest P1. Applies to DEX and Polymarket.
convergence_window_hours number Stored per customer (default: 6). Used for pruning/state and copy; the detector’s global rolling window also follows Lambda env CONVERGENCE_WINDOW_HOURS (typically match these).
whale_min_trade_usd number Min trade size for whale alerts (default: 50000)
whale_max_rank number Max rank for whale alerts (default: 50)
min_trader_score number Min composite score for triggering wallet (0–1)
min_trigger_win_rate number Min win rate for triggering wallet (0–1)
min_trigger_closed number Min closed positions for triggering wallet
min_avg_holding_period_hours number Min avg holding period (hours) across a wallet's closed positions. Filters out scalpers. Default: 0 (no filter).
min_token_liquidity_usd number Min 24h volume for the token
min_token_holders number Min holder count for the token
priority_filter string Priority filter: "all", "P0", "P0,P1", etc.
cooldown_hours number Hours between duplicate signals for same token (default: 2)
Example
# Set daily budget to 30 and enable only P0 signals
curl -X PUT \
  -H "Authorization: Bearer mbd-your-api-key-here" \
  -H "Content-Type: application/json" \
  -d '{
    "daily_budget": 30,
    "priority_filter": "P0",
    "chains": ["base", "ethereum"]
  }' \
  "https://api.mbd.xyz/v3/alpha/config"

# Tighten quality gates
curl -X PUT \
  -H "Authorization: Bearer mbd-your-api-key-here" \
  -H "Content-Type: application/json" \
  -d '{
    "min_trader_score": 0.2,
    "min_trigger_win_rate": 0.5,
    "min_trigger_closed": 3
  }' \
  "https://api.mbd.xyz/v3/alpha/config"
GET /trader
Full trader profile: stats, position breakdown, rank. Click any wallet in the leaderboard to see it in action.
Parameter Default Description
wallet required Wallet address
chain base Chain to query: base, ethereum, solana, polymarket
Example
# Full profile for a wallet on Base
curl -H "Authorization: Bearer mbd-your-api-key-here" \
  "https://api.mbd.xyz/v3/alpha/trader?wallet=0x7a3f...9e2d&chain=base"
GET /signals
Paginated signal history with filtering. Cursor-based pagination for infinite scroll. Chain and type filters paginate through DynamoDB to return the full limit of matching items per page. Returns full signal payloads including traders, trade details, and why-reasons.
Parameter Default Description
chain all Filter by chain: base, ethereum, solana
type all Filter by type: convergence_p0, convergence_p1, whale_move, sell_signal, pm_convergence_bet_p0, pm_convergence_bet_p1
limit 20 Results per page (max 100)
cursor Pagination cursor from next_cursor in previous response
wallet_id Wallet address for personalized enrichment. Same behavior as /notifications — adds personal block and boosts held-token signals.
Example
# First page of Solana convergence signals
curl -H "Authorization: Bearer mbd-your-api-key-here" \
  "https://api.mbd.xyz/v3/alpha/signals?chain=solana&type=convergence_p0&limit=20"

# Next page using cursor
curl -H "Authorization: Bearer mbd-your-api-key-here" \
  "https://api.mbd.xyz/v3/alpha/signals?cursor=eyJjdXN0b21lci..."
GET /signals/performance
Signal performance tracking. Compares signal-time prices with current prices (via DexScreener-style lookups) to compute returns and summary stats. Best suited to DEX token signals; polymarket outcome/CLOB pricing may not resolve cleanly — treat PM metrics as best-effort.
Parameter Default Description
chain all Filter by chain: base, ethereum, solana, polymarket (PM returns may be unreliable)
days 7 Lookback window (1–30)
limit 200 Max signals to return (max 500)
dedup false Deduplicate by token+chain (keeps earliest signal per token)
Example
# Base chain signal performance over last 14 days
curl -H "Authorization: Bearer mbd-your-api-key-here" \
  "https://api.mbd.xyz/v3/alpha/signals/performance?chain=base&days=14"

📦 Sample Notification Payload

JSON — convergence_p0
{
  "signal_id": "conv-base-TOSHI-20260319-0845",
  "signal_type": "convergence",
  "notification_type": "convergence_p0",
  "priority": "P0",
  "chain": "base",
  "headline": "5 top-ranked traders bought $TOSHI in last 6h",
  "token": {
    "address": "0xac17...",
    "symbol": "$TOSHI",
    "current_price_usd": 0.000812,
    "price_change_pct": 12.4,
    "first_smart_entry_price": 0.000722
  },
  "traders": [
    {
      "wallet": "0x7a3f...9e2d",
      "leaderboard_rank": 4,
      "trader_score": 0.4821,
      "realized_pnl_usd": 142000,
      "true_win_rate": 0.65,
      "closed_positions": 31,
      "winning_positions": 20,
      "trade_count": 214,
      "avg_trade_size_usd": 3250.00,
      "total_buy_volume_usd": 695500.00,
      "trade": {
        "size_usd": 8420.50,
        "token_bought": "TOSHI",
        "token_sold": "WETH",
        "token_bought_amount": 19250000,
        "token_sold_amount": 3.48,
        "transaction_hash": "0x8b2e...f41a",
        "traded_at": "2026-03-19T08:32:15+00:00"
      }
    }
    // ... more traders
  ],
  "summary": {
    "trader_count": 5,
    "total_usd_inflow": 34200.00,
    "highest_rank": 4
  },
  "why": {
    "reasons": [
      { "text": "Trader #4 has $142K realized profit (65% win rate, 31 closed positions)" },
      { "text": "Token price up +12% since first smart entry" },
      { "text": "Combined inflow $34.2K in 6 hours" }
    ]
  },
  "cta": {
    "action": "swap",
    "token_address": "0xac17...",
    "chain": "base"
  },
  "timestamp": "2026-03-19T08:45:00Z"
}

📈 Signal Amplifiers (Why Reasons)

Each notification includes a why.reasons[] array that explains why this signal matters. These amplifiers help your users make informed decisions.

Trader Credibility
Highlights the best trader in the signal — their realized PnL, win rate, and closed position count. Builds trust by showing proven track records.
Early Momentum
Token price has moved up since the first smart money entry, confirming the trend.
Rare Convergence
Unusually high number of top wallets converging on the same token — indicates exceptional agreement among smart money.
Smart Exit
For sell signals: the selling trader has a strong track record, lending credibility to the exit decision. Smart money leaving is a warning sign.
Sell Outflow
For sell signals: total USD outflow from ranked traders is significant. Large outflows indicate strong conviction in the exit.
Price Decline
For sell signals: token price has already dropped since first smart money entry, confirming the bearish thesis.

🎮 Using the Controls

The leaderboard has two layers of controls: table controls for adjusting the current view and a config panel (gear icon) for persisting per-customer settings.

Chain Tabs
Switch between Base, Ethereum, and Solana. Each chain has its own wallet pool and filter defaults. Solana has lower minimum thresholds because the ecosystem has different trading patterns (pump.fun meme traders, fewer closed positions).
Rank By
Realized PnL (default) ranks by actual profit from closed positions. Switch to Trader Score for a composite view blending profitability, win rate, consistency, and activity. Win Rate and other single-metric sorts are also available. The trader_score column is always shown regardless of sort selection.
Show & Min Trades
Show controls result count (25–200). Min trades filters out wallets with too few trades — increase this to focus on experienced traders with a real track record.
Config Panel (Gear Icon)
Click the gear icon in the header to open customer settings. All settings are saved to your account and applied server-side.

General
Daily budget — max notifications per day (5–50). Lower = only highest quality signals.
Chains — which chains generate signals for your account.
Signal types — DEX convergence (P0/P1), whale move, sell alerts, and Polymarket convergence (PM P0/P1).

Signal Sensitivity
Min Trade Size ($) — minimum individual trade size in USD for a trade to count toward a signal (default: $50). A convergence of 3 wallets each buying $2 of a token is noise — this filter removes it. Trades below this threshold are excluded before convergence counting.
Convergence Min Wallets — minimum distinct wallets on the same token or Polymarket CLOB (default: 3). P0 requires 5+ after filters; P1 is from this minimum up to 4. Raise for stricter alerts; set to 2 for earliest P1.
Convergence Window — time window in hours (default: 6h). Should align with operator env CONVERGENCE_WINDOW_HOURS. Shorter windows require wallets to cluster more tightly in time.
Whale Min Trade — minimum USD trade size to trigger a whale move alert (default: $50K).
Whale Max Rank — only wallets ranked this high or better trigger whale alerts (default: top 50).

Quality Gates
Min Trader Score — minimum composite score for a wallet to generate any signal (0–1). Set to 0.15+ to filter out low-quality wallets.
Min Trigger Win Rate — minimum win rate for the triggering wallet. Filters out wallets with poor track records.
Min Trigger Closed Positions — minimum closed positions for the triggering wallet. Ensures the wallet has enough history to be trustworthy.
Min Avg Holding Period (hours) — minimum average holding period across a wallet's closed positions. Set to filter out scalpers (hold <5 min) and only receive signals from swing traders. Default: 0 (no filter). Try 1–4 for swing trade signals.

Token Filters
Min Token Liquidity — minimum 24h volume for the token. Filters out illiquid tokens that may be hard to exit.
Min Token Holders — minimum holder count. Filters out brand-new tokens with no community.

Priority & Delivery
Priority Filter — only deliver signals at or above this priority level (All, P0 only, P0+P1, P1+P2).
Cooldown — minimum hours between duplicate signals for the same DEX token or Polymarket outcome key (default: 2h). Lower = more real-time, higher = less noise.
Webhook URL — receive signals as POST requests in real time to Slack, Discord, or your backend.

🛠 Integration Guide

01
Poll the Notifications API
Call GET /notifications?since=<last_check> every 10-30 seconds with your Bearer token. Store the latest sent_at timestamp to avoid re-processing signals.
02
Filter by Priority
Route P0 signals to push notifications or prominent UI placements. Use P1 for in-app feed items. Sell signals can trigger portfolio alerts.
03
Render Signal Cards
Use headline, why.reasons[], and token fields to build rich notification cards. DEX signals use traders[] (merged rows with nested trade). Polymarket signals use user_trades[] — each item is { trader, trade } — plus market and often cta.action: polymarket with slug / item_id. The cta object provides deep-link data for swaps or Polymarket.
04
Deep-Link to Swap or Polymarket
For DEX, use cta.token_address and cta.chain to open your swap UI. For Polymarket, use cta.slug or cta.item_id to open the event or market page (see demo “View on Polymarket”).
05
Build Leaderboard Views
Use GET /leaderboard to show your users who the top traders are. Default trader_score ranking surfaces consistently skilled traders. Switch to realized_pnl_usd or true_win_rate for single-metric views.
06
Personalize with wallet_id
Pass wallet_id to /notifications or /signals to get personalized results. Each signal is cross-referenced against the wallet's on-chain positions (DEX token holdings + Polymarket outcome bets). Matching signals get a personal block with position size, entry price, unrealized PnL, and a relevance label. Held-token signals are boosted to the top. Without wallet_id, you get the standard broadcast feed.
07
Track Engagement
Measure CTA click-through rates per signal type and priority. P0 convergence signals typically have the highest engagement; track DEX swaps and Polymarket opens separately if you support both.