Skills polymarket-sports-edge
Find odds divergence between sportsbook consensus and Polymarket sports markets, then trade the gap.
git clone https://github.com/openclaw/skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/0xjims/polymarket-sports-edge/skills/polymarket-sports-edge" ~/.claude/skills/openclaw-skills-polymarket-sports-edge-b2a1d6 && rm -rf "$T"
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/0xjims/polymarket-sports-edge/skills/polymarket-sports-edge" ~/.openclaw/skills/openclaw-skills-polymarket-sports-edge-b2a1d6 && rm -rf "$T"
skills/0xjims/polymarket-sports-edge/skills/polymarket-sports-edge/SKILL.mdPolymarket Sports Edge
This is a template. The default signal compares sportsbook consensus odds against Polymarket prices and trades when divergence exceeds a threshold. Remix it — adjust the sports, threshold, sizing, or add your own filters (e.g., only trade NBA, require minimum volume, weight by recency).
What It Does
Scans active Polymarket sports markets and compares prices against the sportsbook consensus from The Odds API. When a market is mispriced relative to sharp bookmaker lines, it buys the underpriced side.
The edge: Sportsbook lines are set by professional oddsmakers with billions in handle — they're extremely well-calibrated. Polymarket sports markets are thinner and less efficient. When they disagree, the books are usually right.
How It Works
Two parallel scanning modes run each cycle:
Game-level (h2h): Matches individual Polymarket game markets against sportsbook moneylines.
- Fetch active sports markets from Simmer (
)GET /api/sdk/markets?q=<sport> - Fetch current h2h odds from The Odds API for the same sports
- Match markets to games by comparing team names
- Calculate implied probability from the sportsbook consensus (average across all bookmakers)
- Compare against the Polymarket price — if divergence exceeds the threshold, trade
Futures (outrights): Matches Polymarket championship/winner markets against sportsbook futures odds.
- Fetch outrights from The Odds API (
sport keys, e.g.,_winner
)basketball_nba_championship_winner - Search Simmer for futures markets (e.g., "NBA championship", "Super Bowl winner")
- Match market questions to teams in the outrights data
- Compare sportsbook implied probability vs Polymarket price and trade divergence
Setup
Environment Variables
| Variable | Required | Description |
|---|---|---|
| Yes | Your Simmer API key |
| Yes | Free key from the-odds-api.com (500 req/month free) |
| No | Minimum probability gap to trade (default: = 8%) |
| No | Amount per trade in venue currency (default: ) |
| No | Comma-separated Odds API sport keys (default: NBA, NFL, NHL, MLB, MMA, EPL, MLS) |
| No | Comma-separated futures sport keys (default: NBA, NFL, NHL, MLB championship winners) |
| No | Set to for real trades. Default is dry-run. |
Get a Free Odds API Key
- Go to the-odds-api.com
- Sign up for the free tier (500 requests/month)
- Copy your API key
- Set it:
export THE_ODDS_API_KEY=your_key_here
Running
# Dry run (default) — logs what it would trade python sports_edge.py # Live trading LIVE=true python sports_edge.py
Example Output
[Sports Edge] Scanning 7 sports + 4 futures... (dry_run=True, min_divergence=8%) [Sports Edge] NBA: Found 6 games with odds [Sports Edge] Matched: "Will the Celtics win vs Pacers?" → Boston Celtics vs Indiana Pacers [Sports Edge] Polymarket YES: 0.58 | Books: 0.69 | Divergence: +0.11 [Sports Edge] DRY RUN: Would buy YES at 0.58 (edge 11%) — 10.0 [Sports Edge] Futures NBA championship: Found 30 teams in outrights [Sports Edge] Matched: "Will the Celtics win the 2026 NBA Champion" → Boston Celtics [Sports Edge] Polymarket YES: 0.12 | Books: 0.22 | Divergence: +0.10 [Sports Edge] DRY RUN: Would buy YES at 0.12 (edge 10%) — 10.0 [Sports Edge] Done. 2 opportunities found (dry run).