The leaderboard endpoint surfaces the highest-performing Polymarket traders for any rolling time window. Use it to discover “smart money,” build watchlists, or seed your own analytics pipeline.
Endpoint: GET /v1/analytics/leaderboard
Filters
Combine filters to zero in on the traders that matter to your strategy.
Parameter Type Description time_framestring Rolling window for stats: 1H, 4H, 1D, 3D, 7D, 30D. Default: 30D. sort_bystring Rank by pnl, roi, win_rate, or market_count. Default: pnl. tagstring Market category: all, sports, crypto, geopolitics, politics, finance, esports, pop-culture, tech, economy, weather, elections, tweets-markets, basketball, hockey, soccer, tennis, counter-strike-2, dota-2, league-of-legends, 5M, 15M. Default: all. min_win_rate / max_win_ratefloat Win rate range (0–100). min_roi / max_roifloat ROI percentage range. last_active_hoursint Only include traders who placed an order in the last N hours. min_market_count / max_market_countint Filter by number of markets traded in the window. limitint Results per page. Default: 50, max: 100. offsetint Pagination offset. Default: 0.
On the Demo tier , limit is capped at 20 and offset must be 0. Upgrade your plan to paginate beyond the first page.
Code examples
leaderboard.js
leaderboard.py
curl
import PolyEdgeClient from './polyedge.js' ;
const client = new PolyEdgeClient ( 'YOUR_API_KEY' );
const leaderboard = await client . getLeaderboard ({
time_frame: '7D' ,
tag: 'crypto' ,
sort_by: 'roi' ,
min_win_rate: 55 ,
min_market_count: 5 ,
limit: 10 ,
});
for ( const trader of leaderboard . traders ) {
console . log ( `# ${ trader . rank } ${ trader . profile . name } ` );
console . log ( ` ROI: ${ trader . roi } % | Win rate: ${ trader . win_rate } % | Markets: ${ trader . markets_count } ` );
}
Response fields
Each object in the traders array contains:
Field Type Description rankint Position on the leaderboard for the requested window. profileobject Trader metadata: address, name, profile_image, x_username, profile_created_at, last_trade_at. total_pnlstring Raw profit and loss in micro-USDC (divide by 1e6 for USDC). total_volumestring Total volume traded in micro-USDC. roifloat Return on investment as a percentage. win_ratefloat Percentage of markets that resolved in the trader’s favour. markets_countint Number of markets traded in the window. wins_countint Number of markets won in the window.
Example response
{
"traders" : [
{
"profile" : {
"address" : "0x9f2fe025f84839ca81dd8e0338892605702d2ca8" ,
"name" : "surfandturf" ,
"profile_image" : "" ,
"x_username" : "" ,
"profile_created_at" : "2026-04-01T06:03:57Z" ,
"last_trade_at" : "2026-04-06T02:32:33Z"
},
"total_pnl" : "639292755514" ,
"total_volume" : "2190632870982" ,
"roi" : 46.52 ,
"win_rate" : 61.54 ,
"rank" : 1 ,
"markets_count" : 26 ,
"wins_count" : 16
}
],
"total_count" : 202991
}
Combine min_win_rate, min_roi, and a short time_frame (e.g. 1D) to surface traders who are hot right now rather than those coasting on months-old gains. Then cross-reference with last_active_hours to confirm they are still active before you copy a position.