Prediction markets: reading baskets that cost less than they pay

A set of outcomes that pays a known amount whatever happens sometimes costs less than that amount. How the section finds such baskets, what legs, ⚠ and the filters mean, and what to check before a trade.

What this section shows

The Prediction markets section looks for sets of outcomes that pay a known amount whatever happens and cost less than that after fees. The difference between the payout and the price of the set is the result. We call such a set a basket, and each purchase in it a leg.

There are two kinds. Within a venue is rebalancing: the YES of every outcome of a group where exactly one wins, together under $1. Across venues is the YES of an event on one venue and the NO of the same event on another, together under $1; both legs are held to the resolution.

Which venues are read

Polymarket, Kalshi, Limitless, Myriad, Hyperliquid and Opinion. SX Bet, Predict.fun and Binance predictions serve prices only with an API key, so they count only when a key is set. Manifold is play money: it has a separate table for comparison and is never arbitrage, because mana cannot be withdrawn.

Reading the table

  • Event — the title, the basket type and tags: the pair match with its confidence, “depth unknown”, ⚠.
  • Buy — the legs: venue, side (YES or NO), price in cents and the age of the quote.
  • Spent — what goes into sets and why the count stopped: no edge beyond, the book ran out, or all the capital.
  • Net — the percentage after the venues’ taker fees, and the annual rate, simple, without compounding.
  • Profit, Size — how many dollars can go in at an edge, To payout — days to the last resolution date of the legs, Age.

A leg’s price is the best offer in the book. Sets are bought along the book while the next one still costs less than it pays. Where there is no depth, one set is costed at the best price and the row says “depth unknown”.

The ⚠ mark: venue rules

Two venues can resolve the same event differently. Such rows are shown by default and marked ⚠ “resolution conditions may differ”, sports rows “venue rules differ”, with what exactly differs: postponement, cancellation, Kalshi paying a fair price. There is no mark only when both venues publish the very same rules text.

The board’s best result comes from fresh rows whose rules are the same. A basket with ⚠ heads it only when no other fresh one exists, and then says so.

The other reason for ⚠ is freshness: a leg older than 5 minutes, or legs read more than 3 minutes apart. Such a row stays in the table but never heads the board.

Filters

  • Capital, $ — sets and profit are counted for this amount, 1000 by default.
  • Type — all, within a venue or across venues.
  • Net from … to, % — the range of the result. The lower bound is never below zero: the section does not show losing sets at all.
  • Min size, $ and Days to payout, max.
  • Markets — all, short-term (paid within 7 days), sports and live. Sports and live add the sport, league, game state, bet type and venue rules: all, the same, different.
  • Venues — which to include. The “show uncertain matches” switch adds cross-venue pairs with lower match confidence.

The table refreshes itself every 20 seconds; auto-refresh can be turned off.

Sports and live

Sports pairs are matched on the league, sides, start, bet type and line; totals and handicaps on different lines are checked against every possible score, with the net on the minimum payout. Live, a basket counts only when every leg is at most 10 seconds old, the legs at most 5 seconds apart and both read after the last change of score.

What the section leaves out and why

NO of every outcome of a group is not shown, nor are sums of displayed prices, midpoints and last trades: nothing can be bought at them. Combinatorial arbitrage across linked markets is not built: a link guessed from titles is an invented basket.

Rows whose market fee is unknown (Hyperliquid, Binance) do not reach the table: without the fee there is no net. PredictIt, Drift BET, Gemini Predictions, Novig and Betfair are not used; the reasons are below the table.

What to check before a trade

  1. Read both markets’ rules: pairs across venues are matched automatically.
  2. Look at the match confidence and its reasons, shown in the pair’s tooltip.
  3. Check the venue’s minimum order size: the section does not take it into account.
  4. Remember that USDC, USD1 and dollars on a Kalshi account are different money, and 1:1 between them is not guaranteed.
  5. Check the venue is open from your country: restrictions are listed in the venue notes below the table.

The site only shows data: it does not trade and asks for no keys.

Frequently asked

Why is the table empty? There are no baskets in profit after fees for your filters right now. The section does not show losing sets: they are not arbitrage.

Can I trust a row with ⚠? The mark means the resolution rules are not word for word the same, or a quote is stale. The basket may be real, but in an unlucky outcome the set will not pay $1, so read the rules.

Do I have to wait for the resolution? Usually yes: days to the payout run to the last resolution date of the legs. Exceptions are marked in the row: on Polymarket and Limitless, for example, a YES and a NO of one market can be merged into $1 at once.

More guides

Crypto arbitrage: how it works and what it actually pays

Where price gaps between exchanges come from, the types of arbitrage, what eats the profit and what actually reaches your pocket. With numbers and no promises of easy money.

Working out a route in advance instead of trading for nothing

Saw a 2% spread, did the trade, made nothing — the money went into fees that were not on screen. What comes out of a spread and what counts as workable.

Arbitrage risks and how to reduce them

Arbitrage is called risk-free because you do not guess the market. Every other risk is still there — here are all seven and what to do about each.