Developer API
Curated on-chain trader data for developers
MillionScan is a curated on-chain perpetual-futures trader performance dataset for developers building AI-assisted research and analytical applications. Every trader exposed by our API has been verified, scored, and is continuously monitored — so the application you build operates on cleaner data, not the noise of raw on-chain activity. Informational and research use only.
Real-time positions, full event history, and per-trader scores — over REST and WebSocket, with first-class Python and TypeScript SDKs.
Why curated, not raw
Most on-chain APIs hand you every wallet. 99% is noise.
Bots, dead addresses, one-trade wonders, wash farmers. Filtering them out is a project of its own. MillionScan has already done it — and keeps doing it, every hour.
Continuous performance scoring
Every tracked trader is re-scored hourly across profit factor, Sharpe, drawdown, win rate, and average PnL per trade — a 68-point composite. Score is exposed as a first-class field on every API response.
Automatic ejection of underperformers
Traders that slip below threshold are demoted out of the curated pool automatically. The software you build never wastes attention on a wallet that has gone quiet or cold.
Anti-bot and anti-wash detection
Pattern detectors penalize high-frequency self-trading, wash-like cycles, and farmed volume. The pool stays clean of synthetic performance.
Quality over quantity
We don't optimise for trader count. The curated pool is intentionally smaller than the raw on-chain set — every trader earns their slot, every cycle.
What's included
Everything you need to build on verified traders
REST API
Trader catalogue, scores, full event history, current positions, daily P&L, and capital flow — every surface visible in the web app, queryable from your code.
WebSocket streaming
Subscribe to one trader, a watchlist, or the entire curated pool. Position events, score changes, and curated-set transitions arrive within seconds of the underlying confirmation.
Official SDKs
Python and TypeScript clients with typed responses, automatic reconnection, and idempotent event delivery. Drop-in for historical analysis, AI-assisted research notebooks, and analytical pipelines.
Full UI access
Every Elite-tier feature on millionscan.com is included with an API plan — dashboards, watchlists, advanced alerts, and the Telegram bot. One subscription, both surfaces.
Built for
Built for analytical applications, not noise
AI-assisted research applications
Feed verified, labelled trader behaviour into LLM-powered research notebooks, dashboards, and analytical applications. Quality data in, useful insight out.
On-chain monitoring workflows
Surface a curated set of verified traders inside your own analytical software with custom filters, scoring weights, and notification rules — wired up however your application needs it.
Custom alerting layers
Build an alerting layer for the on-chain traders you observe — push to Slack, Discord, your own dashboard, or a private mobile app.
Research & historical analysis
Pull historical events and per-trader score series. Run analytical models against a population of traders that has already passed quality gates. Informational use only.
from millionscan import Client
client = Client(api_key="msk_live_...")
# Pull the curated leaderboard, top 20 by score
top_traders = client.traders.list(sort="score", limit=20)
# Stream live position events for the traders you observe
stream = client.stream.subscribe(
trader_ids=[t.id for t in top_traders],
events=["OPEN", "ADD", "REDUCE", "CLOSE"],
)
for event in stream:
if event.action == "OPEN" and event.score >= 80:
# Hand the verified event off to your own pipeline —
# research notebook, dashboard, or analytical tool.
my_pipeline.record_event(event)import { MillionScan } from "@millionscan/sdk";
const ms = new MillionScan({ apiKey: process.env.MS_KEY });
const top = await ms.traders.list({ sort: "score", limit: 20 });
ms.stream.subscribe(
{ traderIds: top.map((t) => t.id), events: ["OPEN", "CLOSE"] },
(event) => {
if (event.action === "OPEN" && event.score >= 80) {
// Forward the verified event into your own analytical pipeline.
pipeline.recordEvent(event);
}
},
);Endpoints
REST + WebSocket — versioned, stable
All endpoints are reachable under https://millionscan.com/api/public/v1/. Authenticate every request with Authorization: Bearer msk_live_….
| Method | Path | Returns |
|---|---|---|
| GET | /api/public/v1/leaderboard | Curated trader leaderboard. Tier filter ('featured', 'active', 'advanced') + sort + paging. Score, ROI, P&L, win rate, account value per row. |
| GET | /api/public/v1/traders/{public_id}/positions | Currently open positions for one trader. Coin, side, size, entry, mark price, unrealised PnL, leverage, opened-ago. |
| GET | /api/public/v1/traders/{public_id}/trades | Full trade history (newest first). OPEN / ADD / REDUCE / CLOSE / FLIP events with realised PnL on close legs. Paginated. |
| WS | /api/public/v1/events | Live position event stream. Subscribe with a list of public_ids (or empty for all). Heartbeat every 30s, automatic reconnect on the SDK side. |
Quick start
First request in under a minute
The official SDKs land later — but the API is plain HTTP and works with anything that can send a Bearer header. Curl, requests, axios, fetch, your shell. No SDK lock-in.
# 1. Get an API key from /settings → API Access
# 2. Set Authorization header on every request
curl -H "Authorization: Bearer msk_live_..." \
"https://millionscan.com/api/public/v1/leaderboard?tier=featured&page_size=10"
# Returns JSON: { tier, page, page_size, total, traders: [...], meta }import os, requests
key = os.environ["MILLIONSCAN_KEY"]
session = requests.Session()
session.headers["Authorization"] = f"Bearer {key}"
# Top 10 featured traders by score
resp = session.get(
"https://millionscan.com/api/public/v1/leaderboard",
params={"tier": "featured", "page_size": 10},
)
resp.raise_for_status()
for t in resp.json()["traders"]:
print(t["public_id"], t["score"], t["roi_30d"])Pricing
One plan. Everything included.
Elite is the only paid tier. It bundles the API and every advanced web feature. No usage tiers, no per-endpoint upcharges.
One-time, pay-as-you-go in USDC. No auto-renew, no recurring billing — extend whenever it makes sense for your project. Renewals stack onto the existing window so you never lose paid-for time.
- Production REST API key
- WebSocket streaming for the full curated pool
- Python and TypeScript SDKs
- Every Elite-tier feature on the web app
- Telegram bot integration
- Crypto billing (USDC / USDT)
REST, WebSocket, and SDKs are open. Sign up, issue your API key, and pay $89 in Settings to activate the first 30-day window — renewals stack onto the existing expiry, no auto-renew.
Questions
Frequently asked
Which addresses are included in the dataset?
MillionScan focuses on a continuously monitored, scored set of public on-chain accounts that meet performance and activity criteria. This curation is for research quality — not investment recommendation. Search the public catalogue first; if a relevant address is active, it is likely already covered.
What's the data latency?
Position updates land in the API within 30 seconds of on-chain confirmation. WebSocket subscribers receive the event in the same window.
Which markets are supported?
Every on-chain perpetual futures venue MillionScan monitors. Markets are added as scoring coverage extends; new venues do not require an API change.
Is there a free trial?
There's no time-limited API trial today, but the free web tier exposes the same underlying trader pool — search, filter, and inspect any trader before subscribing. That's the recommended way to evaluate data quality before integrating it into your own software.
Do I need a wallet to subscribe?
Only to pay. Elite is a regular subscription billed in USDC or USDT through our payment processor. After the first invoice settles you receive your API key — no on-chain identity is linked to your account.
What does Elite unlock on the MillionScan web app?
Every advanced surface: per-trader entry charts, full score breakdowns, daily realized P&L, complete trades history, advanced per-tag alert rules, and the Telegram bot. Elite is granted automatically alongside any API subscription.
How are traders scored?
A 68-point composite score combines profit factor (max 20), Sharpe (15), max drawdown (15), win rate (10), and average PnL per trade (8). Suspected bot patterns (win rate > 98%) and traders below hard floors (account < $1K, drawdown ≥ 30%, profit factor < 0.8) are auto-excluded with a 0 score. Traders who fall below the currentness gate are removed from the curated pool automatically. Full breakdown at /about/score.
Does MillionScan execute trades or operate any trading service?
No. MillionScan is a data analytics and research platform. We surface verified on-chain position events and per-trader performance data — what you build with that information, including any execution logic, is entirely your own software. We don't take custody of funds, place orders, or operate any trading service. Information only — not investment advice.
Ready to build with verified trader data?
Sign up, issue your API key from Settings → API Access, and pay the $89 invoice to activate. REST + WebSocket + Python / TypeScript SDKs are all live today.
Legal
MillionScan provides on-chain data analytics for informational and research purposes only. Content does not constitute financial advice, investment recommendation, or solicitation. Trading involves substantial risk of loss; past performance does not guarantee future results. Users are solely responsible for their own research and decisions. MillionScan does not custody funds, execute trades, or operate any trading service.
The API exposes anonymised public-id labelled trader performance data — no wallet addresses, no venue source, no user-identifying information. Any execution or automation is the developer's own software operating against MillionScan's read-only data feed.
About MillionScan · Elite membership · Donate · Terms · Privacy