Most "automated Kalshi trading" content online is a thin wrapper around one idea: give a black box your money and your keys, and hope. We built the opposite. Here's how to automate off a real signal feed without ever handing anyone custody of your account — and an honest look at why the edge is smaller than the screenshots suggest.
The two-piece setup
Automating any market comes down to two questions: what do I act on, and who places the order. We split them on purpose.
1. The signal — the Edge Alerts API. A JSON feed of the edges our models flag on Kalshi: weather (NWS forecast vs. the daily-high market), the commodity ladders (bitcoin, silver, gold, oil), and daily mispricings. A Pro key gets it in real time; anyone can watch the same feed 24 hours delayed for free.
2. The executor — an open-source script you run yourself. It polls the feed, applies your rules, and places orders on Kalshi with your key, on your machine.
The key word is non-custodial. Your Kalshi key id and private key live in your config, on your computer. Our key only authorizes reading the feed. On custody: we never have it.
Why non-custodial matters
The moment a service holds your exchange keys, you're trusting it with your account — its security, its solvency, its incentives. A non-custodial design removes that entire class of risk. You keep the keys; the software is auditable (it's one readable Python file); and if you don't like a rule, you change it.
It also keeps the roles clean. We publish impersonal analysis, identical for every subscriber, delivered at the same time. We are not a broker and not an advisor. You configure every rule and own every order.
Step 1: read the feed
Every alert is a small JSON object — feed, tier, side, price in cents, model probability, edge in percentage points, and a Kalshi market link:
curl -H "X-API-Key: pmp_v2_pro_…" \
"https://predictionmarketspicks.com/api/v1/alerts?feed=weather,mispricing&tier=STRONG&limit=25"
No key returns the same feed delayed 24 hours with the thesis stripped — useful for backtesting the shape of the data before you commit. Full reference, params, and rate limits are in the API docs.
Step 2: run the executor (dry-run first)
The executor is a single file. Copy the example config, and run it in dry-run — it logs the trades it would place and places nothing:
uv run executor.py --config config.yaml --once
Live trading is deliberately hard to trigger: you set dry_run: false and pass --live. Until you do both, it can't move a cent.
Step 3: set the rules that keep you safe
This is the part that matters. Every guardrail is local, enforced before any order:
min_tier— only act on STRONG signals, or open it up to MODERATE.kelly_fraction_cap— size at a fraction of Kelly (¼ by default). Full Kelly is a good way to go broke on variance; a quarter is plenty.price_guard_cents— skip if the live Kalshi price has moved against you since the alert printed. This is your defense against self-crowding (below).max_cost_cents_per_trade,daily_spend_cap_cents,max_open_positions— hard ceilings so a bad day stays small.
Filters select which alerts you act on. They never change the signal — the feed is impersonal and identical for everyone.
The honest part: self-crowding and fees
Here's what the bot-comparison posts leave out.
Self-crowding. Every subscriber gets the same alert at the same instant. Kalshi books are finite. If a hundred people act on a 34¢ print at once, the book climbs and your fill isn't 34¢ anymore. That's exactly what the price guard is for — but it also means you should assume the edge is smaller than the printed number, and sometimes gone. We deliver uniformly and simultaneously on purpose; staggering delivery to give some traders a head start would break the impersonal posture that keeps this honest.
Fees. Kalshi charges per contract. On a small edge, fees are not a rounding error — they're the difference between a good idea and a losing one. Size with fees in mind, and don't chase 2-point edges.
Neither of these is a reason not to automate. They're reasons to size conservatively, use the guard, and treat every alert as a shortlist to act on within your rules — not a guaranteed winner.
What this is not
It's not investment advice. It's not a "we trade for you" service. It's not a promise that the model is right — the value is in acting on a calibrated signal with discipline, sized correctly, not in any single call. And whether automated trading suits your account and jurisdiction, under Kalshi's own terms, is your call to make.
Start on the free delayed feed, read the API docs, and run the executor in dry-run until you trust what it does. Then, and only then, decide whether to arm it.
Trade responsibly.
