What Is Polymarket Kalshi Arbitrage Bot?
Polymarket Kalshi Arbitrage Bot is an open-source arbitrage bot built by seabra98 for exploiting price differences in Bitcoin 15-minute up/down prediction markets between Kalshi and Polymarket. It integrates Kalshi's REST API for portfolio balances and orders with Polymarket's CLOB via Gamma markets, targeting cross-venue spreads. Polymarket Kalshi Arbitrage Bot is one of the best arbitrage bots for crypto traders and prediction market arbitrageurs, with 228 GitHub stars as of October 2024 and dual-venue monitoring that logs spreads every 200ms by default.
Quick Overview
| Attribute | Details |
|---|---|
| Type | Arbitrage Bots |
| Best For | crypto traders and prediction market arbitrageurs |
| Language/Stack | TypeScript / Kalshi REST API / Polymarket CLOB |
| License | N/A |
| GitHub Stars | 228 as of Oct 2024 |
| Pricing | Open-Source |
| Last Release | b97ffd9 — recent |
Who Should Use Polymarket Kalshi Arbitrage Bot?
- Prediction market traders monitoring BTC 15m binaries who need automated limit orders on Kalshi YES/NO and Polymarket UP/DOWN tokens without manual polling.
- Arbitrage developers building on EVM/Solana prediction markets like Polymarket or Kalshi that require dual-API integration and configurable spread thresholds.
- Solo quant traders running Node.js scripts on VPS for 15m-slot logging and single-instance locking via monitor.lock files.
- Bot enthusiasts testing dry-run modes before live trading on Kalshi demo accounts or Polymarket testnets.
Not ideal for:
- High-frequency traders needing sub-100ms latencies, as polling defaults to 200ms intervals.
- Multi-market scalpers beyond BTC 15m KXBTC15M, limited to first open Kalshi market.
- Beginners without API keys, as setup demands KALSHI_API_KEY and private keys upfront.
Key Features of Polymarket Kalshi Arbitrage Bot
- Balance fetching — Queries Kalshi REST API for portfolio balances, printing USD-equivalent exposure across open positions via
npm run balance. - Kalshi single order — Places one limit order on the first open KXBTC15M market, configurable via KALSHI_BOT_SIDE (yes/no), KALSHI_BOT_PRICE_CENTS (e.g., 50), and KALSHI_BOT_CONTRACTS (e.g., 2).
- Dual-venue monitor — Polls best-ask prices from Kalshi REST and Polymarket CLOB every KALSHI_MONITOR_INTERVAL_MS (default 200ms), logs to 15m-slot files like monitor_YYYY-MM-DD_HH-00.log, with optional quarter-hour restarts.
- Cross-venue arbitrage — Triggers orders when sum of opposite sides (Kalshi UP + Polymarket DOWN) falls in [ARB_SUM_LOW=0.75, ARB_SUM_THRESHOLD=0.92), using ARB_PRICE_BUFFER for slippage and at most one order per leg.
- Polymarket single order — Executes limit buys for DOWN tokens on current BTC 15m market via
npm run poly-single-order [price] [size], supporting POLYMARKET_PROXY for RPC routing. - Config validation — Uses polymarket-validator at startup to check POLYMARKET_PRIVATE_KEY and chain settings, halting if invalid.
- Dry-run mode — Sets KALSHI_BOT_DRY_RUN or ARB_DRY_RUN=true to simulate orders without execution, logging intended actions to console.
Polymarket Kalshi Arbitrage Bot vs Alternatives
| Tool | Best For | Key Differentiator | Pricing |
|---|---|---|---|
| Polymarket Kalshi Arbitrage Bot | BTC 15m arb between Kalshi/Polymarket | Dual-venue 200ms polling + auto-orders on 0.75-0.92 spreads | Open-Source |
| Hummingbot | Multi-exchange spot arb | Liquidity mining + market making strategies across 50+ CEX/DEX | Open-Source |
| CCXT-based bots | Custom crypto exchanges | Unified API for 100+ exchanges, no prediction market focus | Open-Source |
| 3Commas | Retail trading automation | GUI dashboards + DCA bots, less code flexibility | Paid |
Hummingbot suits broader spot/futures arbitrage with strategy persistence but lacks built-in Kalshi-Polymarket pairing; pick it for cex/dex crossovers. CCXT bots excel in generic exchange scripting via Python/JS wrappers yet require custom arb logic without 15m-slot monitoring. Check browse all Arbitrage Bots for more options like frequency-tuned alternatives.
How Polymarket Kalshi Arbitrage Bot Works
Polymarket Kalshi Arbitrage Bot runs as a Node.js TypeScript app with a single main loop polling Kalshi's REST endpoints for KXBTC15M markets and Polymarket's Gamma CLOB for BTC 15m UP/DOWN tokens. Core abstraction splits into monitor (price fetching/logging), arb (spread calculation/order placement), and venue-specific order placers using raw HTTP clients—no SDK dependencies beyond polymarket-validator. Environment vars drive config: thresholds like ARB_SUM_THRESHOLD=0.92 define arb triggers, while single-instance locking via logs/monitor.lock prevents duplicate runs.
On npm start, it validates .env (KALSHI_API_KEY required, POLYMARKET_PRIVATE_KEY optional for arb), compiles TS to dist/, then enters 200ms poll cycle. Logs dual best-asks (e.g., Kalshi [email protected] + Poly [email protected] = 0.92 sum), triggering limit orders if in range—Kalshi via signed POST /orders, Polymarket via EVM tx signing with proxy RPC. Quarter-hour restarts align with market slots unless KALSHI_MONITOR_NO_RESTART=true.
# Setup and run monitor + arb
cp .env.sample .env
echo "KALSHI_API_KEY=your_key" >> .env
echo "ARB_SUM_THRESHOLD=0.90" >> .env
npm install
npm start
This command copies sample env, sets minimal Kalshi creds and arb threshold, installs deps (TypeScript compiler, API clients), then launches the locked monitor. Expect console output of balances/prices every 200ms and log files per 15m slot; first arb triggers one Kalshi order + one Poly if spreads align, dry-run logs simulations.
Pros and Cons of Polymarket Kalshi Arbitrage Bot
Pros:
- 200ms polling captures 15m BTC market inefficiencies missed by slower scripts, logging full spreads for backtesting.
- Configurable dry-run and per-venue params (e.g., KALSHI_BOT_PRICE_CENTS=50) enable precise order sizing without live risk.
- Single-instance lock via monitor.lock scales to one VPS process, avoiding race conditions on shared keys.
- Integrates Polymarket CLOB directly via private key signing, bypassing heavy SDKs for lower latency tx submission.
- Quarter-hour auto-restarts keep alignment with market closes/opens, reducing stale data accumulation.
- Startup validation with polymarket-validator catches proxy/chain misconfigs before polling waste.
Cons:
- Limited to first open KXBTC15M on Kalshi and current Poly BTC 15m, no multi-market or custom ticker support without code changes.
- No built-in risk management beyond MIN_USD thresholds; overexposure possible on volatile slots.
- Relies on POLYMARKET_PROXY for RPC, prone to chain congestion delays on mainnet.
- Lacks persistent state or database; restarts lose in-flight arb checks, relying on log files only.
- TypeScript-only, no Docker image or multi-language ports for non-Node devs.
Getting Started with Polymarket Kalshi Arbitrage Bot
Clone the repo, set env vars from .env.sample, install, and run scripts for testing. Kalshi requires API key + private key PEM/path; Polymarket adds private key + proxy for orders. Use demo mode (KALSHI_DEMO=true) initially.
git clone https://github.com/seabra98/Polymarket-Kalshi-Arbitrage-Bot.git
cd Polymarket-Kalshi-Arbitrage-Bot
cp .env.sample .env
# Edit .env: add KALSHI_API_KEY, KALSHI_PRIVATE_KEY_PEM, POLYMARKET_PRIVATE_KEY
npm install
KALSHI_BOT_DRY_RUN=true npm run kalshi-single-order
npm start
Running these installs deps and simulates a Kalshi YES order at default price, printing intent without execution. Full npm start then polls dual venues, logging to console/logs/ and placing arb orders if spreads trigger—expect first log within 200ms, lock file creation, and 15m rotates. Configure ARB_DRY_RUN for safe arb testing; monitor logs/monitor_*.log for spread history.
Verdict
Polymarket Kalshi Arbitrage Bot is the strongest option for BTC 15m prediction market arb between Kalshi and Polymarket when running headless Node.js on VPS with API keys ready. Its 200ms dual polling and configurable 0.75-0.92 spreads automate profitable legs reliably. Trade-off: single-market focus demands forks for expansion; deploy dry-run first for validation.



