All articles
Guides

How to Find Profitable Wallets to Copy on Polymarket

Find Polymarket wallets worth following with the public API: resolved-market record, farmer and hedge checks, recency and specialization, and why blind copying still loses.

November 12, 20268 min readOrcaLayer

Last updated: November 2026.

The short answer: a wallet worth following has a real record on resolved markets, buys at prices where the outcome is still uncertain, does not hedge both sides, still trades, and is good at one thing. Finding it by hand is possible with Polymarket's public API, and the steps are below. The honest part comes first, though: in our own backtest, wallets picked this way mostly stopped winning the month after they were picked. So the goal is a wallet whose moves are worth knowing about, not a wallet to mirror trade by trade.

The checklist

  1. A record on resolved markets. At least 10 to 20 resolved markets, a win rate of 55 percent or more counted per market (not per trade), and positive total P&L. Fewer markets than that is luck you cannot tell from skill.
  2. Not a farmer. An average entry price well below 95 cents. Farmers buy outcomes already priced at 95 cents or more and collect the last few cents at settlement; their win rate looks elite and predicts nothing.
  3. Not a hedger. Few markets where the wallet bought both sides. Profit that comes from holding YES and NO at once is structure, not a view you can copy.
  4. Still active. Trades in the last 30 days. The all-time leaderboard is full of wallets whose last good month was the 2024 election.
  5. A specialist. Most of the record in one category: one sport, crypto, geopolitics. A wallet that wins on NBA totals tells you nothing about Fed decisions; copy it, if at all, only where it is good.
  6. A price you can still get. Compare its entry with the price now. If the market moved 10 cents since the wallet bought, the trade you would copy is a different trade.

Why the leaderboard misleads

Polymarket's leaderboard ranks by profit and volume. That rewards size and old luck, not current skill. Two of the top three wallets on the all-time leaderboard today made their money on the 2024 US election and have not traded since November 2024.

The bigger trap is win rate. Among wallets with a 90 percent or higher win rate, 55,999 of 86,942, about 64 percent, are farmers (measured 27 October 2026). Even among wallets that pass a basic screen of 55 percent or more and positive P&L, about one in five is a farmer. The Farmer Filter page shows the rule and the numbers.

Step by step with the public API

Polymarket's Data API v2 needs no key. Three endpoints are enough:

  • GET https://data-api.polymarket.com/v2/leaderboard?timePeriod=all&limit=50: candidates, with user_id (the wallet), user_name, pnl and volume. Without timePeriod=all you get today's leaderboard.
  • GET https://data-api.polymarket.com/v2/activity?user=WALLET&limit=500: the wallet's history, every TRADE (with side, price, size, usdc_size, condition_id, outcome_index) and every REDEEM (a payout on a resolved market). The next page comes from pagination.next_cursor, passed back as cursor.
  • GET https://data-api.polymarket.com/v2/positions?user=WALLET: what it holds now.

This script pulls the top of the leaderboard and runs the checks that the history allows:

import requests

API = "https://data-api.polymarket.com/v2"

def get(path, **params):
    r = requests.get(f"{API}/{path}", params=params, timeout=30)
    r.raise_for_status()
    return r.json()

def leaderboard(n=50):
    return get("leaderboard", timePeriod="all", limit=n)["data"]

def activity(wallet, pages=10):
    rows, cursor = [], None
    for _ in range(pages):
        params = {"user": wallet, "limit": 500}
        if cursor:
            params["cursor"] = cursor
        page = get("activity", **params)
        rows += page["data"]
        cursor = page["pagination"].get("next_cursor")
        if not page["pagination"].get("has_more") or not cursor:
            break
    return rows

def profile(wallet):
    rows = activity(wallet)
    buys = [r for r in rows if r["type"] == "TRADE" and r["side"] == "BUY"]
    spent = sum(r["usdc_size"] for r in buys)
    shares = sum(r["size"] for r in buys)
    sides = {}
    for r in buys:
        sides.setdefault(r["condition_id"], set()).add(r["outcome_index"])
    # wins = markets with a payout, counted only among the markets we saw it buy
    won = {r["condition_id"] for r in rows if r["type"] == "REDEEM" and r["usdc_size"] > 0} & sides.keys()
    return {
        "markets": len(sides),
        "avg_entry": round(spent / shares, 3) if shares else None,
        "both_sides": round(sum(len(s) > 1 for s in sides.values()) / len(sides), 2) if sides else None,
        "redeemed_wins": len(won),
        "last_trade": max((r["timestamp"] for r in rows), default=None),
    }

