How to get a Polymarket wallet's trades in real time
Three ways to see what a Polymarket trader does as they do it — polling Polymarket's Data API, reading fills from the Polygon chain yourself, or subscribing to a push feed — and what each one costs you.
What real time means here
Polymarket settles trades on Polygon, which produces a block about every 1.5 seconds. A fill exists once it is in a block. Real time, for a bot, means seeing it within a block or two — and never silently missing one.
Option 1: poll Polymarket's Data API
Polymarket's public Data API returns a wallet's trades and activity over REST. It is the simplest start: ask for one address, then ask again. The costs grow with the job: your delay is the polling interval plus the API's own indexing delay, every followed wallet is another request in a loop that hits rate limits, and each request covers one address, so a trader who uses several wallets needs all of them.
Why the CLOB WebSocket does not solve it
Polymarket's CLOB WebSocket has a market channel, which streams order book changes and last-trade prices for the markets you name — without saying who traded — and a user channel, which needs your API credentials and covers only your own orders. Neither streams another wallet's fills.
Option 2: read the chain yourself
Every Polymarket fill emits an OrderFilled event from one of Polymarket's exchange contracts on Polygon, naming the maker and the taker. Subscribing to those logs from a Polygon node gives you every fill at block speed. What you then own: four exchange contracts across two event layouts, matching each taker to its makers, resolving proxy wallets to the trader behind them, chain reorganisations (a new head has to be checked against the canonical chain), mapping token IDs to markets, and keeping a node connection up.
Option 3: subscribe to a push feed
PMWallets does option 2 for you and pushes the fills of the traders you follow over WebSocket (best effort) or a signed webhook (at least once). Every WebSocket frame carries a session and a consecutive sequence number, so a gap is visible, and the gap is replayed from GET /v1/account/fills with the same event IDs. The open-source SDKs for Node.js and Python handle reconnects, gap detection, replay and de-duplication:
import { PmwClient, FillStream, FileStateStore } from "pmwallets"; const pmw = new PmwClient({ apiKey: process.env.PMW_API_KEY! }); await pmw.subscribe({ entityId: "<handle or address>", channels: ["ws"] }); const stream = new FillStream({ client: pmw, store: new FileStateStore("./stream.json"), // a restart resumes where it stopped onFill: async (fill) => console.log(fill.side, fill.price, fill.shares, fill.tokenId), }); await stream.start();
Which one to pick
A few wallets, and minutes of delay are fine: poll the Data API. You have an infrastructure team and want everything on chain: read the logs yourself. A bot that has to see every fill of the traders it follows within about a second, and recover the ones it missed while down: use a push feed. The measured block-to-push latency is published live on the latency page.
Questions
Does Polymarket have a WebSocket for another wallet's trades?
Not as of October 2026. The CLOB WebSocket's market channel streams order books and last-trade prices per market without naming traders, and its user channel covers only your own authenticated orders.
How fast can I see a Polymarket trade?
A trade exists once it is in a Polygon block, about every 1.5 seconds. PMWallets pushes the fills of followed traders typically within a second of the block; the measured median and p95 are on the latency page.
Is there a Python or Node.js library for Polymarket trade streams?
Yes: the open-source pmwallets SDKs (npm install pmwallets, pip install pmwallets) stream the fills of the traders you follow over the PMWallets WebSocket, with replay and de-duplication.