Skip to main content
potd-trader runs on your computer and buys released Pick of the Day picks with your Polymarket account. You choose an amount per pick and a daily spending cap. It starts in dry-run mode, which checks possible purchases without placing orders. Your private key signs orders locally. 0xinsider provides the picks; it does not hold your wallet or run the trader for you.

Before you start

You need Windows x64, macOS, or Linux, plus Git and uv. The commands below install a compatible Python version through uv. Keep the checkout, configuration, and order ledger on one local filesystem, outside OneDrive or other synchronized folders. Use one active setup per wallet; separate computers or ledger copies cannot prevent each other from buying the same pick.
Live mode spends real money. Use a dedicated wallet with a small balance, and keep your keys private. Local signing and spending limits do not protect you from every unwanted recommendation or loss.

1. Install the trader

Use v0.3.6 to verify your account’s Pro or Max allowance before buying. Pro includes up to 5 daily picks; Max includes up to 15. Stop older watchers before upgrading, because they do not enforce this additional pick limit. On Windows, install uv and Git in PowerShell:
Reopen PowerShell, then run Set-Location $env:USERPROFILE to work in your local user folder. Windows runs the CLI directly; WSL is optional. Run these commands in PowerShell or your macOS/Linux terminal:
These commands install v0.3.6 with its locked dependencies. Use its release page to verify the source commit and package checksums.

2. Enter your keys and spending limits

init creates a potd-trader/ configuration folder inside the checkout. It asks for 5 values:
  1. Your 0xinsider API key.
  2. Your Polymarket signer key.
  3. Your Polymarket account address.
  4. The amount to buy per pick.
  5. Your daily spending cap.
Both keys stay hidden as you type. Set your daily spending cap for up to 15 available picks; the existing suggestion stays at 10 stakes. Pro opens 5 daily picks in total, including the free selection, and Max opens every available published pick up to 15. Your chosen cap still limits spending. The setup checks your account and runs a dry run. It never overwrites an existing configuration folder. Leave live trading off when it asks whether to enable it; you can enable it after the checks below. On macOS and Linux, the folder is private to your user, with mode 700, and .env has mode 600. On Windows, the new folder allows access to your user account and administrators. Check the permissions yourself if you use an existing or manually created folder.

3. Check your account and a dry run

Enter the configuration folder and run:
status reports regional eligibility, wallet balance, trading approvals, reserved spending, and unresolved orders. The dry run reports your Pro or Max allowance, reserved picks, and which released picks it would buy or skip. A skipped pick includes a reason; no order is sent. If status reports missing approvals, create a Relayer API key in Polymarket Settings > API Keys. Add POLYMARKET_RELAYER_API_KEY and its POLYMARKET_RELAYER_API_KEY_ADDRESS to your local .env, then run:
setup sends approval transactions for your wallet. It does not buy picks. Run status and the dry run again afterward.

4. Start buying when you are ready

From the same configuration folder, run:
live on asks you to type spend real money. watch then checks for released picks and later releases, and reports each purchase or skip. Keep this process running if you want it to check future releases. For a single check of the picks already released, use uv run --locked potd-trader run. Add --dry-run to either run or watch whenever you want to prohibit orders.

Stop buying

Run these commands from the configuration folder, using another terminal if the watcher is running:
live off writes a persistent HALT file, then waits for any submission already in progress. After it acknowledges the stop, watchers using that folder cannot submit a new order. An order already sent can still fill; this command does not cancel it. A stuck network request can delay acknowledgment. live on clears HALT after confirmation; a watcher that started in live mode can resume, while a watcher that started dry must be restarted.

Set an amount per pick and a daily cap

Every eligible released pick uses the same amount. With the defaults, the trader buys up to 5 pUSD per pick and reserves at most 25 pUSD of order principal per UTC day. That cap covers 5 full-sized picks, matching Pro’s daily allowance. Max needs a cap of 75 pUSD to fund 15 picks at that amount; a day can publish fewer picks. Fees are additional. A partial fill still counts the full requested amount against the cap. If the cap cannot cover every pick, earlier releases are considered first, with token ID breaking ties, and the trader reports the skips. To change these limits in an existing setup:
  1. Run live off and stop every watcher.
  2. Run uv run --locked potd-trader size from the configuration folder.
  3. Enter the new amount and daily cap.
  4. Check status and a dry run, then enable live mode and restart the watcher yourself.
The size command preserves your keys. Old MIN_RANKS and MAX_RANKS settings are ignored; the trader has no rank filter or rank-based stake.

Your Pro or Max allowance

Your API key determines access; there is no local tier setting. Pro includes the designated free selection plus the first 4 nonfree selections, for up to 5 daily picks. Max includes every eligible published selection, up to 15. The trader reads the authenticated feed response’s X-Monthly-Quota-Limit header. The current included request allowance of 500,000 identifies Pro, and 2,000,000 identifies Max; the optional pay-as-you-go ceiling does not change your pick allowance. Missing or unrecognized values stop trading, and a future allowance change requires a compatible trader release. The daily pick limit follows the America/New_York calendar used by the picks. Accepted, submitting, and unknown entries for that date count toward the limit, including entries created by older releases. Known rejections release their reservation; the independent spending cap still follows UTC. A watcher checks this allowance on every successful feed response, including 304. When it changes, the watcher discards its cached picks and requests a fresh slate. Locked selections never become purchases or requests for hidden game details.

