Self-hosted scanner for covering portfolios across correlated Polymarket contracts.
Trading Clients, SDKs & Bots
Libraries and bots that sit between you and an event exchange, running on your keys. Who maintains them, when they last shipped, what breaks.
Last updated
What this category is for
Everything else in this catalogue is something you read. This is the part you run. A client, an SDK or a bot is code that holds a credential — an exchange API key, or on the on-chain venues a wallet private key — and sends orders with it. That changes which questions matter. A data API is judged on coverage and latency; a trading client is judged on whether it still works, who fixes it when it stops, and what it does with the key while it runs.
Four facts decide almost every choice here, and none of them is a feature. Three are about whether the code still works and what it does with your key. The fourth only applies to part of the listing, and it is the one nobody expects: some of these take a cut.
Who maintains it
An official SDK and a third-party client are different products with the same shape. The official one is generated from, or written against, the venue's own API specification, so it is usually complete and usually first to carry a new endpoint. It is also entirely at the venue's discretion: the same company can stop publishing it, and does. Polymarket archived py-clob-client and put a notice at the top of its README saying the client is no longer functional and should not be used. That is the official SDK.
A third-party client is maintained by whoever wants it maintained, which is better when they do and worse when they stop. The useful question is not "official?" but "who has shipped a fix in the last quarter, and for whom".
There is a second trap in the name. The obvious package name on PyPI or npm is often not the
venue's — polymarket and polymarket-sdk are both taken on PyPI by unrelated authors, while
Polymarket's current SDK installs as polymarket-client. Check the publisher and what the package
actually does, not just that pip install succeeded.
When it last shipped
Liveness is a set of dates, never an adjective. Every card in this category carries the last release and its date, the last commit on the default branch, and whether the repository is archived. A README that says "actively maintained" is a sentence somebody wrote once.
This matters more here than it does for a charting tool. A prediction-market API is young and moves fast: authentication schemes change, order types are added, endpoints move hosts. When the venue ships that change, an unmaintained client does not warn you — it starts returning errors, or worse, keeps working for reads and fails only on the order you cared about. Neither side announces anything, because the venue does not know your library exists and the library has nobody left to notice.
Ranges worth knowing: kalshi-python last published in September 2025; ccxt publishes about weekly. Those are two very different risk profiles for the same job.
What happens when the venue changes its API
Ask, before you depend on a library, what the failure mode is. A generated client — one built automatically from an OpenAPI specification — regenerates cheaply when the spec changes, but only if somebody runs the generator and uploads the result. A hand-written client absorbs a change more gracefully but needs a human who understands both ends.
A multi-venue abstraction like CCXT adds a third layer: the venue changes, the library's unified model has to be re-mapped onto it, and your code sees either a fix or a silently different meaning for the same field. The upside is that you write one integration instead of five. The cost is that you are reading somebody else's translation of the exchange, and the errors you get back are the translation's, not the exchange's.
Open source is not the same as safe to hand a key
This is the sentence this category exists to print. An MIT licence is permission to read the code, not evidence that anyone did. A trading client runs with your credential inside the same process as every dependency it pulls in, and most of these libraries pull in a dozen.
Concretely, before you point a client at a funded account:
- Know which credential it wants. An exchange API key that can be scoped to trading is a different level of exposure from a wallet private key that can move funds. On the on-chain venues, signing an order and moving the collateral are both done with the same key.
- Know what it uploads. A client that signs locally and posts a signed payload is doing the right thing; a client that asks for a key so it can call a service you do not control is not.
- Check the dependency list, not just the repository. Supply-chain risk lands in the same process as the key.
- Separate the read path from the trade path. Most of these libraries work unauthenticated for prices and order books. Anything you are only reading does not need a key at all.
Nothing in this category has been run against a funded account by this site, so every card here is
hands_on: false. The dates, the licences, the dependency lists and the method inventories are
read out of the repositories and the published packages; the behaviour under load is not something
we are claiming.
Some of them charge you, and the venue's fee is not the whole fee
A library takes nothing. You install it, it signs an order, and what the fill costs is whatever the venue charges — the curve on its card, and nothing else. That is true of every SDK in this listing and it is why the fee fields on those cards are empty.
It stops being true the moment the product has a front end. A consumer app that routes your order to somebody else's order book has an obvious place to take a margin, and it is inside the fill, where you will not see it as a line item.
Polycool is the explicit version: a percentage of every successful trade, on a ladder that starts at 1.00% and falls to 0.50% on lifetime volume, with a floor of three cents per execution — which makes a small copy proportionally far more expensive than the headline rate. That is charged on top of whatever Polymarket takes, and the card says so in its first line.
Synthesis is the other version, and the more common one: no pricing page, no fee page, and terms that run to thousands of words without mentioning a charge to the user. Its card leaves the fee fields empty rather than setting them to zero, because empty renders as "unknown" and zero would claim we established that nothing is taken. Treat an unpublished fee as unstated, not as free.
So the question to ask a front end is not what it costs to install. It is what it takes per fill, where that is written down, and what happens to the number as you trade more.
What is in here so far
Most of this listing is the client-library layer, which is the part where the facts are checkable: the official SDK each venue publishes, the unofficial ones people use instead, and the two multi-venue abstractions. Beside them sit a terminal and a self-hosted strategy app, because a bot you run on your own keys is the same kind of object as a library — it just comes with an interface.
What is deliberately absent is larger than what is here. The community lists carry dozens of Polymarket bots, and most of them fail the entry test in the same three ways: no licence file, no release and no commit inside a year, or no answer to the question of what the thing does with the key you hand it. A hosted service that decides which contract to buy and sells you the answer is outside this catalogue altogether — that boundary is a product one, not a technical one, and it does not move because the product is popular.
So the listing grows one checked repository at a time, and a name we could not verify is a name that is not here.
All 15 tools in Clients & Bots
Compiled from each vendor’s own documentation, pricing page and terms — no card here is marked hands-on yet.
Showing 15 of 15
One client for seven prediction venues, inside a 104-exchange crypto library.
Kalshi's current official Python client - weekly releases, Python 3.13 only, no source.
Kalshi's own generated Python client - closed-source, and unreleased since September 2025.
Limitless Exchange's own async Python SDK - CLOB and NegRisk orders, WebSocket, MIT.
CCXT-shaped client for prediction markets, with a hosted API and a self-hosted mode.
Phone-sized Polymarket client with copy trading, parlays and a fee of its own.
Polymarket's Rust command line - MIT in the manifest, with no LICENSE file in the repo.
Official SDK for Polymarket US - installs as polymarket-us, unreleased since January.
Official TypeScript client for Polymarket US - npm has shipped nothing since January.
Polymarket's own unified Python SDK - sync and async, data through order signing.
Polymarket and Kalshi in one terminal, with wallet analytics and a REST API.
Polymarket's own Python CLOB client - archived, and declared non-functional by its README.
Unofficial Kalshi client with what the generated SDK leaves out - streams and retries.
Polymarket and Kalshi in one browser desk, with copytrading and a shared portfolio.
Head to head
Background
How this part of the industry works, rather than which product to pick.
How to
One task per page, done with cards from this listing.
FAQ
Is a venue's own SDK always the right one to use?
Not automatically. An official SDK tracks the venue's API and nothing else, which is what you want for one venue and useless across several. It can also be abandoned by the same company that wrote it - Polymarket archived its own Python CLOB client and told users it no longer works. Check the release dates before the badge.
How do I tell whether a client library is still maintained?
Three dates, not an adjective. The last release and its date, the last commit on the default branch, and whether the repository is archived. A library with no release in a year is a fact you should see on the card rather than discover after your orders start failing.
Does open source mean a trading client is safe to give an API key?
No. Open source means you may read the code and that somebody could have. A client that signs orders holds your private key or your exchange key in the same process, and every dependency it pulls in runs there too. Read what the library does with the key, and prefer keys scoped to trading with withdrawals disabled.
Can one library trade several prediction markets at once?
Two here try - CCXT, through a dedicated prediction namespace covering seven venues, and PMXT, which is shaped after CCXT and lists fifteen. Every other client here speaks to exactly one exchange, because order signing, collateral and the shape of a market ID are different at each of them. What you gain is one integration; what you lose is that the errors come back in the library's vocabulary rather than the exchange's.