[{"data":1,"prerenderedAt":644},["ShallowReactive",2],{"search-sections":3,"blog-wc2026-match-fills-vs-events":188,"all-authors":592,"related-cat-/blog/wc2026-match-fills-vs-events":624,"surround-/blog/wc2026-match-fills-vs-events":632,"related-recent-/blog/wc2026-match-fills-vs-events":637},[4,12,18,23,28,33,38,44,49,54,59,64,69,74,79,85,90,95,100,105,111,116,121,126,131,136,141,146,151,156,163,168,173,178,183],{"category":5,"date":6,"id":7,"title":8,"titles":9,"content":10,"level":11},"research","2026-04-06","/blog/market-diversity-lockin","When Do Polymarket Markets Decide? Half Wait Until the Last 15 Minutes",[],"Across Polymarket markets, the number of market makers barely affects when a market reaches certainty. What matters is whether it's a sports bet or a crypto price target. TL;DR: 50% of Polymarket markets lock in within 15 minutes of resolution. The number of different liquidity providers explains ~1% of when markets decide. The type of market (sports, crypto, politics) explains 10x more. Half of all Polymarket binary markets reach certainty within 15 minutes of resolution. Out of 397,000 resolved markets since January 2025, the median time between the last uncertain trade and the final result is 14.6 minutes. We set out to test whether having more different liquidity providers — the people placing resting orders on each side — affects how quickly a market reaches its verdict. The hypothesis: too few providers means thin price discovery, too many means sustained disagreement, and somewhere in the middle should be optimal. The data has a different story. The number of liquidity providers barely matters. What does matter — 10x more — is what the market is about.",1,{"category":5,"date":6,"id":13,"title":14,"titles":15,"content":16,"level":17},"/blog/market-diversity-lockin#the-data","The Data",[8],"397,498 resolved Polymarket binary markets, each with at least 10 trades and at least one trade on the winning outcome below 90 cents. For each market, we measure lock-in timing: how long before resolution did the winning outcome's price last dip below 90 cents? A market that locked in 5 days before resolution \"decided\" early. One that locked in 2 minutes before resolution was uncertain until the end. Half of all markets lock in within the final 15 minutes. Another 20% take 1–6 hours — a second cluster of markets that \"know\" a few hours early. The remaining 30% spread across days to weeks, with 10% locking in more than 5 days before resolution.",2,{"category":5,"date":6,"id":19,"title":20,"titles":21,"content":22,"level":17},"/blog/market-diversity-lockin#more-providers-slightly-later-lock-in","More Providers, Slightly Later Lock-in",[8],"At first glance, markets with more liquidity providers lock in faster. But that's misleading — those markets also have more trades overall (correlation: 0.96), and more trades is the real driver. To separate the two, I held trading volume constant and asked: among markets with the same amount of trading, does having more different providers change anything? Yes, but barely. Markets with 8 unique providers lock in about 4 minutes before resolution. Markets with 500 unique providers lock in about 1.7 hours before resolution. The curve rises, but across the full range of provider diversity, the difference is small in absolute terms — and it explains only about 1% of the total variation.",{"category":5,"date":6,"id":24,"title":25,"titles":26,"content":27,"level":17},"/blog/market-diversity-lockin#what-actually-matters-the-type-of-market","What Actually Matters: The Type of Market",[8],"The type of market explains 10x more than the number of liquidity providers. Sports markets lock in at the final whistle. Crypto price targets lock in when the price hits. Political markets wait for official results. Adding market-type categories to the model explains 6.8% of additional variation beyond trade count alone. Provider diversity adds just 0.6%. The chart shows signed ΔR² — the additional variance explained by provider diversity, with the sign indicating direction. Positive means more providers predicts later lock-in; negative means faster. (Raw ΔR² is always positive; we sign it to show whether diversity delays or accelerates convergence.) In sports and crypto (87% of markets), more providers weakly predicts later lock-in — consistent with more disagreement. In politics, weather, tech, and entertainment, more providers weakly predicts faster lock-in. The pooled result is positive only because sports and crypto dominate the sample.",{"category":5,"date":6,"id":29,"title":30,"titles":31,"content":32,"level":17},"/blog/market-diversity-lockin#a-single-character-bug-that-changed-the-finding","A Single-Character Bug That Changed the Finding",[8],"The most useful discovery was not about liquidity at all. To classify markets by topic, I built a keyword matcher over market titles. The first version used  (space after \"vs\") to catch sports markets. Polymarket titles mostly use \"vs.\" (period). One character. This silently misclassified ~100,000 sports markets into the \"other\" bucket, inflating it from 5% to 35% of the sample and creating a fake signal — the misclassified sports markets mixed with genuinely unclassifiable markets produced an apparent provider-diversity effect of 2.7% within \"other\" that did not exist. If you do prediction market research that uses title-based topic classification — and most empirical PM work does — this is a reminder to check your classifier against sample titles. A one-character difference in a LIKE pattern changed the headline finding of a 400K-market analysis.",{"category":5,"date":6,"id":34,"title":35,"titles":36,"content":37,"level":17},"/blog/market-diversity-lockin#what-this-means","What This Means",[8],"For traders: counting liquidity providers won't help you predict when a market converges. Watch the market type and the event schedule instead. For researchers: when a market decides is a different question from whether it's right — and the answer depends almost entirely on the domain, not the market structure. For market designers: a sports market and a political market have fundamentally different convergence dynamics. One-size-fits-all parameters may be leaving efficiency on the table.",{"category":5,"date":39,"id":40,"title":41,"titles":42,"content":43,"level":11},"2026-04-14","/blog/sell-side-dominance","Why 87% of Polymarket Trades Are Sells",[],"Most of the SELL dominance is just crypto micro-markets taking over. The real story is what the makers are doing underneath. TL;DR: ~63% of the shift is crypto micro-markets taking over. The rest is newer, shorter markets replacing older ones. Three things are real: makers buying both sides for risk-free profit (96–100% consistency), a 20pp  gap between short and long-lived markets, and a two-week lifecycle every market goes through.",{"category":5,"date":39,"id":45,"title":46,"titles":47,"content":48,"level":17},"/blog/sell-side-dominance#the-top-makers-are-playing-a-different-game","The top makers are playing a different game",[41],"We looked at 600M+ Polymarket fills from October 2024 to March 2026. The headline: 87% of taker fills are sells. But the more interesting question is — who's on the other side? In crypto micro-markets (5-minute Up/Down bets that now make up 76% of all fills), 90%+ of trades are . Someone is buying all those tokens. We checked the top 10 makers: are they betting on a direction, or doing something else? MakerMarketsBought both sides%0x7164...53,92153,921100.0%0xd0D6...47,64246,67998.0%0x818F...32,24732,246100.0%0x63CE...31,99931,70599.1%0x6031...28,57828,578100.0%0x38e5...28,27328,14599.5%0xd44e...26,83925,90096.5%0xA45f...22,37822,378100.0%0x0489...20,69020,62199.7%0xB27B...14,41114,411100.0% They're not betting. In 96.5–100% of their markets, these makers are net buyers on both  and . They don't care which side wins.",{"category":5,"date":39,"id":50,"title":51,"titles":52,"content":53,"level":17},"/blog/sell-side-dominance#how-it-works-mint-and-sell","How it works: mint-and-sell",[41],"Polymarket uses a Conditional Token Framework (CTF) — traders can mint complete token sets from USDC and sell the side they don't want. This creates a two-sided flow where takers sell and makers collect: The maker posts resting bids on both outcomes. Different takers — each betting on a different side — sell their unwanted tokens into those bids. The maker ends up holding matched pairs (1  + 1 ) that are worth $1.00 at resolution regardless of the outcome. The spread between what they paid and $1.00 is pure profit. We can't directly observe the minting step — the data only records trades, not token creation. But the pattern fits: 90%+ , makers buying both sides at near-100% consistency, and a platform architecture that makes minting easy. This evidence covers June 2025 onward, when crypto micro-markets reached meaningful volume.",{"category":5,"date":39,"id":55,"title":56,"titles":57,"content":58,"level":17},"/blog/sell-side-dominance#where-does-the-87-come-from","Where does the 87% come from?",[41],"Now that we understand the mechanism — back to the headline number.  went from 59% to 87% in 18 months: The red line (SELL%) and the blue line (crypto micro-market share) track almost perfectly. December 2024 is the one exception:  surged when the US presidential election settled. Most of the trend is just market mix. We ran a shift-share decomposition — separating \"the mix of markets changed\" from \"people started trading differently\": What changedHow muchShare of totalMarket mix shifted (more crypto micro-markets)+7.6 pp29% rates rose within each market type+9.6 pp37%Both at once (crypto grew AND had high )+9.0 pp34% About 63% is mix-related. Here's what that looks like over time — the grey line is what  would have been if the market mix stayed frozen at January 2025 levels: The other 37%? It's 92% driven by traditional Yes/No markets, where  went from 59% to 71%. But that shift is itself explained by market turnover: each new batch of markets starts at a higher  rate, then decays toward 57–62%. No batch trends upward on its own. The reason newer batches start higher? They have shorter lifespans (median went from 37 days to 3.7 days). And shorter markets have more selling. It's mix effects all the way down.",{"category":5,"date":39,"id":60,"title":61,"titles":62,"content":63,"level":17},"/blog/sell-side-dominance#shorter-markets-more-selling","Shorter markets = more selling",[41],"Each dot is a market. Short-lived markets are heavily -dominated, long-lived ones much less so: LifespanCrypto microTraditionalOther\u003C1h92.2% (41K mkts)—92.9% (34)1–6h89.2% (73K)81.4% (179)85.3% (3K)6–24h87.7% (32K)79.7% (3.4K)86.1% (19K)1–7d88.0% (18K)76.1% (56K)83.3% (31K)7–30d77.1% (58)69.5% (25.5K)83.7% (3.3K)>30d—60.7% (20.3K)67.1% (157) For traditional markets,  drops from 81% to 61% — a 20pp gap. This isn't about token prices: in long-lived markets,  is flat at ~61% whether tokens trade at $0.20 or $0.80. It only shifts at the extremes (\u003C$0.10 and >$0.90). The likely reason: when a market resolves soon, makers can post aggressive bids without much risk of getting stuck holding tokens. The order book fills up with buy orders, and takers sell into them.",{"category":5,"date":39,"id":65,"title":66,"titles":67,"content":68,"level":17},"/blog/sell-side-dominance#every-market-goes-through-the-same-lifecycle","Every market goes through the same lifecycle",[41],"Here's the one finding that isn't explained by market mix. When you track  by how old a market is, long-lived traditional markets all follow the same curve: Week one: 66% . By week two: ~61%. Then it stays there for months. This holds regardless of how long the market ultimately lasts. What we're seeing is a shift from position-building (people minting and selling to establish their bets) to steady-state trading (people trading tokens that already exist). That transition takes about two weeks. This is the only finding in the whole analysis that reflects actual behavior change rather than market mix.",{"category":5,"date":39,"id":70,"title":71,"titles":72,"content":73,"level":17},"/blog/sell-side-dominance#what-to-watch-out-for","What to watch out for",[41],"We can't see the minting directly. We see the sells that result from it, and we see makers collecting both sides. But the minting step itself happens on-chain and isn't in the fills data.The maker data starts June 2025. Crypto micro-markets barely existed before that. The strategy is clear for the 10 months we can observe it.The 87% number is fragile. If crypto micro-markets disappeared tomorrow,  would drop back toward 70%. The underlying patterns would all still be there.Kalshi's 100%  is a data format thing, not a real behavioral difference. Their system just doesn't record sells.Fees are asymmetric. Same wallet pays 11x more when selling than buying (avg 0.56 vs 0.05 in traditional markets).  and  have different fee schedules regardless of who's trading.",{"category":5,"date":39,"id":75,"title":76,"titles":77,"content":78,"level":17},"/blog/sell-side-dominance#so-what","So what?",[41],"If you're comparing Polymarket to Kalshi,  doesn't mean the same thing on both platforms. Kalshi records 100%  — not because nobody sells, but because that's how their system works. The 87% vs 100% comparison is an architecture difference, not a behavior difference. If you're building models on Polymarket data, the 87% is not a stable number — it would drop to ~70% overnight if the crypto micro-markets went away. The lifespan gradient and the two-week lifecycle are the durable patterns. And if you're a maker: someone is already running the matched-pair strategy across 50,000+ markets with near-perfect consistency. The question isn't whether the strategy works — it's how thin the spread has gotten. Data: 600M+ Polymarket fills, Oct 2024 – Mar 2026. Dataset by Probalytics",{"category":5,"date":80,"id":81,"title":82,"titles":83,"content":84,"level":11},"2026-06-23","/blog/wc2026-fills-market-signals","What 200,000 Prediction Market Fills Reveal About the World Cup",[],"Analysis of Kalshi's KXMENWORLDCUP-26 outright winner markets reveals three patterns that end-of-day prices miss: hourly repricing, post-win spikes as artefacts, and France as the cleanest signal in the tournament. TL;DR: Analysis of Kalshi's KXMENWORLDCUP-26 winner markets across ten national teams — over 200,000 fills — reveals three patterns that end-of-day prices miss entirely: the USA's repricing from 9.2% to 27% is visible at hourly resolution before daily VWAP catches up; post-win spikes in illiquid markets inflate daily averages past the point of usefulness; and France's 63,000-fill sustained climb is the cleanest win-probability signal in the tournament. Data covers trades through June 22, 2026. VWAP computed at monthly granularity for the pre-tournament period and hourly granularity since June 11.",{"category":5,"date":80,"id":86,"title":87,"titles":88,"content":89,"level":17},"/blog/wc2026-fills-market-signals#the-usa-92-to-27-across-three-game-nights","The USA: 9.2% to 27% across three game nights",[82],"Before the tournament, Kalshi's markets gave the USA a 9.2% chance of winning — ninth out of ten teams tracked, in their own tournament. The move to 27% happened across three distinct sessions and is visible hour by hour. June 12–13 (first game): Game ended ~23:30 UTC June 12. Within one hour, 1,317 fills pushed price to 0.27. Sellers pushed back to 0.10–0.14 overnight — a contested result, not a blowout, and the fills show the disagreement.June 14 (second game): A second repricing ran to 0.55–0.62 across 394 fills, then settled as the result cleared.June 19 (third game): 3,374 fills in four hours — the highest-volume window for the USA market all tournament. Three games happened and each repriced the market. That is visible in the hourly VWAP before the daily number reflected it. The fills show the exact moments when the market changed its assessment and how much volume backed each move.",{"category":5,"date":80,"id":91,"title":92,"titles":93,"content":94,"level":17},"/blog/wc2026-fills-market-signals#post-win-spikes-what-argentinas-88-and-brazils-78-actually-mean","Post-win spikes: what Argentina's 88% and Brazil's 78% actually mean",[82],"At 00:00 UTC on June 13 — roughly 30 minutes after Argentina's first game — the outright market printed 0.884 on 74 fills. By 02:00 UTC it was back at 0.10. The daily VWAP for June 13 came out at 0.46. None of these figures represent Argentina's actual assessed win probability. The midnight spike is the structural result of buyers reacting before sellers arrive in an illiquid market. The 0.46 daily average is a mathematical artefact of the spike and the correction taken together. Argentina's settled level — once the market filled in — was 0.12–0.25, currently 0.252. Brazil followed the same pattern one night later: game ended ~23:00 UTC June 13, price reached 0.78 by 10:00 UTC June 14 on 26 fills, then fell to 0.11 by noon. Daily VWAPs of 0.328 and 0.318 for June 14–15 are artefacts of the same mechanism. This pattern is repeatable and predictable: every thin outright market shows it after a positive result. End-of-day prices capture the artefact. The fills show the correction.",{"category":5,"date":80,"id":96,"title":97,"titles":98,"content":99,"level":17},"/blog/wc2026-fills-market-signals#france-vs-spain-same-starting-price-opposite-trajectories","France vs Spain: same starting price, opposite trajectories",[82],"France entered May at 0.303, Spain at 0.263 — close enough to read as co-favourites. Twelve days in, the markets tell different stories. France's daily VWAP since tournament open: No single spike. 63,000 fills across 12 days. Consistent buying as results arrive. Spain peaked at 0.399 on June 16 — the day after a 0–0 draw with Cape Verde — then pulled back steadily to 0.270. Their current price is almost identical to the pre-tournament May VWAP of 0.263. The market is pricing Spain as a team meeting expectations. France at 35.5% across 63,000 fills is the most reliable win-probability estimate in this tournament so far.",{"category":5,"date":80,"id":101,"title":102,"titles":103,"content":104,"level":17},"/blog/wc2026-fills-market-signals#the-data","The data",[82],"Every fill is timestamped with price and size. VWAP is computable at any granularity — hourly resolution exposes spikes and corrections that daily resolution averages away. Matched against match results, the dataset identifies exactly when new information entered the market and how quickly it was absorbed. The three patterns above — the USA's session-by-session repricing, the Argentina and Brazil artefacts, the France/Spain divergence — are not visible from end-of-day price data. They require the fills. All data from the Probalytics ClickHouse database ( joined against ). Markets queried:  on Kalshi only. VWAP = sum(price × size) / sum(size) per period. Thin-market prints (under 50 fills/hour) noted where they drive daily figures.",{"category":5,"date":106,"id":107,"title":108,"titles":109,"content":110,"level":11},"2026-07-13","/blog/wc2026-match-fills-vs-events","Every Goal Leaves a Footprint",[],"Mapping Kalshi's minute-level fills against the Germany vs Ivory Coast match timeline shows that each event type — disallowed goals, substitutions, equalizers, and the final whistle — leaves a different fingerprint in the data. Germany beat Ivory Coast 2–1 on June 20 in Toronto. Kalshi's KXWCGAME markets for the match generated 228,111 fills in their busiest hour (21:00–22:00 UTC — second half through resolution), one of the highest single-game totals of the tournament. When you map those fills against the match timeline, you stop seeing volume spikes and start seeing event types. Each one has a different shape.",{"category":5,"date":106,"id":112,"title":113,"titles":114,"content":115,"level":17},"/blog/wc2026-match-fills-vs-events#disallowed-goals-have-two-fingerprints","Disallowed goals have two fingerprints",[108],"Pavlović put a header in the net at 23'. The market treated it as a goal immediately: fills jumped from ~1,000/min to 4,454/min and the Germany win price moved from 0.61 to 0.73 in one minute. Then VAR began. The price bled back over the next several minutes and settled back around ~0.61 — essentially back to where it was right before the header, not below it. The same shape repeated at 39' when Havertz had a goal ruled out — fills spiked to 4,456/min, matching Pavlović's in size. But the price barely moved this time: 0.38 → 0.40 → 0.38. Germany was already down 1–0 by then, and the market had already priced in a lot of the team's attacking threat; a second disallowed header didn't move the needle the way the first one did. Same fill-volume spike both times. Very different price signature. Trading volume alone doesn't tell you how much the market's beliefs actually changed — you have to look at both.",{"category":5,"date":106,"id":117,"title":118,"titles":119,"content":120,"level":17},"/blog/wc2026-match-fills-vs-events#goals-rotate-the-market-not-just-one-contract","Goals rotate the market, not just one contract",[108],"Kessié scored at 30'. CIV 1–0. Total fills went from 773/min to 3,646/min to 7,451/min across three minutes. The total volume jump is the obvious story. The split is more interesting: CIV fills surged ~18× from baseline (120/min → 2,133/min), Germany fills surged too — buyers treating the price drop as a re-entry point — and the Tie contract filled 1,331 times that minute, up from ~115. All three contracts moving at once, for different reasons.",{"category":5,"date":106,"id":122,"title":123,"titles":124,"content":125,"level":17},"/blog/wc2026-match-fills-vs-events#half-time-is-a-mild-re-pricing-window","Half-time is a mild re-pricing window",[108],"Fills during the break ran ~1,600–2,300/min, only modestly above the pre-match baseline of ~1,700–1,800/min — not the outsized jump it might look like from headline volume alone. Germany's implied win probability at half-time was ~31–33%, down from ~67% at kickoff (not 57%, which doesn't appear anywhere in the pre-match data — GER traded in a tight 0.65–0.67 band for the full 30 minutes before kickoff). Traders were repositioning and hedging against a comeback, but the pace of trading during the break itself was closer to normal than the \"double baseline\" story suggests.",{"category":5,"date":106,"id":127,"title":128,"titles":129,"content":130,"level":17},"/blog/wc2026-match-fills-vs-events#substitutions-the-market-kept-fading-germany-not-backing-them","Substitutions: the market kept fading Germany, not backing them",[108],"Germany's triple substitution at 60' — three attacking players on while losing 1–0 — pushed fills to ~2,500/min. But the price move ran opposite to what you'd expect from an \"urgency\" read: Germany's win price kept falling through the substitution window, from 0.26 down to 0.18. It was Ivory Coast's contract that climbed, from 0.44 up to 0.53, as the market priced CIV's control of the match increasing rather than rewarding Germany's tactical aggression. Fresh legs didn't buy Germany's price any relief — CIV kept gaining until the equalizer.",{"category":5,"date":106,"id":132,"title":133,"titles":134,"content":135,"level":17},"/blog/wc2026-match-fills-vs-events#the-tie-contract","The Tie contract",[108],"When Undav equalized at 68' (21:31 UTC), fills spiked to 8,290/min. What stands out in the data: Tie fills (2,995) exceeded both Germany (2,755) and CIV (2,540) — the only minute in the entire match where Tie was the dominant contract. With ~22 minutes left at 1–1, a draw was genuinely the most likely single outcome. The market knew that. Most people watching a chart see a volume spike when a goal goes in. The rotation toward Tie is what's actually worth looking at.",{"category":5,"date":106,"id":137,"title":138,"titles":139,"content":140,"level":17},"/blog/wc2026-match-fills-vs-events#during-stoppage-time-the-market-was-pricing-a-draw-not-a-germany-win","During stoppage time the market was pricing a draw, not a Germany win",[108],"From 21:49 onwards, fills ran ~3,800–5,800/min with nothing happening on the pitch — time-pressure trading, not event trading. But the direction matters: Germany's price kept falling, from 0.18 down to 0.12 by 21:55, while the Tie contract climbed from 0.72 to 0.82. With the score still 1–1 and the clock running out, the market was getting more confident in a draw, not in a Germany win. There was no visible anticipation of the winner in the fill data — the market was leaning the other way right up until the goal.",{"category":5,"date":106,"id":142,"title":143,"titles":144,"content":145,"level":17},"/blog/wc2026-match-fills-vs-events#the-final-whistle-is-its-own-category","The final whistle is its own category",[108],"Undav scored the winner at 90+4' (21:56 UTC). 20,415 fills in one minute — roughly 2.5–4× any other minute in the match, and a level of repricing violence nothing else in a match can produce. Germany's price snapped from 0.12 to 0.76 in that single minute, then kept climbing — 0.96 by 21:57, 0.99 by 22:00. Tie fills: 7,073. CIV fills: 1,797. Within three minutes, both losing contracts had collapsed to near-zero volume. The whistle doesn't shift probabilities gradually — it ends them. Every open position closes at once with nothing left to wait on. Unlike the stoppage-time drift, there was no lead-up: the market was pricing a draw right up to the kick, then repriced almost the entire outcome in sixty seconds.",{"category":5,"date":106,"id":147,"title":148,"titles":149,"content":150,"level":17},"/blog/wc2026-match-fills-vs-events#match-timeline","Match timeline",[108],"EventUTCFills/minGermany priceSignalKickoff20:001,8050.670BaselineFofana save20:101,2670.654Modest uptickPavlović disallowed20:204,4540.61 → 0.73 → ~0.61Spike → VAR bleed → settle back near startKessié goal — CIV 1–020:29–20:303,646 → 7,4510.43 → 0.40~18× CIV fill surgeHavertz disallowed20:384,4560.38 → 0.40 → 0.38Same volume spike, far weaker price moveHalf-time20:47~1,9000.33Mild re-pricing, close to baseline paceTriple sub (GER)21:172,5010.20 (falling)CIV price rising 0.44→0.53, not GERUndav equalizer — 1–121:318,2900.40Tie fills (2,995) > GER (2,755) > CIV (2,540)Stoppage time21:49–21:55~3,800–5,8000.18 → 0.12Tie climbs 0.72→0.82; GER fading, not risingUndav winner + whistle21:5620,4150.12 → 0.76 → 0.99Sudden repricing, no anticipation",{"category":5,"date":106,"id":152,"title":153,"titles":154,"content":155,"level":17},"/blog/wc2026-match-fills-vs-events#one-thing-that-keeps-standing-out","One thing that keeps standing out",[108],"The Tie fills at 68' are a small detail in an ~8,300-fill minute. You only catch it if you're watching the split rather than the total. Most coverage of prediction market volume looks at the spike. The structure under the spike — and which contract is actually moving — is where it gets interesting.",{"category":157,"date":158,"id":159,"title":160,"titles":161,"content":162,"level":11},"market-analysis","2026-04-09","/blog/what-trades-dont-tell-you-orderbook","What Trades Don't Tell You But the Orderbook Will",[],"Polymarket fills are on-chain and complete. The orderbook isn't. If you're modeling slippage, market impact, or execution quality, you need the book — and there's no historical record of it unless someone captured it. TL;DR: Polymarket fills are on-chain and complete. The orderbook isn't — it lives on Polymarket's matching engine and there's no historical record of it anywhere unless someone captured it. If you're modeling execution quality, slippage, or market impact, you need the book, not just the fills. If you've done any serious work with Polymarket data, you've probably used the fills. They're on-chain, permanent, and complete — every matched trade is recorded on Polygon via the CTF and NegRisk exchange contracts. You can reconstruct the full trade history of any market going back to inception. What you can't reconstruct is what the book looked like between trades.",{"category":157,"date":158,"id":164,"title":165,"titles":166,"content":167,"level":17},"/blog/what-trades-dont-tell-you-orderbook#what-fills-dont-tell-you","What fills don't tell you",[160],"A fill tells you that at time T, X shares of outcome Y traded at price P. That's useful for a lot of things: price series, volume analysis, market convergence (we wrote about this here). It doesn't tell you what was sitting in the order book at T-1ms. It doesn't tell you what the best bid was before that fill came in, how deep the book was at each price level, or what the spread looked like. If the fill moved the price by 3 cents, you have no idea whether that was a 100-share book or a 10,000-share book. For researchers studying price discovery, this probably doesn't matter much. For anyone modeling execution — slippage, market impact, realistic fill simulation — it matters a lot.",{"category":157,"date":158,"id":169,"title":170,"titles":171,"content":172,"level":17},"/blog/what-trades-dont-tell-you-orderbook#why-theres-no-historical-orderbook","Why there's no historical orderbook",[160],"Polymarket's matching engine runs off-chain. The orderbook state at any moment exists on Polymarket's servers, not on the blockchain. Only the result of a match — the fill — gets settled on-chain. This means there is no canonical historical record of the orderbook. Not on Polymarket's API (no historical endpoint exists). Not on the blockchain. If no one captured it at the time, it's gone. We've been capturing continuously since November 2025. Full-resolution data is available from March 2026.",{"category":157,"date":158,"id":174,"title":175,"titles":176,"content":177,"level":17},"/blog/what-trades-dont-tell-you-orderbook#what-continuous-capture-gives-you","What continuous capture gives you",[160],"We snapshot the full orderbook across active Polymarket markets continuously and store every state. For any market, at any moment in its lifetime, you can reconstruct the full bid/ask book — every price level, every size. We interpolate to 1ms resolution using last-observation-carried-forward. On high-volume markets, the raw feed can hit 1,000 orderbook updates per second — storing and querying that at scale is non-trivial. The data ships as Parquet: , , , , each level as .",{"category":157,"date":158,"id":179,"title":180,"titles":181,"content":182,"level":17},"/blog/what-trades-dont-tell-you-orderbook#what-this-is-actually-useful-for","What this is actually useful for",[160],"Slippage modeling: Given a position size, what would your actual fill price have been? The mid-price from fills gives you a number. The orderbook gives you the right number. Market impact estimation: How much does a trade of size S move the book at different probability levels? This is only answerable if you know the book depth at the moment of entry — not after. Execution strategy research: Does it matter whether you're a maker or taker in the final hour of a contested market? With orderbook history, you can test it. Without it, you're guessing. These questions are answerable with orderbook history. They're not answerable from fills alone.",{"category":157,"date":158,"id":184,"title":185,"titles":186,"content":187,"level":17},"/blog/what-trades-dont-tell-you-orderbook#get-the-data","Get the data",[160],"Orderbook history is available on the Orderbook plan. If you're working on execution research or building a model that needs realistic fill simulation, reach out at support@probalytics.io.",{"id":189,"title":108,"author":190,"body":191,"category":5,"date":106,"description":576,"draft":577,"extension":578,"featured":577,"image":579,"meta":580,"navigation":581,"path":107,"seo":582,"series":583,"seriesOrder":583,"stem":584,"tags":585,"__hash__":591},"blog/blog/wc2026-match-fills-vs-events.md","probalytics-team",{"type":192,"value":193,"toc":563},"minimark",[194,203,206,210,225,236,239,242,257,260,275,278,293,296,307,310,313,336,339,350,353,355,358,556,558,561],[195,196,197,198,202],"p",{},"Germany beat Ivory Coast 2–1 on June 20 in Toronto. Kalshi's KXWCGAME markets for the match generated ",[199,200,201],"strong",{},"228,111 fills in their busiest hour"," (21:00–22:00 UTC — second half through resolution), one of the highest single-game totals of the tournament. When you map those fills against the match timeline, you stop seeing volume spikes and start seeing event types. Each one has a different shape.",[204,205],"hr",{},[207,208,113],"h2",{"id":209},"disallowed-goals-have-two-fingerprints",[195,211,212,213,216,217,220,221,224],{},"Pavlović put a header in the net at 23'. The market treated it as a goal immediately: fills jumped from ~1,000/min to ",[199,214,215],{},"4,454/min"," and the Germany win price moved from 0.61 to ",[199,218,219],{},"0.73"," in one minute. Then VAR began. The price bled back over the next several minutes and settled back around ",[199,222,223],{},"~0.61"," — essentially back to where it was right before the header, not below it.",[195,226,227,228,231,232,235],{},"The same shape repeated at 39' when Havertz had a goal ruled out — fills spiked to ",[199,229,230],{},"4,456/min",", matching Pavlović's in size. But the price barely moved this time: ",[199,233,234],{},"0.38 → 0.40 → 0.38",". Germany was already down 1–0 by then, and the market had already priced in a lot of the team's attacking threat; a second disallowed header didn't move the needle the way the first one did.",[195,237,238],{},"Same fill-volume spike both times. Very different price signature. Trading volume alone doesn't tell you how much the market's beliefs actually changed — you have to look at both.",[207,240,118],{"id":241},"goals-rotate-the-market-not-just-one-contract",[195,243,244,245,248,249,252,253,256],{},"Kessié scored at 30'. CIV 1–0. Total fills went from ",[199,246,247],{},"773/min to 3,646/min to 7,451/min"," across three minutes. The total volume jump is the obvious story. The split is more interesting: CIV fills surged ",[199,250,251],{},"~18× from baseline"," (120/min → 2,133/min), Germany fills surged too — buyers treating the price drop as a re-entry point — and the Tie contract filled ",[199,254,255],{},"1,331 times"," that minute, up from ~115. All three contracts moving at once, for different reasons.",[207,258,123],{"id":259},"half-time-is-a-mild-re-pricing-window",[195,261,262,263,266,267,270,271,274],{},"Fills during the break ran ",[199,264,265],{},"~1,600–2,300/min",", only modestly above the pre-match baseline of ~1,700–1,800/min — not the outsized jump it might look like from headline volume alone. Germany's implied win probability at half-time was ",[199,268,269],{},"~31–33%",", down from ",[199,272,273],{},"~67%"," at kickoff (not 57%, which doesn't appear anywhere in the pre-match data — GER traded in a tight 0.65–0.67 band for the full 30 minutes before kickoff). Traders were repositioning and hedging against a comeback, but the pace of trading during the break itself was closer to normal than the \"double baseline\" story suggests.",[207,276,128],{"id":277},"substitutions-the-market-kept-fading-germany-not-backing-them",[195,279,280,281,284,285,288,289,292],{},"Germany's triple substitution at 60' — three attacking players on while losing 1–0 — pushed fills to ",[199,282,283],{},"~2,500/min",". But the price move ran opposite to what you'd expect from an \"urgency\" read: Germany's win price kept falling through the substitution window, from ",[199,286,287],{},"0.26 down to 0.18",". It was Ivory Coast's contract that climbed, from ",[199,290,291],{},"0.44 up to 0.53",", as the market priced CIV's control of the match increasing rather than rewarding Germany's tactical aggression. Fresh legs didn't buy Germany's price any relief — CIV kept gaining until the equalizer.",[207,294,133],{"id":295},"the-tie-contract",[195,297,298,299,302,303,306],{},"When Undav equalized at 68' (21:31 UTC), fills spiked to ",[199,300,301],{},"8,290/min",". What stands out in the data: ",[199,304,305],{},"Tie fills (2,995) exceeded both Germany (2,755) and CIV (2,540)"," — the only minute in the entire match where Tie was the dominant contract.",[195,308,309],{},"With ~22 minutes left at 1–1, a draw was genuinely the most likely single outcome. The market knew that. Most people watching a chart see a volume spike when a goal goes in. The rotation toward Tie is what's actually worth looking at.",[207,311,138],{"id":312},"during-stoppage-time-the-market-was-pricing-a-draw-not-a-germany-win",[195,314,315,316,319,320,323,324,327,328,331,332,335],{},"From 21:49 onwards, fills ran ",[199,317,318],{},"~3,800–5,800/min"," with nothing happening on the pitch — time-pressure trading, not event trading. But the direction matters: Germany's price kept ",[199,321,322],{},"falling",", from 0.18 down to ",[199,325,326],{},"0.12"," by 21:55, while the ",[199,329,330],{},"Tie"," contract climbed from ",[199,333,334],{},"0.72 to 0.82",". With the score still 1–1 and the clock running out, the market was getting more confident in a draw, not in a Germany win. There was no visible anticipation of the winner in the fill data — the market was leaning the other way right up until the goal.",[207,337,143],{"id":338},"the-final-whistle-is-its-own-category",[195,340,341,342,345,346,349],{},"Undav scored the winner at 90+4' (21:56 UTC). ",[199,343,344],{},"20,415 fills in one minute"," — roughly 2.5–4× any other minute in the match, and a level of repricing violence nothing else in a match can produce. Germany's price snapped from 0.12 to ",[199,347,348],{},"0.76"," in that single minute, then kept climbing — 0.96 by 21:57, 0.99 by 22:00. Tie fills: 7,073. CIV fills: 1,797. Within three minutes, both losing contracts had collapsed to near-zero volume.",[195,351,352],{},"The whistle doesn't shift probabilities gradually — it ends them. Every open position closes at once with nothing left to wait on. Unlike the stoppage-time drift, there was no lead-up: the market was pricing a draw right up to the kick, then repriced almost the entire outcome in sixty seconds.",[204,354],{},[207,356,148],{"id":357},"match-timeline",[359,360,361,383],"table",{},[362,363,364],"thead",{},[365,366,367,371,374,377,380],"tr",{},[368,369,370],"th",{},"Event",[368,372,373],{},"UTC",[368,375,376],{},"Fills/min",[368,378,379],{},"Germany price",[368,381,382],{},"Signal",[384,385,386,404,421,438,455,471,488,505,522,539],"tbody",{},[365,387,388,392,395,398,401],{},[389,390,391],"td",{},"Kickoff",[389,393,394],{},"20:00",[389,396,397],{},"1,805",[389,399,400],{},"0.670",[389,402,403],{},"Baseline",[365,405,406,409,412,415,418],{},[389,407,408],{},"Fofana save",[389,410,411],{},"20:10",[389,413,414],{},"1,267",[389,416,417],{},"0.654",[389,419,420],{},"Modest uptick",[365,422,423,426,429,432,435],{},[389,424,425],{},"Pavlović disallowed",[389,427,428],{},"20:20",[389,430,431],{},"4,454",[389,433,434],{},"0.61 → 0.73 → ~0.61",[389,436,437],{},"Spike → VAR bleed → settle back near start",[365,439,440,443,446,449,452],{},[389,441,442],{},"Kessié goal — CIV 1–0",[389,444,445],{},"20:29–20:30",[389,447,448],{},"3,646 → 7,451",[389,450,451],{},"0.43 → 0.40",[389,453,454],{},"~18× CIV fill surge",[365,456,457,460,463,466,468],{},[389,458,459],{},"Havertz disallowed",[389,461,462],{},"20:38",[389,464,465],{},"4,456",[389,467,234],{},[389,469,470],{},"Same volume spike, far weaker price move",[365,472,473,476,479,482,485],{},[389,474,475],{},"Half-time",[389,477,478],{},"20:47",[389,480,481],{},"~1,900",[389,483,484],{},"0.33",[389,486,487],{},"Mild re-pricing, close to baseline pace",[365,489,490,493,496,499,502],{},[389,491,492],{},"Triple sub (GER)",[389,494,495],{},"21:17",[389,497,498],{},"2,501",[389,500,501],{},"0.20 (falling)",[389,503,504],{},"CIV price rising 0.44→0.53, not GER",[365,506,507,510,513,516,519],{},[389,508,509],{},"Undav equalizer — 1–1",[389,511,512],{},"21:31",[389,514,515],{},"8,290",[389,517,518],{},"0.40",[389,520,521],{},"Tie fills (2,995) > GER (2,755) > CIV (2,540)",[365,523,524,527,530,533,536],{},[389,525,526],{},"Stoppage time",[389,528,529],{},"21:49–21:55",[389,531,532],{},"~3,800–5,800",[389,534,535],{},"0.18 → 0.12",[389,537,538],{},"Tie climbs 0.72→0.82; GER fading, not rising",[365,540,541,544,547,550,553],{},[389,542,543],{},"Undav winner + whistle",[389,545,546],{},"21:56",[389,548,549],{},"20,415",[389,551,552],{},"0.12 → 0.76 → 0.99",[389,554,555],{},"Sudden repricing, no anticipation",[204,557],{},[207,559,153],{"id":560},"one-thing-that-keeps-standing-out",[195,562,155],{},{"title":564,"searchDepth":565,"depth":565,"links":566},"",3,[567,568,569,570,571,572,573,574,575],{"id":209,"depth":17,"text":113},{"id":241,"depth":17,"text":118},{"id":259,"depth":17,"text":123},{"id":277,"depth":17,"text":128},{"id":295,"depth":17,"text":133},{"id":312,"depth":17,"text":138},{"id":338,"depth":17,"text":143},{"id":357,"depth":17,"text":148},{"id":560,"depth":17,"text":153},"Mapping Kalshi's minute-level fills against the Germany vs Ivory Coast match timeline shows that each event type — disallowed goals, substitutions, equalizers, and the final whistle — leaves a different fingerprint in the data.",false,"md","/images/blog/wc2026-match-fills-vs-events/hero-event-fingerprints.jpg",{},true,{"title":108,"description":576},null,"blog/wc2026-match-fills-vs-events",[586,587,588,589,590],"prediction-markets","kalshi","world-cup","data-analysis","trading-behavior","kuyv8LhKofqxWuV5Pclj6DHWZbofC7HzIz6hrW4yNh4",[593,609],{"id":594,"avatar":595,"bio":596,"extension":578,"github":597,"icon":598,"linkedin":583,"meta":599,"name":604,"role":605,"stem":606,"twitter":607,"website":583,"__hash__":608},"authors/authors/arsenii-petrovich.md","/images/authors/arsenii-petrovich.jpg","Building Probalytics from the ground up. Focused on data pipelines, quantitative analysis, and making prediction market data accessible.","Singulariteer","ph:user-circle-duotone",{"body":600},{"type":192,"value":601,"toc":602},[],{"title":564,"searchDepth":565,"depth":565,"links":603},[],"Arsenii Petrovich","Founder & Lead Engineer","authors/arsenii-petrovich","probalytics_io","sorFeFDBF9341JmeyEJgl_P9b0xz5bRWmYS2g5sTYDQ",{"id":610,"avatar":611,"bio":612,"extension":578,"github":613,"icon":614,"linkedin":583,"meta":615,"name":620,"role":621,"stem":622,"twitter":607,"website":583,"__hash__":623},"authors/authors/probalytics-team.md","/images/authors/probalytics-team.svg","Building the data infrastructure for prediction markets. We cover quantitative methods, market analysis, and platform insights.","Probalytics","ph:users-three-duotone",{"body":616},{"type":192,"value":617,"toc":618},[],{"title":564,"searchDepth":565,"depth":565,"links":619},[],"Probalytics Team","Research & Analytics","authors/probalytics-team","-8l8v6Nan6hkqGsqOSmTe71zbEr9sxncNxrJ2GlYtqE",[625,626,628,630],{"title":108,"path":107,"description":576,"date":106,"category":5},{"title":82,"path":81,"description":627,"date":80,"category":5},"Analysis of Kalshi's KXMENWORLDCUP-26 outright winner markets reveals three patterns that end-of-day prices miss: hourly repricing, post-win spikes as artefacts, and France as the cleanest signal in the tournament.",{"title":41,"path":40,"description":629,"date":39,"category":5},"Most of the SELL dominance is just crypto micro-markets taking over. The real story is what the makers are doing underneath.",{"title":8,"path":7,"description":631,"date":6,"category":5},"Across Polymarket markets, the number of market makers barely affects when a market reaches certainty. What matters is whether it's a sports bet or a crypto price target.",[633,635],{"title":82,"path":81,"stem":634,"children":-1},"blog/wc2026-fills-market-signals",{"title":160,"path":159,"stem":636,"children":-1},"blog/what-trades-dont-tell-you-orderbook",[638,639,640,641,643],{"title":108,"path":107,"description":576,"date":106,"category":5},{"title":82,"path":81,"description":627,"date":80,"category":5},{"title":41,"path":40,"description":629,"date":39,"category":5},{"title":160,"path":159,"description":642,"date":158,"category":157},"Polymarket fills are on-chain and complete. The orderbook isn't. If you're modeling slippage, market impact, or execution quality, you need the book — and there's no historical record of it unless someone captured it.",{"title":8,"path":7,"description":631,"date":6,"category":5},1788114122757]