Stale Quotes and Why Timing Ruins Comparisons
The largest source of phantom cross-market opportunity is not disagreement. It is one price being older than the other. How to measure and exclude it.

If you build a cross-venue comparison and find a lot of large gaps, the explanation is almost never that the market is inefficient. It is that some of your prices are old.
Three kinds of staleness
Observation staleness. Your system fetched one venue three minutes ago and the other thirty seconds ago. The difference between them includes two and a half minutes of market movement. This is your fault and it is fixable.
Quote staleness. The venue's own quotes have not been updated because no market maker has requoted. The bid and offer are live in the sense that you could trade against them, and dead in the sense that nobody has thought about them since the news broke.
Trade staleness. The last trade is from yesterday. This one is obvious once stated and still catches people constantly, because last trade is the easiest field to fetch. Mid price versus last trade.
Measuring it
Every stored observation needs three timestamps, not one.
When you fetched it. Trivially available and the least useful.
When the venue says the value was current. The authoritative one. Use this for every comparison.
When the market last traded. Your staleness proxy. A market whose last trade is twenty hours old has a quote nobody has recently defended.
With all three you can compute, for any pair, the difference between the two venue timestamps and the age of each side. Without them you are guessing.
Filtering on it
Simple rules that remove most phantom findings:
Reject pairs whose venue timestamps differ by more than a small window. A minute is generous for anything you would act on.
Reject sides whose last trade is older than a threshold. Hours, not days.
Reject one-sided books. No offer means no mid, and any number you compute is invented. Reading an order book.
Flag rather than delete. Keep the excluded rows with a reason attached. A table that silently drops things is hard to trust and impossible to debug.

Why the biggest gaps are the stalest
There is a mechanical reason the two go together. A market that trades constantly cannot be far from where the last participant thought it should be. A market that has not traded in a day can be arbitrarily far from where it should be, because nothing has forced it back.
So if you sort a gap table by size, you are sorting approximately by staleness. The top of that list is not the opportunity set; it is the list of markets nobody is watching. Gap size versus liquidity shows the same relationship from the liquidity side.
Around scheduled events
The worst case. A figure is published at a known second. One venue reprices immediately; the other takes longer. For a short window there is a genuine, large, real difference between two live prices.
It is real and it is not yours. By the time a polling architecture has fetched, stored, graded and rendered it, it is over. Anyone trading that window is running infrastructure built for it, and a dashboard refreshed every few minutes is not competing in that race — nor is it trying to. Macro release markets.
What this site does
It records venue timestamps, tracks the age of each side, excludes pairs whose observations are too far apart, and shows the data age on the page so you can judge it yourself.
That is also why the gaps table is shorter than a naive comparison would produce. Most of what a naive comparison finds is clocks. How to read a gap table, and the methodology for the specifics.
Next
Matching markets across venues — the step before any of this can happen.
Educational content only. Nothing here is financial advice, a solicitation, or an offer to trade. Prediction markets can move against you and a position can lose its entire value. Where this guide describes a difference between venues it describes a theoretical cross-market edge in observed prices, which is not a profit: fees, spreads, capital lockup, transfer time and differing settlement rules all come out of it first.



