How we model fair value
The short version: it is a weighted average of two real order books, not a forecast. Everything below is what the code actually does.
The number itself
Fair value is a liquidity- and recency-weighted consensus of the price on each venue that lists the same contract. There is no machine learning, no news model, no black box. A deeper, fresher book pulls the number toward its price; a stale or thin one barely moves it.
Neither venue is allowed to dominate the result. Left unweighted, the venue with consistently deeper books would define fair value outright, so the other venue would appear permanently mispriced and every edge would point the same direction. That is an artefact of the maths, not an opportunity, and the model is constrained to prevent it.
The edge on a venue is simply fair value − that venue's price. Positive means it looks under-priced. We quote it against the real ask, not the midpoint, because the midpoint is a price nobody can trade at.
What we refuse to call an edge
Most apparent cross-venue arbitrage is not real. Five filters remove it, and each exists because it burned us first.
1. The two contracts must settle identically
Near-identical titles routinely resolve on different criteria: map winner versus match winner, "will X run" versus "will X win", differing tie and void rules, different sources of truth. Every candidate pair is machine-checked against both venues' resolution criteria before it can produce an edge. A pair that has not been checked is labelled not checked and never labelled safe.
To date: 138,413 candidate pairs checked, 5,178 confirmed to settle the same way. That ratio looks brutal because candidates come from a similarity sweep, so most were never plausible matches. The useful figure is that even among pairs whose titles look almost identical, a clear majority still do not settle the same way.
2. Neither leg may already be closed
The two venues do not mean the same thing by a market's close time, and the difference is not visible in the data unless you go looking for it. Compare them naively and you end up holding a live price against one that stopped moving hours earlier, which produces a gap that looks enormous and cannot be traded. Detecting and excluding those was the single largest correction we have made to our own scanner. Every group is checked for it twice before you see it.
3. Both books must carry real volume
An illiquid book holds a stale quote, and a stale quote produces the largest apparent edge, so without a floor the most eye-catching row on the page is reliably the least real one. Legs below a liquidity floor are excluded outright, and books that are thin but still tradeable are flagged as such rather than quietly ranked alongside the rest.
4. The model must be confident
Confidence combines how tightly the venues agree, how much volume stands behind them, and how many independent prices exist. Groups below the threshold are dropped rather than shown with a caveat attached. Extreme longshots are excluded as well, since at those prices an apparent gap is usually a fee and tick-size artefact rather than an opportunity.
5. The two contracts must settle on the same clock, from the same source
Settling identically and settling together are different questions, and the second one is where a trader loses their whole stake rather than their margin. Two venues can carry word-for-word identical titles and still pay out opposite ways, because what decides a contract is its deadline and its named source of truth — not its question.
The clearest live example is the 2028 US presidential markets. Kalshi settles on inauguration day; Polymarket settles on election night. Seventy-six days apart, identical titles, and any event in between separates them. The two “next Prime Minister of Sweden” markets are 476 days apart for the same reason: one runs to the end of the term, the other resolves at the September election.
So every cross-venue pair is now compared on three things: the resolution deadlines each venue publishes, the settlement sources each venue names, and whether Polymarket has a live dispute open on its side. Where they disagree, the row is still shown — hiding it would leave you to find the same gap on your own with nothing attached to it — but it carries a settles differently warning that names the actual reason, and it can never be reported as risk-free.
Where a venue does not publish enough for us to check, the pair is marked unchecked rather than assumed safe. Unknown is not the same as agreement.
Which Polymarket you are looking at
Polymarket now runs two venues. Polymarket (polymarket.com) is the international, crypto-settled product. Polymarket US (polymarket.us) is a separate, CFTC-regulated exchange trading in dollars, and it is the one US residents can use. They do not share a book, and the prices differ: checked side by side on the 2026 World Series, the international book showed 32–33¢ on the same contract the US book showed 31.4–32.3¢. The fee schedules differ too.
Our Polymarket prices come from the international venue. If you are a US resident, that means the Polymarket leg of a cross-venue gap is a price you cannot trade at, and the gap on your book will not be the same size. We would rather say this plainly than let the label do the lying. Adding Polymarket US as its own venue is on the roadmap.
The edge is smaller than the edge
The best ask is a price for the first few contracts, not a price for a position. Quote an edge at the top of book and it is true for a $50 order and progressively less true for anything larger — you eat through the cheap size and keep paying up.
So we walk the real ladder. Expand any row and it shows what the edge actually becomes at $200, $1,000 and $5,000, gross and after fees, with the average price you would fill at — and it says when the visible book runs out before the order does.
A worked example from the live board, Commanders vs Eagles on Kalshi against a 32.5¢ fair value: +0.50% at $200, −0.03% at $1,000, −0.40% at $5,000 before fees. After fees it is negative at every size. That is the same market a top-of-book scanner would headline as a half-point edge.
Getting this right on Kalshi requires knowing one thing about their API that is easy to get backwards: their order book returns two bid stacks, not bids and asks. A YES ask is a NO bid reflected. Read it naively and every spread inverts.
What confidence actually means
Confidence used to be one number, and the filters behind it were all yes/no: a pair either passed a check or was thrown out. But a pair that agrees on the entity, the strike and the date and differs only on a tie rule is probably the same instrument — just at lower confidence. Collapsing that into a verdict threw away the most useful thing we knew about it.
So it is now two scores, multiplied, and both break into parts you can see. Expand any row on the scanner and it lists them.
Price confidence asks how good the number is. Three parts: how tightly the venues agree, how much money stands behind the quotes, and how many independent prices there are — two venues scores low on purpose, because “consensus” between two opinions is thin.
Match quality asks a different question: are these two legs even the same instrument? Four parts, each reading checked and agrees, not checked, or checked and differs — the machine-verified resolution criteria, the resolution deadlines, the named settlement sources, and whether either venue has a live dispute open. Not checked sits deliberately well above differs and well below agrees: not having looked is not agreement, and it is not disagreement either.
Any part reading differs caps match quality, so a pair whose settlement demonstrably comes apart cannot be dressed up by scoring well everywhere else. It stays on the board — it is just ranked below every clean pair, and it says why.
A quoted spread also now moves the weighting itself. A book at 48/52 and a book at 20/80 are not equally informative about where the truth sits, and until recently we weighted them the same.
What this cannot tell you
- Two venues is a small sample. With only Kalshi and Polymarket listing a contract, "consensus" means two opinions. Treat a 1–2% gap accordingly.
- Fees and depth are included; the second leg is not. The edge is quoted net of each venue’s own taker fee, read from that venue’s published parameters rather than assumed — Kalshi’s fee multiplier varies by series, and Polymarket charges by category with part of the book exempt. Both fees follow the same curve, which peaks at 50¢, exactly where most edges live, so an edge smaller than the fee is not an opportunity and we would rather show you that. The headline edge is still quoted at the best ask, but every row now carries what it becomes at $200, $1,000 and $5,000 once you walk the book. What is still not included: the risk that the second leg of a two-venue trade does not fill at all while you hold the first.
- Prices refresh every few minutes, not continuously. Anything faster-moving than that is not a market this tool is useful for.
- Verification is automated. Resolution criteria are checked by model, not by a lawyer. It is far better than eyeballing titles and it is not infallible.
- A small edge count is the honest outcome. Each filter removes far more than it keeps. As of 2026-09-21 16:42 UTC the engine is showing 11 live cross-venue edges across 13,575 tracked markets. We would rather show you a handful that survive scrutiny than fifty that fall apart at execution.
Current engine state
13,575 markets tracked (9,968 Kalshi, 3,607 Polymarket) · 138,413 pairs checked, 5,178 verified identical (3.7%) · 11 live edges · last computed 2026-09-21 16:42 UTC
These numbers are read from the engine when this page is served, so they are in the HTML itself rather than filled in afterwards by a script — a reader without JavaScript, and a crawler that does not run it, sees the same figures you do. They are never typed into the page by hand, because a hardcoded accuracy claim becomes a false one the moment the data moves.
Found something wrong?
If a pair is matched that should not be, or an edge survives that clearly should not, we want to know. That is the failure mode we care most about. Tell us.