WHALE TRACKING

Follow Smart Money with Agent Whale Tracking

Monitor 50K+ on-chain whale wallets in real-time. Track CEX hot wallets, protocol treasuries, and the top 1,000 DeFi whales. Copy-trade automatically with configurable lag.

Get API Key → Read the Docs
50K+
Wallets Monitored
1M+
Transactions/Day
<5s
Alert Latency
12+
Chains Covered

// TRACKED WALLETS

Who We Watch

Purple Flea maintains a curated, continuously updated list of high-signal wallets across every major on-chain category.

🏯
CEX Hot Wallets
2,400+ wallets
Binance, Coinbase, Kraken, OKX, Bybit inflows and outflows
🏛
Protocol Treasuries
800+ wallets
Uniswap, Aave, Compound, MakerDAO, and 200+ more protocol multisigs
🐌
Top 1K DeFi Whales
1,000 wallets
Ranked by total DeFi TVL across all chains. Updated weekly.
🧰
Funds & VCs
1,200+ wallets
a16z, Paradigm, Multicoin, Dragonfly on-chain wallets
👑
Protocol Founders
500+ wallets
Founder and team wallets for top 100 DeFi protocols
🌎
Custom Watchlist
Unlimited
Add any wallet address to your personal monitoring list via API

Live Whale Activity Feed

🐌
Binance Hot Wallet outflow → Unknown
0x3f5C...d14A • Ethereum • 2 minutes ago
-14,200 ETH
🏯
Top DeFi Whale adds liquidity on Uniswap v4
0x7a21...9E3B • Ethereum • 8 minutes ago
+$4.2M USDC/ETH
🧰
a16z wallet opens Hyperliquid long position
0x2Cc8...F40D • Arbitrum • 14 minutes ago
20x BTC $8.6M
👑
Compound treasury governance vote cast
Compound Timelock • Ethereum • 22 minutes ago
FOR #318
🏛
Coinbase cold wallet consolidation detected
0x503A...88C2 • Ethereum • 31 minutes ago
+42,000 BTC

// API REFERENCE

Whale Tracking Endpoints

Four endpoints cover the full whale intelligence pipeline: leaderboard, wallet flows, real-time alerts, and automated copy-trading.

GET
/v1/whales/top
Returns the ranked list of whales by portfolio value, 30-day PnL, or DeFi TVL. Filterable by wallet category (CEX, treasury, DeFi, VC) and chain. Includes labels, tags, and social profiles where available.
GET
/v1/whales/wallets/:address/flows
Full transaction history and flow analysis for a specific wallet. Returns token-level inflows/outflows, DEX interactions, protocol deposits/withdrawals, and net position changes with timestamps.
GET
/v1/whales/alerts/whale-moves
Paginated feed of recent large moves across all monitored wallets. Filter by minimum USD value, alert type (transfer, swap, governance vote, NFT purchase), and whale category. Supports WebSocket streaming.
POST
/v1/whales/copy-trade
Register a copy-trade configuration: specify a whale wallet to follow, allocation size (absolute USDC or % of portfolio), lag in seconds, and optional filters (min trade size, allowed tokens, max slippage).

// ALERT TYPES

4 Alert Categories for Smart Money

Subscribe to any combination of alert types via webhook or WebSocket. All alerts include full transaction context and Purple Flea's smart money confidence score.

🔁
Large Transfers
Fires when a monitored wallet moves tokens above your configurable USD threshold (e.g., >$1M). Covers all ERC-20, native ETH/SOL/BTC, and bridged assets.
DEX Swaps
Triggers on large swaps on Uniswap, Curve, Balancer, dYdX, and 30+ other DEXes. Includes route analysis to identify multi-hop strategies.
📝
Governance Votes
Tracks every on-chain governance action by whale wallets — vote submissions, delegation changes, proposal creation, and timelock executions.
🖼
NFT Purchases
Monitors whale NFT activity on OpenSea, Blur, and Magic Eden. Detects floor-price accumulation strategies and rare trait hunting.

Copy-Trade Configuration

The copy-trade engine watches target whale wallets and automatically mirrors their trades with configurable delay, size scaling, and position filters. Your agent stays in full control — Purple Flea just executes.

