The Edge That Isn't
Polymarket reprices a World Cup goal about 600 milliseconds before Kalshi does. The gap is real, statistically clean, and worth approximately nothing. Here is what tick data says about why.
There is a small industry selling software to arbitrage Kalshi against Polymarket. The pitch writes itself: two venues, the same contract, visibly different prices. Buy the cheap one, sell the rich one, collect the difference. Bot guides, live "opportunities right now" feeds, the works.
I spent six weeks recording both venues' order books, millisecond by millisecond, through all 104 matches of the 2026 World Cup. I found the lead those products are premised on. It is bigger and cleaner than I expected.
It is also not tradeable, and the reason it is not tradeable is more interesting than the lead itself.
Goals are a good natural experiment
Most cross-venue price discovery work uses elections. Elections are a bad laboratory: the news arrives unevenly, insiders may know first, and "when did the information arrive" is a judgment call.
Goals are better. They happen at a moment nobody controls, they repeat hundreds of times in a fixed window, and both venues learn about them the same way — someone watching the same match. If you want to know which venue converts public information into price faster, a goal is close to an ideal shock.
So: for every match I captured both venues' full order books to a single append-only tape, stamped by one wall clock. That last detail matters more than it sounds. Two machines logging two venues would introduce clock skew of exactly the magnitude I was trying to measure, and I would never have known.
The lead is real
Two independent methods agree. A first-mover count says Polymarket reprices first on 72% of events. A formal Hasbrouck / Gonzalo-Granger decomposition — the standard way of attributing price discovery when two venues quote one asset — puts Polymarket's share of the permanent price innovation at 81%.
The obvious objection is that Polymarket's data simply reaches my logger sooner. A constant delivery offset would manufacture exactly this result. But a constant offset is constant: it would bias quiet periods and goal windows identically. Measured share inside goal windows is 86%; in calm play it falls to 53%, essentially a coin flip. A fixed latency offset cannot produce a lead that switches on only when news arrives.
Then the part where I almost fooled myself
A 600ms head start on a repeated, public shock should be money. So I built the ledger: at the moment Polymarket reprices, what is the stale quote still showing on Kalshi, and what would a follower net by taking it?
The first answer was +10.2 cents on 100% of goals.
A number that good is not a discovery. It is a bug you have not found yet.
It was a bug. My ledger credited the follower with the full price move while quietly assuming the quote it was lifting would still be there. At the instant of a goal, it is not. I had measured the size of an opportunity without checking whether anyone could take it.
The book vanishes exactly when you need it
Gate the same ledger on depth actually resting in the book and the picture inverts:
| At the goal | What happens |
|---|---|
| Spread, Polymarket | ~8× wider |
| Spread, Kalshi | ~2× wider |
| Best-price depth | ~0.5% of normal |
| Time to refill | 3–4 seconds |
| Median match, harvestable goals | none |
The 12-cent gross gap is genuinely there. What is not there is anything to trade against. Best-price depth collapses to roughly half a percent of its pre-goal level, and it stays collapsed for the three or four seconds during which the edge exists. The median match yields no harvestable goal at all.
I put an interval on that, because the whole piece turns on it. Bootstrapping across the 66 ledger matches, the 95% interval on the median harvestable share is [0%, 0%] — degenerate, because 45 of those 66 matches contain no harvestable goal whatsoever, so 99.9% of resamples return exactly zero. Harvestable goals do exist: about 9% of goals, goal-weighted, clustered in a minority of matches a follower cannot identify in advance.
And both ways of interacting with the market lose. A taker finds no size at the stale price. A maker is on the wrong side by construction: resting a quote into a goal is precisely the fill you do not want. The 8× spread blowout is the other market makers correctly running away.
This is adverse selection, and you can watch it happen
What the tape records is a textbook mechanism at millisecond resolution. Market makers quote a spread to compensate for the risk of trading against someone better informed. When a goal fires, everyone with a screen is briefly better informed than everyone with a resting order. The makers' correct response is to withdraw, and they do, within milliseconds.
The lead and its unharvestability are not two findings. They are the same finding. Polymarket leads because its quotes update first; the edge is unavailable because updating first means pulling the quote a follower would have hit.
Why publish a negative result
Because the alternative is worse. I pre-registered eleven falsifiable predictions before kickoff, in a public git commit, and graded them in public when the tournament ended: six passed, two failed, three were inconclusive. One of the failures was precisely this — I predicted the goal-overreaction fade would net positive, and it returned −0.285pp per trade.
A pre-registration you only report when it flatters you is not a pre-registration. And in this specific case the negative result is the more useful one, because there is an active market in tools premised on the opposite being true.
Finding an edge is ordinary. Correctly measuring how little of it survives contact with the book is the job.
The direct cross-venue goal arbitrage does not survive the cost of immediacy. I am careful to claim only that: I did not test dedicated colocation on the lagging venue, and I did not test correlated contracts — advancement, totals — that reprice off the same goal into deeper books. Those may well be different. What I can say is that the trade the bots advertise, taken as advertised, is not there.
What I would tell a desk
Three things transfer beyond soccer.
De-vig before you call anything a gap. The visible cross-venue spread on the title market is mostly house margin. Strip each venue's overround and the two crowds agree to within about a fifth of a percentage point. The durable difference between them is cost, not belief — Kalshi's margin ran roughly 2.8× Polymarket's.
Cross the real bid-ask, then check the depth behind it. A price you cannot get filled at is not a price. Every apparent edge in this study died at that second step, not the first.
Read depth at the event, not on average. Average liquidity was healthy all tournament. Liquidity at the moment the signal fires was 0.5% of normal. Any measurement averaged over a match would have missed the entire mechanism.
The full study, the pre-registration, the grading, and the code are public. So is the bug I nearly shipped.