I have a database with 6.5 million price snapshots across 7,907 Polymarket markets. I built a feature engineering pipeline that computes price velocity, acceleration, spread compression, and volume surge ratios every 15 minutes.
After running crash detection across every market category, here's what I found.
The Dataset
- 7,907 markets tracked since March 18, 2026
- 6.5M price points at ~15-minute intervals
- 133,961 feature snapshots with computed signals (velocity, acceleration, spread, volume dynamics)
- Categories: politics (764), sports (1,038), crypto (1,135), geopolitics (341), economics (121), and 4,184 "other" (esports, entertainment, weather)
All data collected via Polymarket's CLOB API into SQLite. No third-party data providers. The full pipeline runs in 4 minutes.
Finding #1: "Other" Category Has 4x More Crashes Than Everything Else Combined
I defined a "crash" as any market where price velocity dropped below -0.10 per period (roughly a 10%+ move in 15 minutes).
| Category | Markets | Crash Events | Surge Events | Avg Daily Move |
|---|---|---|---|---|
| Other (esports, sports props) | 4,184 | 439 | 417 | 25.9% |
| Crypto | 1,135 | 35 | 69 | 17.0% |
| Sports | 1,038 | 34 | 28 | 7.2% |
| Politics | 764 | 13 | 22 | 4.3% |
| Weather | 100 | 9 | 7 | 18.4% |
| Science/Tech | 147 | 8 | 8 | 9.1% |
| Geopolitics | 341 | 7 | 11 | 5.3% |
The "other" bucket — esports matches, game outcomes, prop bets — is where the volatility lives. Average daily price movement of 25.9% vs 4.3% for politics. These markets resolve fast (often within hours), so pricing whips around on live events.
Crypto markets are the second most volatile (17% avg daily move, 35 crashes vs 69 surges — meaning they surge more than they crash on Polymarket).
Key insight: If you're building a crash-trading algorithm, ignore politics. The action is in fast-resolving event markets.
Finding #2: When Crashes Accelerate, They Don't Stop
I bucketed all 133K feature snapshots into five regimes based on velocity and acceleration:
| Regime | Occurrences | Avg Forward Return | Avg Price | Avg Spread |
|---|---|---|---|---|
| Crash + accelerating down | 1,098 | -25.1% | \/bin/zsh.36 | 3.65c |
| Crash + recovering | 119 | -118.1% | \/bin/zsh.25 | 4.03c |
| Stable | 126,885 | -1.1% | \/bin/zsh.15 | 3.45c |
| Surge + accelerating up | 1,117 | +18.1% | \/bin/zsh.47 | 3.51c |
| Surge + decelerating | 132 | +38.5% | \/bin/zsh.67 | 1.85c |
Wait — "crash + recovering" has a worse forward return (-118%) than "crash + accelerating down" (-25%)? That seems backwards.
Here's why: the "recovering" signal is often a dead cat bounce. Price velocity goes negative, then acceleration briefly turns positive (the bounce), but the market continues to resolve toward zero. This is the classic trap in prediction markets — the outcome is becoming clear, brief resistance appears, then it resolves.
The real opportunity: Surges that are decelerating (+38.5% forward return, only 132 occurrences). A market moving up strongly but slowing down means it's consolidating at a higher level — often right before final resolution. And the spread compresses to 1.85c (vs 3.45c baseline), meaning tight markets with consensus.
Finding #3: The Highest-Volume Markets Are Geopolitical — And Wildly Volatile
Top markets by total volume:
| Market | Volume | Category | Price Range |
|---|---|---|---|
| US forces enter Iran by April 30? | \M | Geopolitics | \/bin/zsh.01 to \/bin/zsh.99 |
| Fed rate decrease 50+ bps (March) | \M | Economics | full range |
| Fed rate increase 25+ bps (March) | \M | Economics | full range |
| US x Iran ceasefire by April 7? | \M | Politics | \/bin/zsh.01 to \/bin/zsh.99 |
| Netanyahu out by March 31? | \M | Politics | \/bin/zsh.01 to \/bin/zsh.99 |
The Iran/geopolitics markets traded the full \/bin/zsh.01-\/bin/zsh.99 range, meaning at some point the market was 99% sure something would happen, then 99% sure it wouldn't (or vice versa). That's not trading — that's following breaking news in real time through prices.
Finding #4: Spread Tells You Where the Edge Is
Average spreads by category:
| Category | Avg Spread | Avg Liquidity | Wide Spread Markets (>5c) |
|---|---|---|---|
| Crypto | 1.62c | \K | 7 |
| Entertainment | 1.36c | \K | 1 |
| Science/Tech | 1.35c | \K | 2 |
| Geopolitics | 1.14c | \K | 4 |
| Politics | 0.65c | \K | 2 |
| Sports | 0.58c | \K | 6 |
Crypto markets have the widest spreads (1.62c average) despite decent liquidity. This means market makers are pricing in higher uncertainty — or there aren't enough of them. Either way, there's more room to profit from providing liquidity in crypto markets.
Politics and sports have the tightest spreads (under 0.65c), which makes sense — high liquidity, lots of sophisticated participants, consensus pricing.
What I Use This For
All of this data feeds into PolyScope, a free analytics dashboard I built. It tracks 7,500+ markets in real time, shows price histories, and highlights anomalies.
The crash detection signals also power a trading bot that's hit an 85.8% win rate across 120 paper trades — buying crash events when velocity goes deeply negative but spread remains tight (indicating the crash is likely panic, not information).
If you're building your own analysis tools, the key technical insight is: compute features at the 15-minute level, not daily. Prediction markets move fast. By the time you see a daily crash, the recovery (or full collapse) already happened.
The Stack
- Data collection: Python + httpx, hitting Polymarket CLOB API every 4 minutes
- Storage: SQLite (market_universe.db — currently 6.5M rows, ~800MB)
- Feature engineering: SQL window functions for velocity, acceleration, spread compression
- Dashboard: Next.js + Recharts, deployed on Vercel
I built the entire pipeline using Claude Code skills — reusable automation modules that handle API integrations, data transforms, and deployment. If you want to build similar data pipelines without writing boilerplate, the API Connector skill handles the tedious parts.
For the dashboard visualization layer, I used the Dashboard Builder skill to generate the monitoring panels and chart configurations.
Try PolyScope: polyscope-azure.vercel.app — free, no signup, 7,500+ markets tracked.
Questions? Find me on Dev.to.
Top comments (0)