How we count. All of it.
Everything on this site comes from Polymarket's free public API. No logins, no screenshots, nothing a seller sent us. Anyone can re-run the numbers.
The data
One request per wallet: data-api.polymarket.com/v2/user-pnl with daily points. It returns running totals of trading profit, fees, maker and taker rebates, rewards, volume and fills. We re-read every wallet once an hour. The raw numbers behind every page are at /api/bots.
The three numbers
Net kept (Polymarket's economic_pnl): trading result after fees, plus the value of open positions, plus rebates and rewards Polymarket paid. This is what the account actually ended up with, and what we rank by.
Trading after fees (position_pnl): the same without rebates. It tells you whether the strategy itself makes money.
Rebates & rewards (wallet_income): what Polymarket paid back. Rebates grow with volume, so a small copy of a big bot won't get the same economics. That's why we show the split everywhere.
Profit source
Edge: under 20% of net kept came from rebates. Edge + rebates: 20 to 50%. Rebate-driven: over 50%. Rebates cover losses: trading after fees is negative and rebates turn it positive. Losing: net kept is below zero.
Ranking and the rest
The leaderboard ranks by net kept over the last 30 days. Bots with no fills for 30+ days move to the Idle tab but stay listed.
Weeks up: of the last 12 Monday-to-Sunday UTC weeks the bot traded in, how many ended higher than they started. Max drawdown: the largest fall in net kept from a previous peak, on daily points. Best day share: the best single day as a share of all-time net kept; a high share means the result rests on a few lucky days. Per $1K traded: net kept divided by volume, times 1,000.
Days and weeks are cut at exact midnight UTC.
How bots get on the board
Every bot comes from a scan that runs once a day and never looks at profit: the pool is every wallet in the latest public fills feed plus wallets at ranks 1 to 2,000 of the day, week and month volume leaderboards. Candidates are checked in a pseudo-random order seeded by the date, not by size.
Last scan (2026-10-24): 5,023 wallets in the pool, 700 checked. 16 looked like bots, 232 were active but scored below 75, 215 weren't active enough, 237 had too little history. Up to 300 bots are listed; once a bot is on the board it stays, even if it blows up.
What this misses: bots that stopped before we started scanning, and slow bots that trade a few times a day. Busy humans, shared accounts and copy-trading services can look like bots. So treat the board as a sample of bots trading now, not all bots ever.
The behaviour score
From the last week of hourly fill counts and the last 300 fills, out of 100:
- 35 — share of hours with at least one fill
- 15 — longest pause (2 hours or less gets full marks, 18+ gets none)
- 10 — how many of the 24 hours of the day it trades in
- 20 — fills per week, on a log scale from 300 to 20,000
- 10 — how steady the hourly fill count is
- 10 — share of fills at one exact order size
To be scored a wallet needs 300+ fills in the week, fills in at least 40% of hours, and no pause longer than 18 hours. A score of 75 or more puts it on the board. Hours where Polymarket's data hadn't updated yet are not counted as idle.
What we can't see
Deposits and starting capital aren't public, so there are no ROI percentages here. A wallet isn't a person: one operator can run several. Kalshi's public data has no account IDs, so Kalshi bots can't be scored. And past results don't predict future returns.
Think a number is wrong, or a wallet isn't a bot? Tell us.