Logan Jonesupdated jul 2026
← index

Arbiter

2026 · Python, FastAPI, React · demo · github

The same event trades at different prices on different exchanges. Multi-outcome events sometimes price to more or less than certainty. Arbiter scans Polymarket and Kalshi every 5 minutes and finds the gaps, fees already subtracted.

Three kinds of edge

  • Multi-outcome arbitrage: events where the YES prices across all outcomes fail to sum to a dollar. When they sum below it, buying every outcome locks in the difference.
  • Tailing: outcomes the market already treats as near-certain, above 95 cents, that still carry positive edge after fees.
  • Cross-exchange arbitrage: the same real-world event priced differently on Polymarket and Kalshi.

The fee problem

A naive scanner flags edges that fees erase. The two exchanges charge in structurally different ways. Polymarket takes 2% of profit, so effective cost scales with distance from a dollar. Kalshi’s fee is quadratic in price, 0.07 × price × (1 − price), peaking around 1.75 cents on a 50/50 contract. Every opportunity Arbiter reports is net of the correct model; the fee math lives in one module so no analyzer can quietly get it wrong.

Each opportunity carries a quality grade, high to theoretical, from edge size, liquidity, and executability, plus a momentum read from 30-minute snapshots showing whether the gap is opening or closing.

How it’s built

Python 3.12 on FastAPI, SQLAlchemy over SQLite in WAL mode. A scheduled cycle collects both exchanges over httpx, runs the analyzers, matches events across exchanges, detects cross-exchange arbs, and prunes snapshots older than 48 hours. React frontend: dense sortable table, split detail panel with step-by-step execution instructions, fee breakdown, and projected P&L, refreshing every 30 seconds.

The hard parts

  • Deciding that two differently-worded markets are the same event. Jaccard similarity on tokenized titles; the cost of a wrong match is a fake arbitrage that looks like free money.
  • Separating real edge from stale quotes. A thin market showing a gap is not an executable opportunity; that’s what the quality grades encode.
  • Completeness: an event missing one of its outcome markets can masquerade as a multi-outcome arb. Arbiter detects and flags incomplete events instead of reporting them.
Arbiter scanner: ranked opportunities across Polymarket and Kalshi with score, net edge, profit, and liquidity per row
fig. 1 · the scanner: 1,241 opportunities, fee-adjusted, quality-ranked
[0] ~/portfoliominnesota