poly-maker
Open-source maker-only quoting bot for Polymarket political markets, rebuilt for V2.
by warproxxx
Last updated
What it is
A market-making bot for the international Polymarket order book, published
on GitHub by the account warproxxx under the MIT licence, where it had 1,509 stars and 493 forks
on 1 October 2026. It is a single async Python process with
a command-line interface (polymaker): it discovers political markets through the Gamma API,
keeps a live order book per outcome token from the market WebSocket, and rests post-only
quotes on both sides, so it only ever adds liquidity and never crosses the spread by design.
The mechanics, as the README lays them out:
- Quotes are two bids. It computes a fair value from the depth-weighted midpoint and recent trade flow, leans it against current inventory, and posts a bid on YES and a bid on NO whose prices sum to less than one dollar. When both fill, the pair can be merged back into collateral at the difference - an exit that does not need to sell into the book.
- A regime machine per market. QUIET keeps quotes inside the liquidity-rewards band, TRENDING widens and halves size, EVENT pulls quotes after a sweep or jump, REDUCE_ONLY exits near an inventory cap or an end date, HALTED cancels everything on stale data, resolution or a kill switch.
- Market selection by programme scoring.
polymaker scanranks political markets by the liquidity-reward and maker-rebate programmes' scoring against volatility and spread; you add the ones you want to a TOML trade list. - Risk caps and a dead-man switch. Per-market, per-event-group and total exposure caps, a daily-loss kill switch, and Polymarket's exchange heartbeat, which cancels resting orders within about ten seconds if the process dies.
State - positions, orders, PnL, the market catalogue - lives in one SQLite file, and raw WebSocket and order events are journalled to disk for later replay.
This is the second poly-maker. From March 2025 to April 2026 the repository held a different
program: parameters read from a Google Sheet, a Node.js helper for merging positions, and
py-clob-client 0.28.0 underneath. Pull request #32, merged on 5 July 2026, replaced it with the
current package, versioned 2.0.0 in pyproject.toml. Almost everything written about poly-maker
elsewhere, including most of its forks, describes the first one.
Availability
The code installs anywhere Python 3.12 and uv do. The venue does not: it trades only on
international Polymarket, which bars US persons and a list of other jurisdictions by physical
location - the polymarket card has the list and how it is enforced. Nothing in
the licence restricts the code, but a quoting bot is for placing orders, so the flags above are
that venue's reach: what stops a US reader is the account at the other end, and there is no path
from this bot to Polymarket US.
What leaves your machine while it runs: calls to Polymarket's CLOB, Gamma and data APIs, JSON-RPC
calls to a public Polygon endpoint (polygon-bor-rpc.publicnode.com by default), and, if you
configure one, alert posts to your webhook.
Pricing
Free and MIT-licensed; there is nothing to buy. Running it costs what the trading costs: resting
fills pay no Polymarket fee, and any exit taken with a marketable order pays the taker fee - see
what a trade actually costs. The moneydoctor self-test
deliberately buys and sells a small amount with real money, a few cents by the README's estimate.
The operator notes in TIPS.md leave one number open that you should not. They give the taker
fee as rate × p(1-p) per share with a rate of 0.04, say the client library treats that as "4%
(≈2–3% of notional)", and warn that if the UI shows 0.4% instead, every rebate estimate is ten
times too high. The schedule on the polymarket card settles it on the 4%
reading: 0.04 × 0.5 × 0.5 is one cent a contract at 50 cents, which is 2% of a 50-cent stake and
1% of the dollar the contract pays out. The 0.4% reading would be a tenth of that.
Markets & resolution
The bot resolves nothing. Markets end through the UMA optimistic oracle, and the bot's REDUCE_ONLY and HALTED states are how it stops quoting around an end date or a resolution rather than anything that protects inventory already held. Inventory you still own at resolution is a directional position in whatever the oracle decides.
Scope is political markets: the scanner filters Gamma by the politics tag. Neg-risk event
groups - several mutually exclusive outcomes under one event - are handled, with their own
worst-case loss cap.
Integrations
Python 3.12, installed with uv, on Polymarket's own py-clob-client-v2 for EIP-712 order signing
and the builder relayer client for deposit-wallet operations. The wallet setting defaults to
signature type 3, the deposit wallet, with types 0 to 2 for older
account setups. A doctor command preflights the wallet, clock, WebSocket and balances before
anything goes live, and livetest rests one deep post-only order and cancels it.
Alerts go to any webhook that accepts a JSON POST. There is no HTTP API of its own, no MCP server and no second venue.
Limitations
The author says it can lose money, and has said worse. The current README carries a warning
that market making on Polymarket is competitive and can lose money, calls the bot a reference
implementation and a research harness, and says to test in --paper mode first. Between 17
January and 5 July 2026 the warning read, in the author's words, "In today's market, this bot is
not profitable and will lose money." The README also links a thread on X summarising the author's
experience of running the first version; we did not read it.
The operator notes are a record of a loss, and a useful one. TIPS.md is written from one
supervised live session on two political markets and gives the result as a loss of about 15.51
dollars in total, most of it from one oversized fill on a thin book. Its ranked failure list -
adverse selection on gapped books, orders below the reward minimum size that earn nothing,
false regime signals on quiet markets, churn that loses queue position, and a positions endpoint
that lags during fast moves - is the most concrete description of what a bot cannot
fix that we have seen published by a bot's own author.
The key in .env can move the funds. PK signs orders and is the key to the wallet. It sits
in a plain file beside the code; where your key lives is the
background on what that exposes.
Quiet since July. The last commit on main is dated 2026-07-09, four days after the rewrite
landed; there are no releases or tags. Four issues are open. The newest real bug report, #34 of
24 July 2026, shows that the order-flow half of the TRENDING test can never fire - the flow
estimate is bounded to between -1 and 1 and every shipped threshold is above 1 - and it has had no
reply. The dependency on py-clob-client-v2 is pinned at 1.0.2, while Polymarket has since
shipped 1.2.0 and points new projects at polymarket-client instead.
Half-finished by its own account. The README lists what is not built: a replay backtester over the journals, and any external feed such as polls, news or other venues. Merging a YES-and-NO pair back to collateral through a Safe or proxy wallet is not wired, so for most accounts inventory leaves through limit sells.
One venue, one topic. Political markets on international Polymarket, and nothing else.
Nothing here has been run by us - not paper mode, not livetest, not a fill.
Alternatives
The forks. GitHub reported 493 forks on 1 October 2026, and on 30 September 2026 the most-starred of them had
one star. The great majority copy the Google Sheets version and describe themselves that way, which
puts them on the retired V1 client; unstatusthequo/polymaker-plus, which adds opportunity
filtering, is one of those. None is a separately maintained product, and none is carded here.
Polymarket's own older keeper, Polymarket/poly-market-maker, is MIT-licensed and was last pushed
to in July 2024, well before V2; it is not carded here either.
A narrower tool aimed at the same reward band: polymarket-lp-tool does not create orders at all, only re-prices the ones you placed by hand to keep them inside the band the rewards programme scores, and is not open source in the legal sense.
For a different strategy on the same venue, polymarket-alpha-bot looks for covering portfolios across related markets. To build your own, start from polymarket-client; where the liquidity comes from explains what a resting quote is on the other side of, and why your bot gets throttled covers the rate limits a quoting loop runs into first.
Specs
- Interfaces
- Python
- Export
- CSV
- Available in
- Asia, Latam
- KYC required
- No
- Market subjects
- Politics
- Resolved by
- Resolves nothing
- Maker fee
- None
- Platforms
- CLI
- AI features
- None
- Capabilities
- Screening, Order book, Automation, Live trading, Paper trading, Portfolio tracking, Alerts
- Pricing verified
- Availability verified
- Capabilities verified
Background
How this part of the sector works, rather than which product to pick.
- What running a bot does not solve — A bot fixes speed and consistency. Rate limits, a missing rehearsal, a field that stops arriving, a partial fill and a paused market are not coding problems.
- Why your bot gets throttled, and what the limit is counted against — Kalshi meters tokens per account tier; Polymarket's order book meters requests per IP and queues the excess. What each counts, and what the libraries assume.
- Where your key lives when software trades for you — Four different credentials are all called a key, and they differ in what a copy permits. What the clients in this catalogue ask for, and what to ask them back.
Also worth comparing
- Kreo — Telegram copy-trading bot for Polymarket whose own fee follows the venue's midpoint curve.
- PolyBot — Telegram bot for Polymarket - copy trading and your own Auto Trader rules, from a Safe.
- PolyCop — Telegram copy-trading bot for Polymarket that holds your key and charges on every fill.
- Polymarket LP Tool (polymarket_lp_tool) — Re-prices your hand-placed Polymarket orders to keep them inside the reward band.
- Alphapoly (polymarket-alpha-bot) — Self-hosted scanner for covering portfolios across correlated Polymarket contracts.
- Betmoar — A Polymarket terminal and Discord bot, with a dashboard for UMA disputes nobody else has.
FAQ
Does poly-maker still work after Polymarket's move to CLOB V2?
The current code was rewritten for V2 in July 2026 and its README says it was live-verified end to end, from authentication to posting and cancelling orders. Anything forked from it before 5 July 2026 is the old version, built on the V1 py-clob-client that Polymarket itself now says does not work.
Does its author claim it is profitable?
Its own documents do not claim it. From January to July 2026 the README read - In today's market, this bot is not profitable and will lose money. The current README says market making on Polymarket is competitive and can lose money, and the operator notes record a supervised live session that ended about 15.51 dollars down.
What credentials does poly-maker need?
Two values in a local .env file - PK, the private key of the wallet that signs orders, and BROWSER_ADDRESS, the Polymarket deposit address that holds the pUSD. The key is read by the process on your machine; there is no hosted component. An optional webhook URL sends alerts to Discord, Slack or ntfy.
Which poly-maker fork should I use?
None stands out. The repository reported 493 forks on 1 October 2026, and sorted by stars on 30 September 2026 none had more than one. Most carry the pre-July Google Sheets version, which is built on the retired V1 client.