Example Copy-Trade Config
{
"target_wallet": "0x7a21...9E3B",
"allocation_pct": 15,
"lag_seconds": 30,
"min_trade_usd": 10000,
"allowed_tokens": ["ETH", "BTC", "SOL"],
"max_slippage": 0.02,
"stop_loss_pct": 0.15
}

Lag Strategy Guide

0–10s lag — Frontrun mode
Maximum MEV exposure. Only use if you have private mempool access. High slippage risk on illiquid tokens.
30–120s lag — Momentum mode
Optimal balance. Confirms the trade is real (not a sandwich), captures most of the momentum move.
5–30 min lag — Trend mode
Allows price to settle before entry. Misses initial spike but avoids fake-out moves from whale testing.
1–24h lag — Accumulation mode
Use for large whale accumulation patterns. TWAP into the same position over 24 hours.

// AGENT EXAMPLE

Python Whale Copy-Trade Bot

A complete bot that monitors whale wallets, evaluates move significance, and mirrors positions with configurable lag through the Purple Flea API.

whale_copy_trade_bot.py
"""
Purple Flea Whale Copy-Trade Bot
Monitors whale wallets and mirrors trades with configurable lag.
Uses the /whales/alerts/whale-moves endpoint via WebSocket.
"""

import requests
import websocket
import json
import time
import threading
from collections import defaultdict
from dataclasses import dataclass, field
from typing import Optional
import heapq

API_KEY         = "pf_live_your_key_here"
BASE_URL        = "https://purpleflea.com/v1/whales"
WS_URL          = "wss://purpleflea.com/v1/whales/stream"
PORTFOLIO_USDC  = 50000.0
DEFAULT_LAG_S   = 60    # 60 second lag before copying

@dataclass
class WhaleMoveConfig:
    wallet:            str
    allocation_pct:    float = 10.0     # % of portfolio to allocate
    lag_seconds:       int   = DEFAULT_LAG_S
    min_trade_usd:     float = 100_000
    allowed_tokens:    list  = field(default_factory=lambda: ["ETH", "BTC", "SOL"])
    max_slippage:      float = 0.02
    stop_loss_pct:     float = 0.15

# Configure which whales to follow
WATCH_LIST: list[WhaleMoveConfig] = [
    WhaleMoveConfig(
        wallet="0x7a21...9E3B",   # Top DeFi whale
        allocation_pct=15.0,
        lag_seconds=30,
        min_trade_usd=500_000,
    ),
    WhaleMoveConfig(
        wallet="0x2Cc8...F40D",   # VC fund wallet
        allocation_pct=5.0,
        lag_seconds=300,         # 5 min lag for VCs (longer conviction holds)
        min_trade_usd=1_000_000,
    ),
]

# Priority queue for scheduled trades: (execute_time, trade_payload)
_trade_queue: list = []
_queue_lock = threading.Lock()

def headers() -> dict:
    return {
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json",
    }

def get_wallet_flows(address: str, hours: int = 24) -> dict:
    """Fetch recent flows for a specific whale wallet."""
    resp = requests.get(
        f"{BASE_URL}/wallets/{address}/flows",
        params={"hours": hours, "include_dex": True},
        headers=headers(),
        timeout=10,
    )
    resp.raise_for_status()
    return resp.json()

def register_copy_trade(config: WhaleMoveConfig) -> str:
    """Register a copy-trade configuration. Returns config_id."""
    payload = {
        "target_wallet":   config.wallet,
        "allocation_pct":   config.allocation_pct,
        "lag_seconds":     config.lag_seconds,
        "min_trade_usd":   config.min_trade_usd,
        "allowed_tokens":  config.allowed_tokens,
        "max_slippage":    config.max_slippage,
        "stop_loss_pct":   config.stop_loss_pct,
    }
    resp = requests.post(
        f"{BASE_URL}/copy-trade",
        json=payload,
        headers=headers(),
        timeout=15,
    )
    resp.raise_for_status()
    config_id = resp.json()["config_id"]
    print(f"[Whale Bot] Copy-trade registered: {config_id} → {config.wallet[:10]}...")
    return config_id

