[{"data":1,"prerenderedAt":692},["ShallowReactive",2],{"search-sections":3,"legal-privacy":70},[4,12,18,23,28,33,38,45,50,55,60,65],{"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":39,"date":40,"id":41,"title":42,"titles":43,"content":44,"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":39,"date":40,"id":46,"title":47,"titles":48,"content":49,"level":17},"/blog/what-trades-dont-tell-you-orderbook#what-fills-dont-tell-you","What fills don't tell you",[42],"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":39,"date":40,"id":51,"title":52,"titles":53,"content":54,"level":17},"/blog/what-trades-dont-tell-you-orderbook#why-theres-no-historical-orderbook","Why there's no historical orderbook",[42],"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":39,"date":40,"id":56,"title":57,"titles":58,"content":59,"level":17},"/blog/what-trades-dont-tell-you-orderbook#what-continuous-capture-gives-you","What continuous capture gives you",[42],"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":39,"date":40,"id":61,"title":62,"titles":63,"content":64,"level":17},"/blog/what-trades-dont-tell-you-orderbook#what-this-is-actually-useful-for","What this is actually useful for",[42],"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":39,"date":40,"id":66,"title":67,"titles":68,"content":69,"level":17},"/blog/what-trades-dont-tell-you-orderbook#get-the-data","Get the data",[42],"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 arsenii@probalytics.io.",{"id":71,"title":72,"body":73,"date":683,"description":684,"extension":685,"meta":686,"navigation":687,"path":688,"seo":689,"stem":690,"__hash__":691},"legal/legal/privacy.md","Privacy Policy",{"type":74,"value":75,"toc":662},"minimark",[76,83,94,97,100,105,108,115,122,124,128,133,136,152,156,159,173,176,180,189,203,206,210,213,217,224,227,229,233,299,301,305,331,333,337,340,403,406,408,412,415,459,465,474,476,480,483,497,500,502,506,509,511,515,518,523,526,547,550,559,564,566,580,583,588,591,596,599,617,623,625,629,632,634,638,641,649,657,659],[77,78,79],"p",{},[80,81,82],"strong",{},"Last updated: April 11, 2026",[77,84,85,86,93],{},"This Privacy Policy describes how Probalytics (\"we\", \"us\", or \"our\") collects, uses, and processes personal data when you use our website at ",[87,88,92],"a",{"href":89,"rel":90},"http://probalytics.io",[91],"nofollow","probalytics.io"," and our data infrastructure services (collectively, the \"Service\").",[77,95,96],{},"We are subject to the General Data Protection Regulation (GDPR) and applicable Finnish/EU data protection law.",[98,99],"hr",{},[101,102,104],"h2",{"id":103},"_1-who-we-are","1. Who We Are",[77,106,107],{},"Probalytics is a data infrastructure provider offering access to prediction market data — including market metadata, trade history, and orderbook history — for Polymarket and Kalshi. We serve developers, quantitative researchers, and algorithmic trading firms.",[77,109,110,111,114],{},"For GDPR purposes, Probalytics is the ",[80,112,113],{},"data controller"," for personal data collected through our website and API.",[77,116,117,118],{},"Contact: ",[87,119,121],{"href":120},"mailto:arsenii@probalytics.io","arsenii@probalytics.io",[98,123],{},[101,125,127],{"id":126},"_2-what-data-we-collect","2. What Data We Collect",[129,130,132],"h3",{"id":131},"_21-account-data","2.1 Account Data",[77,134,135],{},"When you sign up for an API key or paid plan, we collect:",[137,138,139,143,146,149],"ul",{},[140,141,142],"li",{},"Name",[140,144,145],{},"Email address",[140,147,148],{},"Payment information (processed via Stripe — we do not store card data)",[140,150,151],{},"Company name (optional)",[129,153,155],{"id":154},"_22-usage-data","2.2 Usage Data",[77,157,158],{},"When you use the API or ClickHouse SQL endpoint, we collect:",[137,160,161,164,167,170],{},[140,162,163],{},"API key used",[140,165,166],{},"Endpoints queried, query volume, and timestamps",[140,168,169],{},"IP address",[140,171,172],{},"HTTP request metadata (user agent, response codes)",[77,174,175],{},"This data is used to enforce rate limits, detect abuse, and monitor service health.",[129,177,179],{"id":178},"_23-website-analytics","2.3 Website Analytics",[77,181,182,183,188],{},"We use PostHog (EU cloud instance, ",[87,184,187],{"href":185,"rel":186},"http://eu.posthog.com",[91],"eu.posthog.com",") to collect anonymous usage analytics on the website, including:",[137,190,191,194,197,200],{},[140,192,193],{},"Pages visited and time on page",[140,195,196],{},"Referral source",[140,198,199],{},"Country-level geolocation (not precise location)",[140,201,202],{},"Browser and device type",[77,204,205],{},"We do not use Google Analytics. PostHog processes data within the EU.",[129,207,209],{"id":208},"_24-communications","2.4 Communications",[77,211,212],{},"If you join the waitlist or subscribe to updates, we collect your email address and any optional information you provide. We use Brevo for transactional and marketing emails.",[129,214,216],{"id":215},"_25-market-data","2.5 Market Data",[77,218,219,220,223],{},"The data we provide through the Service (Polymarket trades, orderbook snapshots, Kalshi market data) is ",[80,221,222],{},"public or licensed market data",". It does not contain personal data as defined under GDPR.",[77,225,226],{},"Polymarket operates on the Polygon blockchain; on-chain data is publicly accessible. Kalshi data is accessed via their public API.",[98,228],{},[101,230,232],{"id":231},"_3-legal-basis-for-processing","3. Legal Basis for Processing",[234,235,236,249],"table",{},[237,238,239],"thead",{},[240,241,242,246],"tr",{},[243,244,245],"th",{},"Purpose",[243,247,248],{},"Legal Basis",[250,251,252,261,269,276,284,291],"tbody",{},[240,253,254,258],{},[255,256,257],"td",{},"Providing the Service (API access, billing)",[255,259,260],{},"Contract performance (Art. 6(1)(b))",[240,262,263,266],{},[255,264,265],{},"Fraud detection, rate limiting, abuse prevention",[255,267,268],{},"Legitimate interests (Art. 6(1)(f))",[240,270,271,274],{},[255,272,273],{},"Sending transactional emails",[255,275,260],{},[240,277,278,281],{},[255,279,280],{},"Sending marketing emails",[255,282,283],{},"Consent (Art. 6(1)(a))",[240,285,286,289],{},[255,287,288],{},"Website analytics",[255,290,268],{},[240,292,293,296],{},[255,294,295],{},"Legal compliance (invoicing, tax records)",[255,297,298],{},"Legal obligation (Art. 6(1)(c))",[98,300],{},[101,302,304],{"id":303},"_4-data-retention","4. Data Retention",[137,306,307,313,319,325],{},[140,308,309,312],{},[80,310,311],{},"Account data",": Retained while your account is active and for 12 months after account closure, unless a longer retention period is required by law.",[140,314,315,318],{},[80,316,317],{},"API usage logs",": Retained while account is active and up to 12 months after account closure for operational purposes.",[140,320,321,324],{},[80,322,323],{},"Billing records",": Retained for 7 years to comply with Finnish accounting law.",[140,326,327,330],{},[80,328,329],{},"Marketing email list",": Retained until you unsubscribe or withdraw consent.",[98,332],{},[101,334,336],{"id":335},"_5-third-party-processors","5. Third-Party Processors",[77,338,339],{},"We share your data with the following processors under GDPR-compliant data processing agreements:",[234,341,342,354],{},[237,343,344],{},[240,345,346,349,351],{},[243,347,348],{},"Processor",[243,350,245],{},[243,352,353],{},"Location",[250,355,356,367,378,393],{},[240,357,358,361,364],{},[255,359,360],{},"Stripe",[255,362,363],{},"Payment processing",[255,365,366],{},"US (SCCs / EU data residency option)",[240,368,369,372,375],{},[255,370,371],{},"Brevo (Sendinblue)",[255,373,374],{},"Email delivery",[255,376,377],{},"EU",[240,379,380,383,386],{},[255,381,382],{},"PostHog",[255,384,385],{},"Product analytics",[255,387,388,389,392],{},"EU (",[87,390,187],{"href":185,"rel":391},[91],")",[240,394,395,398,401],{},[255,396,397],{},"AWS (EU region)",[255,399,400],{},"Infrastructure & data storage",[255,402,377],{},[77,404,405],{},"We do not sell personal data to third parties.",[98,407],{},[101,409,411],{"id":410},"_6-your-rights-under-gdpr","6. Your Rights Under GDPR",[77,413,414],{},"You have the right to:",[137,416,417,423,429,435,441,447,453],{},[140,418,419,422],{},[80,420,421],{},"Access"," the personal data we hold about you",[140,424,425,428],{},[80,426,427],{},"Rectify"," inaccurate data",[140,430,431,434],{},[80,432,433],{},"Erase"," your data (\"right to be forgotten\"), subject to legal obligations",[140,436,437,440],{},[80,438,439],{},"Restrict"," processing in certain circumstances",[140,442,443,446],{},[80,444,445],{},"Data portability"," — receive your data in a machine-readable format",[140,448,449,452],{},[80,450,451],{},"Object"," to processing based on legitimate interests",[140,454,455,458],{},[80,456,457],{},"Withdraw consent"," at any time for processing based on consent (e.g., marketing emails)",[77,460,461,462,464],{},"To exercise any of these rights, email ",[87,463,121],{"href":120},". We will respond within 30 days.",[77,466,467,468,473],{},"You also have the right to lodge a complaint with the Finnish Data Protection Ombudsman (",[87,469,472],{"href":470,"rel":471},"http://tietosuoja.fi",[91],"tietosuoja.fi",").",[98,475],{},[101,477,479],{"id":478},"_7-cookies","7. Cookies",[77,481,482],{},"We use minimal cookies:",[137,484,485,491],{},[140,486,487,490],{},[80,488,489],{},"Session cookie",": Required for authenticated access to the dashboard.",[140,492,493,496],{},[80,494,495],{},"Analytics",": PostHog may set a cookie to identify returning sessions. This is anonymized.",[77,498,499],{},"We do not use advertising or tracking cookies.",[98,501],{},[101,503,505],{"id":504},"_8-security","8. Security",[77,507,508],{},"We use industry-standard security practices including TLS encryption in transit, access control on ClickHouse endpoints, and API key authentication. API keys should be kept confidential — you are responsible for any access made with your key.",[98,510],{},[101,512,514],{"id":513},"_9-oauth-authentication-google-github","9. OAuth Authentication (Google & GitHub)",[77,516,517],{},"You may sign in to Probalytics using your Google or GitHub account. Here is what we access and why.",[77,519,520],{},[80,521,522],{},"Google OAuth",[77,524,525],{},"We request the following scopes:",[137,527,528,535,541],{},[140,529,530,534],{},[531,532,533],"code",{},"openid"," — confirm you have a valid Google account",[140,536,537,540],{},[531,538,539],{},"email"," — create and identify your Probalytics account",[140,542,543,546],{},[531,544,545],{},"profile"," (name) — pre-fill your display name",[77,548,549],{},"We do not request access to Gmail, Google Drive, Google Calendar, your contacts, or any other Google service. We do not act on your behalf in any Google product.",[77,551,552,553,558],{},"Probalytics's use of information received from Google APIs adheres to the ",[87,554,557],{"href":555,"rel":556},"https://developers.google.com/terms/api-services-user-data-policy",[91],"Google API Services User Data Policy",", including the Limited Use requirements. Specifically: we only use Google user data to provide authentication; we do not transfer it to third parties except as necessary to operate the service; we do not use it for advertising; and we do not allow humans to read it except for security or legal reasons.",[77,560,561],{},[80,562,563],{},"GitHub OAuth",[77,565,525],{},[137,567,568,574],{},[140,569,570,573],{},[531,571,572],{},"read:user"," — confirm your GitHub identity and read your public profile",[140,575,576,579],{},[531,577,578],{},"user:email"," — retrieve your primary email address to create your account",[77,581,582],{},"We do not request access to your repositories, code, issues, organizations, or team membership. We do not act on your behalf on GitHub.",[77,584,585],{},[80,586,587],{},"What we do with OAuth data",[77,589,590],{},"Data obtained via OAuth is used exclusively to create and authenticate your account, associate it with an email address for billing and communication, and pre-fill your display name. We do not store OAuth tokens beyond the session required to complete authentication.",[77,592,593],{},[80,594,595],{},"Revoking access",[77,597,598],{},"You can revoke Probalytics's OAuth access at any time:",[137,600,601,609],{},[140,602,603,604],{},"Google: ",[87,605,608],{"href":606,"rel":607},"http://myaccount.google.com/permissions",[91],"myaccount.google.com/permissions",[140,610,611,612],{},"GitHub: ",[87,613,616],{"href":614,"rel":615},"http://github.com/settings/applications",[91],"github.com/settings/applications",[77,618,619,620,622],{},"Revoking OAuth access does not delete your Probalytics account. To close your account, email ",[87,621,121],{"href":120},".",[98,624],{},[101,626,628],{"id":627},"_10-cookies","10. Cookies",[77,630,631],{},"We may update this policy from time to time. Material changes will be communicated by email to registered users. The \"Last updated\" date at the top reflects the most recent version.",[98,633],{},[101,635,637],{"id":636},"_12-contact","12. Contact",[77,639,640],{},"For privacy-related questions or to exercise your rights:",[77,642,643,646,647],{},[80,644,645],{},"Email",": ",[87,648,121],{"href":120},[77,650,651,646,654],{},[80,652,653],{},"Website",[87,655,92],{"href":89,"rel":656},[91],[98,658],{},[77,660,661],{},"Probalytics is a service operated by Workki Oy, Kokinniitty 7 B, 02250 Espoo, Finland.",{"title":663,"searchDepth":664,"depth":664,"links":665},"",3,[666,667,674,675,676,677,678,679,680,681,682],{"id":103,"depth":17,"text":104},{"id":126,"depth":17,"text":127,"children":668},[669,670,671,672,673],{"id":131,"depth":664,"text":132},{"id":154,"depth":664,"text":155},{"id":178,"depth":664,"text":179},{"id":208,"depth":664,"text":209},{"id":215,"depth":664,"text":216},{"id":231,"depth":17,"text":232},{"id":303,"depth":17,"text":304},{"id":335,"depth":17,"text":336},{"id":410,"depth":17,"text":411},{"id":478,"depth":17,"text":479},{"id":504,"depth":17,"text":505},{"id":513,"depth":17,"text":514},{"id":627,"depth":17,"text":628},{"id":636,"depth":17,"text":637},"2026-04-11","How we collect, use, and protect your information.","md",{},true,"/legal/privacy",{"title":72,"description":684},"legal/privacy","vmu2RG3ZdjSCRqGHUc45daGzGCj3HGkMmL3cPexDE64",1775926730317]