Sports market making
$5M/month in liquidity rewards.
Almost nobody is collecting.
Polymarket pays market makers to quote both sides of sports markets. You don't need to pick winners — you need tight quotes, two-sided depth, and uptime.
pip install sfmmGitHub →Total daily: $51,700 across 5 games. 20% share = $10,340.
The math
Quadratic scoring: 2x tighter = 4x the score
Every minute, Polymarket samples your resting orders.
Score = ((max_spread - distance) / max_spread)²
S(v, s) = ((v - s) / v)²
v = 3 cents (max qualifying spread)
s = your distance from midpoint
At s=1 cent: score = 0.444 per contract
At s=2 cents: score = 0.111 per contract
↑ 4x worseScore by distance (v = 3 cents)
Two-sided quoting (bid + ask) scores 3x vs single-sided.
Two modes
Pre-game and live are different systems
$ sfmm run --mode pre
PRE Liverpool vs Arsenal (3 markets)
Match Result YES: bid 0.54×100 ask 0.56×100
Over 2.5 Goals: bid 0.61×100 ask 0.63×100
Both Teams Score: bid 0.58×100 ask 0.60×100
Score: 44.4/min | Est. reward: $560/game
Polling: 5s | Status: quoting- Prices move slowly (hours between events)
- Poll every 5 seconds
- Low adverse selection risk
- Risk window: lineup announcement (~5 min)
LIVE Liverpool vs Arsenal — 67'
Match Result: bid 0.71×100 ask 0.73×100
Score: 44.4/min | Est. reward: $1,440
⚠ GOAL 72' — Liverpool 2-1
CIRCUIT BREAK — quotes pulled
... cooldown 10s ...
✓ Requoted at new mid 0.78- Poll every 1 second
- Circuit breaker on midpoint jumps
- 2.5-3x more reward than pre-game
- Adverse selection: ~$50/game (vs $1,440 reward)
Sports Desk
Reward pools • April 2026| League | Per Game | Pre | Live |
|---|---|---|---|
| Champions League QFs | $24,000 | $6,750 | $17,250 |
| English Premier League | $10,000 | $2,800 | $7,200 |
| NBA | $7,700 | $2,150 | $5,550 |
| CS2 A-tier | $5,500 | $1,550 | $3,950 |
| IPL Cricket | $4,500 | $1,250 | $3,250 |
| La Liga / Serie A | $3,300 | $900 | $2,400 |
| MLB | $1,650 | $465 | $1,185 |
| NHL | $1,500 | $400 | $1,100 |
Best for live MM
Soccer — 96% safe time. 2.5 goals/game. Long periods of stable quoting between rare high-impact events.
Underrated
CS2 esports — discrete rounds, stable between rounds, $5,500/match pools. Digital-native traders underserved.
Hardest
Basketball — 200 scoring events per game. Constant small price moves. Profitable but operationally demanding.
Revenue estimate (20% share, soccer only)
EPL: 10 games/wk × $2,000 = $20,000
UCL: 2 games/wk × $4,800 = $ 9,600
LaLiga: 10 games/wk × $660 = $ 6,600
SerieA: 10 games/wk × $660 = $ 6,600
──────────────────────────────────────
Monthly estimate: ~$171,200
Capital required: $3,000-5,000Adverse selection math (EPL)
Per game:
Goals: 2.5 avg
Impact per goal: ~20¢
Exposure: 100 contracts
Cost per goal: $20
Total cost: $50/game
Reward (20% share): $2,000/game
Net profit: $1,950/game
Adverse selection = 2.5% of revenueData from Polymarket liquidity rewards docs. Revenue estimates assume 20% market share.
How the bot quotes
Prices for score. Sizes for view.
$ sfmm run --dry-run
DRY RUN — no orders will be placed
Discovering sports events...
Found 376 games. Starting engines...
PRE 2026 FIFA World Cup Winner (58 markets)
PRE 2026 NBA Champion (20 markets)
PRE UEFA Champions League Winner (30 markets)
Will Spain win the 2026 FIFA W:
mid=0.157 fair=0.157
bid 0.15×100 ask 0.17×100 (symmetric — no view)
score: 44.4 per side
Will the Oklahoma City Thunder:
mid=0.375 fair=0.375
bid 0.36×100 ask 0.39×100
score: 44.4 per side
Quoting 5 events, 166 markets total
Est. reward: $342/hour at current shareThe bot always places bid and ask at midpoint ± 1 tick (maximizing quadratic score). When SF detects an edge, it skews sizes — more bid if underpriced, more ask if overpriced. Score stays near-maximum. Inventory leans toward the edge.
QuoteEngine v2
Or use the built-in CLI engine
The SimpleFunctions CLI includes QuoteEngine v2 — a WebSocket event-driven market making engine with sub-100ms requoting. No Python needed. Works for any market, not just sports.
Thesis-aware bias
sf quote create TICKER --thesis-id UUIDAuto-skew from edge data. Updates every 60s. Accumulate the side your thesis favors.
Fade after fills
sf quote create TICKER --fade 2 --fade-decay 30Widen spread by 2¢ after each fill, decay back over 30s. Reduces adverse selection on goals/events.
Paper trading
sf quote create TICKER --paperSimulated fills from live book data. Test strategies risk-free before going live.
Layered depth
--layers 3 --layer-spacing 13 price levels per side, 1¢ apart. Shows deeper book presence for better scoring.
Dynamic spread
--min-spread 2 --max-spread 6Floor and ceiling on spread width. Prevents quoting too tight in volatile moments.
Requote debounce
--requote-delay 200Wait 200ms after book update before requoting. Reduces API calls in fast markets.
Get started
pip install sfmmsfmm discoversfmm run --dry-runexport SF_API_KEY=sf_live_... && sfmm run --mode preNeed market intelligence?
SimpleFunctions provides edges, world context, and execution tracking. The bot works standalone, but SF makes it smarter.
Get SF API Key