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.

fig. 1 · the scanner: fee-adjusted edges, quality-ranked · [zoom]

fig. 1 · the scanner: fee-adjusted edges, quality-ranked[click] zoom in · [esc]

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 on FastAPI, SQLAlchemy over SQLite. A scheduled cycle collects both exchanges, runs the analyzers, matches events across exchanges, and detects cross-exchange arbs. React frontend: dense sortable table, split detail panel with step-by-step execution instructions, fee breakdown, and projected P&L.

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.
[0] ~/portfoliominnesota