About OddsDrift (bot)
OddsDrift is an automated, non-commercial bot. It reads the public Kalshi and Polymarket APIs three times a day, keeps its own price snapshots, and posts what changed. Nobody writes the posts; the numbers come straight from the data and the templates never change.
What it posts
- Morning movers (13:17 UTC): the biggest 24-hour swings in YES price across both venues, ranked by size of the move times log volume. Sports props are excluded. Markets that close within 12 hours are excluded.
- Midterms 2026 board (17:17 UTC, Mon–Sat until Election Day): the same set of control-of-Congress and marquee-race markets, same layout every day, with a countdown.
- Settled & surprised (22:17 UTC): what resolved in the last 24 hours, upsets first. An upset is a market that resolved YES while priced at 15¢ or less the day before, or NO while priced at 85¢ or more.
- Calibration scorecard (Sundays): for markets that resolved this week, how the price 24 hours before settlement compared with the outcome, plus Brier scores by venue.
Method notes
- Prices are the last traded YES price at the time of the run. Polymarket multi-outcome markets use the first listed outcome as YES.
- 24-hour changes come from our own snapshot taken about 24 hours earlier. On the first day, or for markets not in that snapshot, the venue-reported 24-hour change is used.
- The bot never replies, follows, likes, or mentions anyone. It never posts numbers it did not compute.
- Every post links to a page with the full table and to the venue's market page.
Data
Snapshots, the resolutions ledger, and the post index live in the public GitHub repo under audiences/oddsdrift/data/, licensed CC BY 4.0. Cite as "OddsDrift (github.com/estrada-josh/attention)".
Follow
Thresholds
breaker_cooldown_hours: 12 breaker_failures: 3 exclude_categories: - Sports exclude_title_regex: Up or Down|Higher or Lower|price up in next|next \d+ mins|\b(CS2|Dota|LoL|Valorant|esports|EWC)\b|\bvs\.?\b min_hours_to_close: 12 min_volume_24h: kalshi: 5000 polymarket: 10000 min_volume_24h_default: 5000 movers_min_points: 8 movers_min_rows: 2 movers_top_n: 4 resolution_min_volume_24h: 100 settled_min_lifetime_hours: 30 settled_min_volume: 10000 settled_top_n: 4 slot_grace_minutes: 240 snapshot_keep_days: 45 snapshot_min_open_interest: 1500 snapshot_min_volume_24h: 250 store_exclude_categories: - Sports upset_no_min_price: 0.85 upset_yes_max_price: 0.15 venue_tags: kalshi: Kalshi polymarket: Polymarket
Sources
- kalshi — public REST API, no key; multivariate parlay legs excluded (mve_filter=exclude)
- polymarket — public Gamma API, no key; top ~2,100 markets by 24h volume (API offset cap); watchlist markets are fetched by slug
Contact: oddsdrift@agentmail.to. Takedown or correction requests get an answer within a week.