for w in leaderboard(20):
    p = profile(w["user_id"])
    flag = "FARMER" if p["avg_entry"] and p["avg_entry"] >= 0.95 else ""
    print(w["user_name"], round(float(w["pnl"])), p, flag)

How to read the output:

  • avg_entry at 0.95 or above: a farmer, drop it.
  • both_sides: the share of markets where it bought both outcomes at some point. A high value means hedging or constant flipping; check its open positions before trusting the P&L.
  • last_trade: a Unix timestamp. Anything older than a month is history, not a lead.
  • redeemed_wins out of markets: a floor, not a win rate. Markets still open and positions sold before resolution sit in the denominator without a payout.

Be a polite client: a request per wallet every few seconds is fine; a loop with no pause will get your address throttled.

Where doing it by hand gets hard

The script gets you a shortlist. Four things it cannot do on its own:

A true win rate. Counting a market as won or lost needs its resolution and the wallet's net position at that moment, including sells before the end. Polymarket's multi-outcome markets add a trap: each outcome is its own market, so one winning view can count as several wins unless the outcomes are grouped.

Scale. A shortlist of 20 is easy. Finding the good wallet that is not on the leaderboard yet means scoring every wallet with a real history, which is 1.6 million wallets with 10 or more resolved markets.

Specialization. The activity rows carry a title and a slug, not a category. Grouping a wallet's record by topic is your own classification work.

Drift. A wallet you vetted in March can turn into a farmer by June. The checks have to run again as the history grows.

Then the part nobody likes: copying still mostly loses

We tested the obvious strategy: pick the wallets with the best copy results over two months, copy them the next month. Across five sports the answer was the same. In MLB, with 799,542 copied buys, the top 10 wallets made about +3.65 dollars per 10 dollars copied while being picked and +0.16 the month after; a wallet's rank in one period said almost nothing about the next (rank correlation between -0.01 and +0.15). College football's November top 10 lost 1.07 dollars per 10 copied. In League of Legends all 12 results were negative.

So use a good wallet the way you would use a well-informed friend: a reason to look at a market, not an order to place. Where it bought, at what price, and whether the price has moved since tell you more than the fact that it bought.

How OrcaLayer does it

OrcaLayer runs these checks over its own index of the Polygon chain. The leaderboard removes farmers and bots before ranking and marks wallets that pass the Smart Money test: a win rate of 55 percent or more per resolved market, positive realized P&L, not a farmer and not a bot. Every wallet page shows realized P&L that matches Polymarket, win rate on resolved markets, open positions and the category mix, free and without sign-up. Market pages show how smart wallets are split between YES and NO next to the price.

When a wallet you trust trades, you can get it in Telegram or in your own Discord channel from the Pro tier, or by webhook on Business: see how to get alerts on profitable Polymarket wallets.

Frequently asked questions

How do I find profitable wallets to copy on Polymarket? Start from the all-time leaderboard, then check each wallet's history: a record on at least 10 to 20 resolved markets, an average entry price well below 95 cents, few markets where it bought both sides, trades in the last 30 days, and most of its record in one category. Copy it, if at all, only in that category and only while the price is close to its entry.

Why is the Polymarket leaderboard misleading for copy trading? It ranks by profit and volume, so one lucky large bet or the 2024 election can keep a wallet near the top for years, and it does not separate farmers. Among wallets with a 90 percent or higher win rate, about 64 percent are farmers.

Does copying the best Polymarket wallets work? Mostly not as a mechanical rule. In our backtest across five sports, wallets picked for their results went flat or negative the next month. Treat a good wallet as information, not as a signal to mirror.

Can I check a Polymarket wallet without code? Yes. OrcaLayer's wallet pages show realized P&L, win rate per resolved market, open positions and the category mix for any address, free and without sign-up.

What is a farmer on Polymarket? A wallet that buys outcomes already priced at 95 cents or more and collects the last few cents at settlement. Its win rate looks excellent while it predicts nothing.

See the data live: free wallet lookup

Every Polymarket trader profile, smart-money flag, lifetime P&L, farmer detection and ISW alignment, searchable in one place.