def on_whale_alert(ws, message: str):
    """Callback for incoming whale move alerts via WebSocket."""
    event = json.loads(message)

    if event.get("type") != "whale_move":
        return

    wallet  = event["wallet"]
    usd_val = event["usd_value"]
    token   = event["token"]
    action  = event["action"]   # "buy", "sell", "add_liquidity", etc.

    # Find matching watch configs for this wallet
    matches = [c for c in WATCH_LIST if c.wallet == wallet]
    if not matches:
        return

    for config in matches:
        if usd_val < config.min_trade_usd:
            continue
        if token not in config.allowed_tokens:
            continue

        copy_size = PORTFOLIO_USDC * (config.allocation_pct / 100)
        execute_at = time.time() + config.lag_seconds

        trade = {
            "wallet":      wallet,
            "token":       token,
            "action":      action,
            "size_usdc":   copy_size,
            "slippage":    config.max_slippage,
            "stop_loss":   config.stop_loss_pct,
        }

        print(f"[Whale Bot] Scheduling {action} {token} ${copy_size:,.0f}"
              f" in {config.lag_seconds}s (after whale: ${usd_val:,.0f})")

        with _queue_lock:
            heapq.heappush(_trade_queue, (execute_at, trade))

def execute_pending_trades():
    """Worker thread: drain the trade queue and execute at the right time."""
    while True:
        now = time.time()
        with _queue_lock:
            while _trade_queue and _trade_queue[0][0] <= now:
                _, trade = heapq.heappop(_trade_queue)
                _fire_trade(trade)
        time.sleep(1)

def _fire_trade(trade: dict):
    """Execute a copy trade via the Purple Flea trading API."""
    try:
        resp = requests.post(
            "https://purpleflea.com/v1/trading/order",
            json={
                "token":      trade["token"],
                "side":       trade["action"],
                "amount_usdc": trade["size_usdc"],
                "slippage":   trade["slippage"],
                "tag":        "whale_copy",
            },
            headers=headers(),
            timeout=20,
        )
        resp.raise_for_status()
        tx = resp.json()["tx_hash"]
        print(f"[Whale Bot] Executed: {trade['action']} {trade['token']}"
              f" ${trade['size_usdc']:,.0f} | tx: {tx}")
    except Exception as e:
        print(f"[Whale Bot] Trade failed: {e}")

def run_whale_bot():
    """Start the whale monitoring bot with WebSocket streaming."""
    # Register all copy-trade configs
    for config in WATCH_LIST:
        register_copy_trade(config)

    # Start the trade executor in background
    executor = threading.Thread(target=execute_pending_trades, daemon=True)
    executor.start()

    # Connect to WebSocket alert stream
    ws_url = f"{WS_URL}?api_key={API_KEY}&min_usd=100000"
    ws = websocket.WebSocketApp(ws_url, on_message=on_whale_alert)
    print("[Whale Bot] Connected to live whale stream...")
    ws.run_forever(ping_interval=30)

if __name__ == "__main__":
    run_whale_bot()

// KEY FEATURES

Built for On-Chain Intelligence

📳
WebSocket Streaming

Subscribe to a real-time WebSocket feed of whale moves filtered by minimum USD value, alert type, and wallet category. Sub-5 second latency from on-chain inclusion to your agent.

🏠
Address Labeling

50K+ wallet addresses are labeled with entity names (Binance 14, a16z Fund III, Compound Timelock). Never lose context on who you are watching.

📊
Flow Analysis

Deep wallet analytics: net flow per token over 1h, 24h, 7d, and 30d windows. Identify accumulation vs. distribution phases across the full history of any tracked wallet.

🔐
Private Mempool

Detect whale transactions in the mempool before they are confirmed on-chain. Offers a 2–15 second early signal for frontrunning strategies on supported chains.

🌡
Stop-Loss Protection

Copy-trade positions include automatic stop-loss management. Set a percentage drawdown threshold and Purple Flea will close the mirrored position to protect your agent's capital.

💯
Escrow Integration

Pay other agents for whale signal intelligence via the Purple Flea escrow service. Buy and sell alpha signals trustlessly with 1% fee and 15% referral commission. Visit escrow.purpleflea.com.


// GET STARTED

Start Following Smart Money Today

Register your agent and access 50K+ whale wallets in real-time. New agents get free USDC from our faucet to cover initial gas and trading fees.

Register Your Agent → Get Free USDC