How to export your full Polymarket trade history
There is no download button. Your history lives on a public blockchain, and the two obvious ways to pull it both give you an incomplete answer.
What you are actually working with
Polymarket does not have a statements page. Everything you did is on Polygon: outcome tokens bought and sold against USDC, plus splits, merges and redemptions. Anyone can read it, which is convenient for reconstruction and worth remembering for every other reason.
Your starting point is a wallet address. Not your email, not your username, the address. You can find it from your profile page, and note that the address doing the trading is a proxy wallet rather than the address you funded from, which trips people up on the first attempt.
Why the obvious approaches come up short
A block explorer export
You get raw transfers. What you do not get is which market each token belongs to, which outcome it represents, or what the position resolved to. You end up with thousands of rows of token movements and no way to turn them into positions without a mapping layer.
Simple offset paging on the public API
This is the one that looks like it worked. Polymarket exposes an activity endpoint, and the natural approach is to walk it in pages of five hundred with an increasing offset. On a large account, paging past roughly five thousand records stops returning data. No error, no warning, just an empty page that reads exactly like reaching the end of your history.
An account with twenty thousand events silently hands you the most recent five thousand and looks complete. Every figure you compute from it is wrong and nothing tells you.
The way through it is to page by time rather than by offset. Take the oldest timestamp on each page and ask for the next page ending just before it, walking backwards until the history genuinely runs out. There is no depth limit that way. One edge case still needs handling: if a single second contains more records than fit in one page, the cursor cannot advance past it, so that case has to fall back to offset within the second.
And then the losses are still missing
Even with the complete activity record, your losing positions are not in it as losses. Redeeming a winner writes a transaction because you collect a dollar per share. Redeeming a loser pays nothing and costs gas, so nobody does it, and those tokens sit in the wallet forever with no settlement event.
Recover them with a diff: compare what the trade history says you should still hold against what the wallet actually holds now. Anything present in the first list and absent from the second, with no sale and no redemption, resolved against you. Book it as a disposal at zero on its resolution date. Skip this and your reported gain is too high.
The complete procedure
- Get the proxy wallet address from the profile you actually traded with.
- Walk the full activity history backwards with a time cursor, not offset paging, until it is genuinely exhausted.
- Pull current holdings for the same wallet.
- Replay the history to compute what should still be open, then diff it against the live holdings.
- Book every unmatched position as resolved at zero on its resolution date.
- Repeat for every wallet you traded from this year, then combine.
Step two and step five are the ones that are easy to get wrong and impossible to notice. If you want to check any tool that claims to do this, including ours, the test is simple: after the rebuild, the open positions it predicts should match what Polymarket itself shows for that wallet. If those two disagree, the reconstruction is incomplete and every number downstream of it is unreliable.
Common questions
- Does Polymarket have a CSV export?
- No. There is no statements page and no download button. Your history has to be pulled from public on-chain data and the Polymarket data API using your wallet address.
- Why does my Polymarket history stop after about 5,000 records?
- Because offset paging on the activity endpoint stops returning data past roughly that depth, and it fails silently by returning an empty page rather than an error. Page backwards using a time cursor instead, requesting each page to end just before the oldest timestamp of the previous one, and there is no depth limit.
- Which wallet address do I use?
- The proxy wallet that actually holds and trades the positions, not necessarily the address you funded from. You can find it on your Polymarket profile. If you funded from one address and traded from another, only the trading address has the history on it.
- How do I include positions that expired worthless?
- They are not in the activity record as losses, because nobody redeems a worthless position. Replay the history to work out what should still be open, compare that against what the wallet actually holds, and any position in the first set but not the second resolved against you. Book each one at zero on its resolution date.