Polymarket Analytics APIpolymarketanalytics.com ↗
Access Polymarket trader positions, PnL history, trades, category performance, and transfers for any tracked wallet via 6 structured endpoints.
What is the Polymarket Analytics API?
The Polymarket Analytics API provides 6 endpoints covering trader performance data indexed by polymarketanalytics.com, including wallet-level positions, paginated trade history, daily PnL timeseries, and deposit/withdrawal records. The get_trader_dashboard endpoint returns a ranked overview with win rate, win/loss amounts, and event counts for any tracked Ethereum wallet address. Data is scoped to wallets the backend has indexed — not every address on Polymarket is available.
curl -X GET 'https://api.parse.bot/scraper/92417519-ac52-43be-9785-d464fe124ae7/get_trader_dashboard?trader_id=0x29bc82f761749e67fa00d62896bc6855097b683c' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace polymarketanalytics-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Polymarket Analytics SDK — bounded, re-runnable; every call capped."""
from parse_apis.polymarket_analytics_trader_api import (
PolymarketAnalytics,
TradeSortField,
TransferSortField,
SortDirection,
TraderNotFound,
)
client = PolymarketAnalytics()
# Fetch a trader's dashboard — rank, PnL, win rate in one call.
trader = client.traders.get(trader_id="0x1234567890abcdef1234567890abcdef12345678")
print(f"#{trader.rank} {trader.trader_name} — PnL: ${trader.overall_gain:,.2f}, Win rate: {trader.win_rate:.1%}")
# Browse the trader's recent positions (limit caps total items fetched).
for pos in trader.positions.list(limit=3):
print(f" Position: {pos.event_title} | PnL: ${pos.overall_gain_usd}")
# Fetch recent trades sorted by value descending.
for trade in trader.trades.list(sort_by=TradeSortField.VALUE, sort_desc=SortDirection.DESC, limit=3):
print(f" Trade: {trade.side} {trade.amount} @ {trade.price} on {trade.market_title}")
# Category performance breakdown — which tags is this trader best at?
cat = trader.categories.list(limit=1).first()
if cat:
print(f" Top category: {cat.tag}, rank #{cat.rank}, win rate {cat.win_rate:.1%}")
# Typed error handling for an unknown wallet.
try:
client.traders.get(trader_id="0x0000000000000000000000000000000000000000")
except TraderNotFound as exc:
print(f"Trader not found: {exc.trader_id}")
# Deposits and withdrawals sorted by timestamp.
for transfer in trader.transfers.list(sort_by=TransferSortField.BLOCK_TIMESTAMP, sort_desc=SortDirection.DESC, limit=3):
print(f" {transfer.tx_type}: ${transfer.amount_usd} at {transfer.block_timestamp}")
print("Exercised: traders.get / positions.list / trades.list / categories.list / transfers.list")
Fetch a single trader's overview dashboard: rank, PnL stats, win rate, and position counts. Returns the overall performance summary for the specified wallet. The backend indexes a curated set of traders; untracked wallets return an empty result.
| Param | Type | Description |
|---|---|---|
| trader_idrequired | string | Ethereum wallet address of a tracked trader (42-character hex string starting with 0x) |
{
"type": "object",
"fields": {
"tag": "string, always 'Overall' for the dashboard",
"rank": "integer, trader's overall rank",
"tags": "string, semicolon-separated achievement tags",
"trader": "string, wallet address",
"event_ct": "integer, distinct events traded",
"win_rate": "number, win ratio between 0 and 1",
"win_count": "integer, number of winning positions",
"win_amount": "number, total USD won",
"insert_time": "string, last data refresh timestamp",
"loss_amount": "number, total USD lost (negative)",
"trader_name": "string, display name",
"overall_gain": "number, net PnL in USD",
"total_positions": "integer, lifetime position count",
"active_positions": "string, number of currently active positions",
"total_current_value": "number, current portfolio value in USD"
},
"sample": {
"data": {
"tag": "Overall",
"rank": 447,
"tags": "Overall PnL > $100k; 1k+ Positions; Crypto PnL > $100k",
"trader": "0x29bc82f761749e67fa00d62896bc6855097b683c",
"event_ct": 20337,
"win_rate": 0.5227418006588975,
"win_count": 10631,
"win_amount": 1491078.03,
"insert_time": "2026-06-10 11:30:40",
"loss_amount": -1126729,
"trader_name": "John Doe",
"overall_gain": 364349.02,
"total_positions": 37862,
"active_positions": "0",
"total_current_value": 0
},
"status": "success"
}
}About the Polymarket Analytics API
What the API Covers
Each endpoint accepts a trader_id — a 42-character Ethereum wallet address starting with 0x — and returns structured performance data for that wallet. The get_trader_dashboard endpoint returns the trader's overall rank, win_rate (0–1 ratio), win_count, win_amount, loss_amount, and semicolon-separated achievement tags. The get_trader_categories endpoint breaks this down by market category, returning per-tag records with total_positions, active_positions, event_ct, and win_count.
Positions and Trade History
get_trader_positions returns an array of open and closed positions, each with event_title, question, current_shares, current_value, invested_usd, and unrealized_gain. A truncated boolean field signals when a trader's position count exceeds transport limits. get_trader_trades supports server-side pagination via limit and offset parameters, a sort_by field, and a sort_desc toggle. Each trade record includes trade_dttm, side, amount, price, value, market_title, and outcome. The has_more boolean indicates whether additional pages exist.
PnL History and Transfers
get_trader_pnl_history returns daily records in YYYY-MM-DD format, each with daily_pnl_usd, realized_pnl, unrealized_pnl, total_pnl, and current_value — suitable for charting equity curves over time. get_trader_transfers returns deposit and withdrawal transactions with transaction_hash, tx_type, block_timestamp, and amount_usd. Both endpoints support sort_by and sort_desc parameters.
Coverage Notes
The backend indexes a curated set of traders. Wallets not in the index return empty results rather than errors, so checking count in any response is a reliable way to determine whether a given address has data. All monetary values are denominated in USD.
The Polymarket Analytics API is a managed, monitored endpoint for polymarketanalytics.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when polymarketanalytics.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official polymarketanalytics.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a leaderboard of Polymarket traders ranked by
win_rateand cumulativewin_amount - Chart a trader's daily equity curve using
daily_pnl_usdandtotal_pnlfrom PnL history records - Identify a wallet's heaviest market exposure by sorting
get_trader_positionsbyinvested_usd - Analyze category specialization by comparing
win_countandevent_ctacross tags inget_trader_categories - Audit capital flows by cross-referencing
get_trader_transfersdeposit timestamps with trade entry dates - Page through a trader's full trade history using
limit,offset, andhas_moreto reconstruct strategy patterns - Monitor unrealized exposure across active positions using
current_valueandunrealized_gainfields
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Polymarket Analytics have an official developer API?+
What happens when I query a wallet address that isn't tracked?+
count: 0 with an empty array. The backend indexes a curated set of traders, so checking the count field is the reliable way to confirm whether a wallet has indexed data.Can I retrieve data for all Polymarket traders, not just tracked wallets?+
How does pagination work for trade history?+
get_trader_trades accepts limit (records per page) and offset (records to skip). The response includes a has_more boolean that is true when the returned count equals the limit, indicating more pages are likely available. Increment offset by limit to retrieve the next page.