Skip to content
EdgeLedger
0x0000…0096demo

You're viewing demo data.

Cross-venue arbitrage — what EdgeLedger detects

How EdgeLedger spots price discrepancies for similar events across Polymarket, Kalshi, and Manifold — and what can make a flagged opportunity real vs illusory.

·8 min read·Compliance reviewed

When the same real-world question lists on more than one venue at slightly different prices, there may be a gross price gap between complementary YES and NO contracts. EdgeLedger's Pro arbitrage scanner is built to surface those moments. This guide walks through the structure of the comparison, how the scanner finds candidates, and why fees, slippage, timing, eligibility, and rule mismatches can erase the headline gap.

If you haven't read the underlying concepts yet, start with Reading prices and expected value and Liquidity, slippage, and order book vs AMM.

What cross-venue arbitrage means

A binary contract pays $1 on the winning side and $0 on the other. If two markets truly have identical rules, settlement sources, timing, and eligibility, then buying YES on one venue and NO on another for less than $1 in total creates a gross payoff spread before fees and execution costs. The hard part is verifying that the two markets are truly equivalent and executable.

The mechanic, in one line:

// gross spread per pair, in dollars, before fees/slippage/timing/rule risk
const grossPairSpread = 1 - (yesPriceVenueA + noPriceVenueB);

When grossPairSpread > 0, there is a gross cross-venue spread. When it is large enough to survive all frictions below, it may still be positive on a net basis.

How EdgeLedger detects opportunities

The Pro arbitrage scanner runs against three sources today: Polymarket, Kalshi, and Manifold. The pipeline is:

  1. Pull a working set of active markets from each venue — capped per source (≈160 Polymarket, 120 Kalshi, 160 Manifold) to keep latency tight.
  2. Tokenize each market title and build a fingerprint. Common words and month names are stripped (the stop-words list filters "the", "will", "is", etc., and every month abbreviation), so two markets about the same event from different venues share most of their meaningful tokens even when their headlines differ.
  3. Cluster markets by fingerprint overlap using a union-find pass. Markets get grouped if they share enough tokens and their close times sit within a 30-day window.
  4. Compute the best YES/NO pair across each cluster. For every pair of distinct sources (A, B), the scanner evaluates 1 − (yesPrice_A + noPrice_B) and keeps the maximum. The scanner's gross edge is that max.
  5. Filter to a minimum threshold. Edges below 3¢ per pair are dropped — there isn't enough room to cover frictions, and surfacing them creates more noise than signal.
  6. Surface the survivors sorted by gross edge, with per-source quotes attached so you can see exactly where the gap lives.

What you get on the dashboard is a small ranked list (up to 12 opportunities by default, 50 max) with the gross edge, the venues involved, the venue close-times, and confidence scores derived from the match quality.

Real vs illusory opportunities

The scanner reports a gross edge — the price gap itself before execution and settlement frictions. The realised edge is what you actually keep after every friction is paid. The two often differ by a lot.

The four frictions to discount before acting:

  • Fees on each leg. Polymarket spread, slippage, and any market-level taker fee; Kalshi taker or maker fees; plus any payment, bridge, withdrawal, or provider fees relevant to the workflow. See the Polymarket fees guide and Kalshi fees guide.
  • Slippage on the size you actually need. A 5¢ headline edge computed off top-of-book quotes can vanish if the depth at those quotes is small. See Liquidity, slippage, and order book vs AMM for the mechanics.
  • Timing risk between the two legs. On-chain confirmations on Polymarket take seconds; Kalshi orders are near-instant on the book but funding from your bank wasn't. If you place one leg and the other moves before you can fill, the arb shrinks or flips negative. The faster you can complete both legs, the smaller the timing haircut.
  • Cross-venue settlement risk. The two venues can resolve the "same" market differently if their rules differ even slightly, or if one voids/refunds while the other resolves normally. The scanner doesn't read rule text; it matches by title fingerprint. Confirm the rules match before sizing up.

How to act on a flagged opportunity

If you are analyzing a candidate manually, ordering and sizing matter more than usual. A repeatable checklist:

  1. Read both rule sections in full. Confirm the markets actually resolve to the same outcome under every scenario you can think of, including the "cancelled / postponed" branch. If any branch resolves them differently, treat the markets as different products.
  2. Size to the leg with less depth. The arb only works if both legs fill at the prices you saw. Compute the maximum size you can put through the thinner of the two books at the quoted price (or close to it).
  3. Account for funding readiness. Bank funding, card funding, crypto transfers, bridges, and withdrawals all have different timing and hold profiles. A venue you cannot fund in time is not executable for that candidate.
  4. Model legging risk. If one leg fills and the other moves, you hold directional exposure. The thinner or faster-moving venue usually creates the larger legging risk.
  5. Watch partial fills. A partial first leg leaves directional exposure. Decide whether the residual exposure still matches the model before entering another order.
  6. Record the realised edge. Compare net P&L per pair against the headline edge the scanner showed. Over time, the gap is a measure of how aggressive your sizing has been and how reliable the scanner's gross edge is for your actual flow.

Pitfalls

A handful of cases that consistently look like edge but aren't:

  • A wide-spread venue with a stale quote. If one venue hasn't printed in hours, the "ask" you're looking at may be miles from where the next trader will actually sell. Check the panel-level "Updated …" timestamp, then click through to the venue itself before trading if a quote looks too good to be current.
  • Depth at top-of-book is small on one side. A 5¢ headline on a market with $200 of size at top of book is a $10 trade, not a $1,000 one. Anything more walks into worse fills.
  • Different contract definitions. Categorical markets are especially prone to this — "will candidate X win?" on one venue and "election outcome — candidate X" on another can have different cancellation rules, different tie-breakers, or different multi-outcome buckets.
  • Withdrawal lag between venues. Even when the pair closes with positive realized P&L, capital can be locked across two venues until withdrawals or bridges complete.
  • Cross-venue eligibility. You may be eligible to trade on one venue but not the other. Kalshi availability is subject to its Member Agreement and country/payment-method restrictions; Polymarket's international surface has its own regional restrictions, currently including the United States. An opportunity is not executable if either leg is unavailable to you.

What EdgeLedger surfaces today

The arbitrage scanner is gated to Pro users. On the dashboard, each opportunity card shows the title, source badges, the current "buy YES here / buy NO there" pair with prices, gross edge, YES spread, match confidence, and per-source YES/NO prices with their close times. The panel header also shows a single "Updated …" timestamp for the latest scanner snapshot.

The scanner does not auto-trade and never holds your funds — it's a discovery layer on top of public market data. Acting on any opportunity is a manual decision (and execution) on your part.

Where to go next