I built a scanner that analyzes every active market on Polymarket — the largest prediction market platform — and finds pricing anomalies in seconds.
Here's what it found today.
The Numbers
- 750 events scanned
- 12,210 markets analyzed
- 10 pricing anomalies detected
- Scan time: ~8 seconds
What Counts as an "Anomaly"?
For mutually exclusive outcomes (like "Who will win?"), the sum of all Yes prices should equal 1.0. When it doesn't, that's a mathematical mispricing.
The scanner also checks for:
- Ladder contradictions — "BTC > $100K" priced higher than "BTC > $90K"
- Cross-market conflicts — related markets with inconsistent prices
Today's Findings
Most anomalies were in sports and temperature markets — events with many sub-markets (O/U lines, spreads) that bundle with the main outcome:
| Market | Deviation | Liquidity |
|---|---|---|
| Iran Strait of Hormuz | 99900% | $2.9M |
| Paris Temperature | 99900% | $288K |
| Rotten Tomatoes Score | 49900% | $870K |
| Bitcoin Price March 11 | 8233% | $11.8K |
Important caveat: These massive deviations look like free money but they're not. Most are "bundled" events where outcomes aren't truly exclusive (e.g., a tennis match + O/U lines). The scanner flags them as low confidence for this reason.
Real arbitrage opportunities typically appear in:
- Multi-candidate elections
- Tournament brackets
- Genuinely exclusive prediction sets
And they're usually 3-10% deviations, not 10,000%.
Try It Yourself
The scanner runs as a free API:
curl https://polymarket-scanner-api.onrender.com/api/scan
Filter for specific types:
# Only high-confidence opportunities
curl "https://polymarket-scanner-api.onrender.com/api/scan?confidence=high"
# Only if liquidity > $10K
curl "https://polymarket-scanner-api.onrender.com/api/scan?min_liquidity=10000"
Free tier: 3 requests/day, top 10 results.
The Code
The full scanner is open-source (~700 lines of Python):
from polymarket_scanner import PolymarketClient, ArbitrageScanner
client = PolymarketClient()
scanner = ArbitrageScanner(client)
# Scan everything
events = client.get_events(max_pages=15)
exclusive = scanner.scan_exclusive_outcomes(events)
ladders = scanner.scan_ladder_contradictions(events)
cross = scanner.scan_cross_market(events)
No API key needed — Polymarket's Gamma API is public and read-only.
GitHub: polymarket-scanner-api
What I Learned
- Most "arbitrage" in prediction markets is fake. Bundled events (sports match + O/U) create enormous deviations that aren't exploitable.
- Real opportunities are small and fast. Genuine exclusive-outcome mispricings are 3-10% and last minutes.
- Liquidity is king. A 100% deviation on a $300 market isn't worth the gas fees.
- The Gamma API is surprisingly good. Free, no auth, returns everything. Polymarket clearly wants third-party tools built on top.
The scanner updates every 5 minutes. If you build something on top of it, I'd love to hear about it.
Top comments (0)