Why a pick may be skipped

The trader requires a released, unsettled pick with a positive published price and a valid entry_authorization for its token. Polymarket must also confirm the market, outcome, trading status, kickoff time, price increment, and minimum order size. A purchase must fit all 3 price limits: your MAX_PRICE, your MAX_SLIPPAGE_PCT, and the pick’s entry_authorization.max_entry_price. The trader checks the current order book price needed for your full stake against each limit. The authorization limits price movement; it is not a forecast of profit. Before submitting, the trader checks the current order book and market again, then checks the stop flag and quote deadline. The quote is valid for at most 30 seconds, and less near kickoff or authorization expiry. The trader records its spending reservation before submitting one Fill-and-Kill BUY order. This order can fill partly or completely; any unfilled portion is cancelled. If the submission result is uncertain, the trader blocks another attempt instead of risking a duplicate purchase. watch follows Retry-After, release times, and proof_pending_picks[].retry_at. Temporary read failures produce a warning and a bounded wait before another check.

How slippage and fill prices work

Slippage protection limits the share price before an order is sent. It compares a current book quote for your stake with 3 independent ceilings: The lowest ceiling wins. The reference ask is recorded when authorization is first issued, which can be earlier than publication; backed_price is the midpoint recorded at publication. A 5-cent API allowance does not increase your local percentage limit. For example, a 64-cent reference ask gives a new API ceiling of 69 cents. If the published pick price is 66.5 cents, the default 3% limit is 68.495 cents before rounding to the market’s price increment. The trader still skips a quote above 68.495 cents.
The submitted order limit is the highest share price that order may pay. It is set from the accepted quote, not automatically raised to the largest price your settings permit. The order can fill at several prices at or below its limit; the average actual fill price is known only after execution and is not the value used for the pre-order check. If the book moves before submission, the order may fill partly or not at all. Fill-and-Kill cancels any unfilled portion instead of leaving an order resting. Fees are additional and are not covered by these share-price ceilings or the principal spending cap. See Polymarket’s order guide for the provider’s quote and Fill-and-Kill behavior.

Resolve an uncertain order

Inspect the local order ledger:
Entries marked submitting or unknown keep their spending reservation, including across midnight. A confirmed order counts toward the UTC day when it was submitted. A known rejection releases the reservation. If an order’s result is uncertain:
  1. Stop every trader instance for the wallet.
  2. Inspect Polymarket Activity and the order’s fill state.
  3. Back up the configuration folder and ledger.json.
  4. Reconcile the entry only after proving whether an order was accepted or can still execute.
Keep confirmed orders and their identities. Removing an entry without checking Polymarket can allow a second purchase. Never delete the ledger or lock files while a process is running. The ledger also blocks reuse of a pick, its date/slot with a different token, or the same token on a different date. All instances for one wallet must share the same configuration folder and ledger, and run on the same operating system.
On Windows, a hard power loss can lose the latest reservation or stop flag. Check Polymarket Activity and reconcile the ledger before restarting live mode. Do not run Windows and WSL instances for the same wallet at the same time.

Settings

Edit .env locally and restart the watcher after changing settings. A .env in the current folder takes precedence over the fallback in POTD_TRADER_HOME. An environment variable cannot enable orders when the active .env says LIVE=no. A missing control file also prevents live orders, even if secrets come from the environment.

Upgrade an existing setup

  1. Run live off and stop every old watcher, including any in WSL.
  2. Back up the complete configuration folder and ledger.
  3. Install v0.3.6 in a separate checkout using the installation commands above.
  4. Use the same configuration and ledger on a local filesystem.
  5. Run status and run --dry-run before enabling live mode again.
When moving from WSL to native Windows, keep one active configuration copy. Update absolute LEDGER_PATH and POTD_TRADER_HOME values to their Windows paths. Existing v1 JSON ledgers need no migration. If you are upgrading from 0.2.0, close every old process: its live off cannot stop a binary that is already running. Set a positive DAILY_CAP_USD; 0 is rejected. For Docker setup, follow the repository’s Docker instructions. Mount the configuration folder at /app/data so the container sees the same .env, HALT, and ledger.

Where your data goes

The private key stays in the local signing process. The trader uses the following services; package installation also contacts package hosts. The release pins polymarket-client==0.10.0. The application has no withdrawal command, the builder code is optional, and OXINSIDER_API_BASE accepts only https://api.0xinsider.com. The client refuses redirects. Anyone who can read .env can use its credentials. For manual setup, copy .env.example to .env inside the checkout and restrict its permissions before adding keys. Use chmod 600 .env on macOS/Linux; on Windows, restrict the folder to your account and administrators.

Limits

Polymarket’s regional restrictions apply. The trader skips a purchase when required safety data is missing. Neither a dry run nor the release’s offline checks prove that a real order will succeed or that a pick will make a profit. The tool is MIT licensed, with no warranty. If an AI agent helps you set it up, it should follow the trader’s agent instructions and leave enabling live orders to you.