How to Build a Production-Grade Trading Bot for Polymarket CLOB
Published July 3, 20264 min readBy Gogoboss
Contents (6)
Polymarket uses a hybrid Central Limit Order Book (CLOB): off-chain matching by a centralized operator with on-chain settlement on Polygon via signed EIP-712 orders and the Conditional Tokens Framework (CTF) Exchange contract. This architecture gives sub-second execution but introduces specific challenges for bots.
1. Architecture Overview
- Hybrid model: Orders are signed client-side (EIP-712), submitted to the CLOB operator, matched off-chain, and settled on-chain only when filled.
- Unified order book: YES and NO outcomes are linked mathematically (
YES_price + NO_price ≈ 1). A buy order on YES appears as a sell on NO. - Order types: Primarily limit orders (GTC by default). Supports FOK and FAK.
- Authentication: EIP-712 signatures + HMAC for API keys. Different
signature_typedepending on wallet (EOA=0, Proxy=2, etc.).
2. Infrastructure Requirements
- Low latency: Aim for <100ms median RTT to
clob.polymarket.com. Use VPS in Europe (Dublin/Frankfurt) or US-East. - Reliable RPC: Private Polygon RPC (not public nodes) to avoid rate limits and delays during settlement.
- Language choice: Rust or Go for best performance. TypeScript/Python acceptable for prototyping.
3. Core Components You Must Implement
A. Real-time Order Book Management
// Use official @polymarket/clob-client or py-clob-client
const book = await client.getOrderBook(tokenId);
// Maintain local L2 book
interface OrderBook {
bids: Array<{price: string, size: string}>;
asks: Array<{price: string, size: string}>;
hash: string; // for change detection
timestamp: string;
}
- Subscribe to WebSocket:
wss://ws-subscriptions-clob.polymarket.com/ws/market - Handle events:
book(full snapshot),price_change,best_bid_ask,last_trade_price - Always validate against
book.hashto detect inconsistencies.
B. Order Creation & Submission Orders must be signed with correct parameters:
token_idprice(respecttick_size: usually 0.01 or 0.001)size(in shares, respectmin_order_size)side(BUY/SELL)neg_riskflag for negative-risk markets
Use createOrder() from the SDK, then postOrder() with appropriate OrderType (GTC, FOK, FAK).
C. Slippage & Impact Calculation Implement a function that walks the book:
def calculate_vwap(book, side: str, size: float) -> float:
levels = book.bids if side == "BUY" else book.asks # reverse logic
remaining = size
total_cost = 0.0
for level in levels:
level_size = float(level['size'])
take = min(remaining, level_size)
total_cost += take * float(level['price'])
remaining -= take
if remaining <= 0:
break
return total_cost / size if size > 0 else 0
Add safety buffers (2–8 cents depending on market liquidity and time to expiration).
D. Latency & Rate Limit Handling
- Order placement limit: ~60/min per key (bursts higher)
- Use exponential backoff + jitter
- Batch orders when possible (up to 15 in one call)
- Monitor
best_bid_askevents for top-of-book changes
4. Critical Edge Cases & Gotchas
- Final minutes: Volatility and slippage explode in last 60–120 seconds.
- Tick size changes: Markets near 0 or 1 can change
tick_size. Monitortick_size_changeevents. - Neg-risk markets: Special handling required for capital efficiency.
- Partial fills: Expect them. Track
leavesQuantity. - Order book hash: Use it to verify your local state.
- Fees: Maker rebates vs taker fees — prefer maker orders when possible.
5. Recommended Backtesting Approach
Standard OHLC backtests are useless. You need:
- Reconstructed historical order books (tick-level)
- Realistic simulation of spread, slippage, and latency
- Modeling of partial fills and queue position
This is where most home-built bots fail.
Ready-Made Solution
Building and maintaining all of the above (order book reconciliation, WebSocket resilience, fee/slippage modeling, risk engine, etc.) takes significant engineering effort.
GoGoBots provides a production-ready environment with:
- Accurate CLOB simulation using real historical tick data
- Built-in spread, slippage, and latency modeling
- Order book impact calculation
- Strategy optimization under realistic conditions
You can focus on alpha generation instead of infrastructure.
Related reading
Check it on your own data
Everything in this article can be run against real Polymarket history — including the parts that break a strategy.