
Betting
- 1.2k installs
- 201 repo stars
- Updated August 5, 2026
- machina-sports/sports-skills
betting provides documented workflows for |
About
The betting skill | # Betting Analysis Before writing queries, consult `references/api-reference.md` for odds formats, command parameters, and key concepts. ## Quick Start ```bash sports-skills betting convert_odds --odds=-150 --from_format=american sports-skills betting devig --odds=-150,+130 --format=american sports-skills betting find_edge --fair_prob=0.58 --market_prob=0.52 sports-skills betting evaluate_bet --book_odds=-150,+130 --market_prob=0.52 sports-skills betting find_arbitrage --market_probs=0.48,0.49 sports-skills betting parlay_analysis --legs=0.58,0.62,0.55 --parlay_odds=600 sports-skills betting line_movement --open_odds=-140 --close_odds=-160 ``` Python SDK: ```python from sports_skills import betting betting.convert_odds(odds=-150, from_format="american") betting.devig(odds="-150,+130", format="american") betting.find_edge(fair_prob=0.58, market_prob=0.52) betting.find_arbitrage(market_probs="0.48,0.49") betting.parlay_analysis(legs="0.58,0.62,0.55", parlay_odds=600) betting.line_movement(open_odds=-140, close_odds=-160) ``` ## CRITICAL: Before Any Analysis CRITICAL: Before calling any analysis command, verify: - Odds format is correctly identified (american, dec.
- Odds format is correctly identified (american, decimal, or probability).
- ESPN odds are de-vigged with `devig` before computing edge vs prediction market prices.
- This module computes - it does not fetch. Obtain odds from sport-specific skills or polymarket/kalshi first.
- Get ESPN moneyline odds (e.g., from `nba get_scoreboard`): Home: `-150`, Away: `+130`
- Get Polymarket/Kalshi price for the same outcome (e.g., home at `0.52`)
Betting by the numbers
- 1,227 all-time installs (skills.sh)
- +16 installs in the week ending Aug 4, 2026 (Skillselion tracking)
- Ranked #353 of 2,203 Security skills by installs in the Skillselion catalog
- Security screen: MEDIUM risk (skills.sh audit)
- Data as of Aug 5, 2026 (Skillselion catalog sync)
betting capabilities & compatibility
- Capabilities
- odds format is correctly identified (american, d · espn odds are de vigged with `devig` before comp · this module computes it does not fetch. obtain · get espn moneyline odds (e.g., from `nba get_sco · get polymarket/kalshi price for the same outcome
- Use cases
- documentation
What betting says it does
# Betting Analysis Before writing queries, consult `references/api-reference.md` for odds formats, command parameters, and key concepts.
- ESPN odds are de-vigged with `devig` before computing edge vs prediction market prices.
npx skills add https://github.com/machina-sports/sports-skills --skill bettingAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 1.2k |
|---|---|
| repo stars | ★ 201 |
| Security audit | 2 / 3 scanners passed |
| Last updated | August 5, 2026 |
| Repository | machina-sports/sports-skills ↗ |
How do I use betting for the task described in its SKILL.md triggers?
|
Who is it for?
Teams invoking betting when the user request matches documented triggers and prerequisites.
Skip if: Skip when cached docs are missing, the request is a negative trigger, or another sibling skill owns the workflow.
When should I use this skill?
|
What you get
Step-by-step guidance grounded in betting documentation and reference files.
Files
Betting Analysis
Before writing queries, consult references/api-reference.md for odds formats, command parameters, and key concepts.
Quick Start
sports-skills betting convert_odds --odds=-150 --from_format=american
sports-skills betting devig --odds=-150,+130 --format=american
sports-skills betting find_edge --fair_prob=0.58 --market_prob=0.52
sports-skills betting evaluate_bet --book_odds=-150,+130 --market_prob=0.52
sports-skills betting find_arbitrage --market_probs=0.48,0.49
sports-skills betting parlay_analysis --legs=0.58,0.62,0.55 --parlay_odds=600
sports-skills betting line_movement --open_odds=-140 --close_odds=-160Python SDK:
from sports_skills import betting
betting.convert_odds(odds=-150, from_format="american")
betting.devig(odds="-150,+130", format="american")
betting.find_edge(fair_prob=0.58, market_prob=0.52)
betting.find_arbitrage(market_probs="0.48,0.49")
betting.parlay_analysis(legs="0.58,0.62,0.55", parlay_odds=600)
betting.line_movement(open_odds=-140, close_odds=-160)CRITICAL: Before Any Analysis
CRITICAL: Before calling any analysis command, verify:
- Odds format is correctly identified (american, decimal, or probability).
- ESPN odds are de-vigged with
devigbefore computing edge vs prediction market prices. - This module computes — it does not fetch. Obtain odds from sport-specific skills or polymarket/kalshi first.
Workflows
Compare ESPN vs Polymarket/Kalshi
1. Get ESPN moneyline odds (e.g., from nba get_scoreboard): Home: -150, Away: +130 2. Get Polymarket/Kalshi price for the same outcome (e.g., home at 0.52) 3. De-vig: devig --odds=-150,+130 --format=american → Fair: Home 57.9%, Away 42.1% 4. Compare: find_edge --fair_prob=0.579 --market_prob=0.52 → Edge: 5.9%, EV: 11.3% 5. Or all in one step: evaluate_bet --book_odds=-150,+130 --market_prob=0.52
Arbitrage Detection
1. Get best price per outcome from different sources (Polymarket home at 0.48, Kalshi away at 0.49) 2. find_arbitrage --market_probs=0.48,0.49 --labels=home,away 3. Total implied 0.97 (< 1.0) → arbitrage found, guaranteed ROI: 3.09%
Parlay Evaluation
1. De-vig each leg: Leg 1 → 0.58, Leg 2 → 0.55, Leg 3 → 0.50 2. parlay_analysis --legs=0.58,0.55,0.50 --parlay_odds=600 3. Returns combined fair probability, edge, and Kelly fraction
Line Movement Analysis
1. Get ESPN open and close lines: Open -140, Close -160 2. line_movement --open_odds=-140 --close_odds=-160 3. Returns probability shift, direction, and classification (sharp_action, steam_move, etc.)
Examples
Example 1: Edge check using ESPN and Polymarket prices User says: "Is there edge on the Lakers game? ESPN has them at -150 and Polymarket has them at 52 cents" Actions: 1. Call devig(odds="-150,+130", format="american") → fair home probability ~58% 2. Call find_edge(fair_prob=0.58, market_prob=0.52) → edge ~6%, positive EV 3. Call kelly_criterion(fair_prob=0.58, market_prob=0.52) → optimal bet fraction Result: Present edge percentage, EV per dollar, and recommended bet size as % of bankroll
Example 2: Arbitrage opportunity detection User says: "Can I arb this? Polymarket has home at 48 cents and Kalshi has away at 49 cents" Actions: 1. Call find_arbitrage(market_probs="0.48,0.49", labels="home,away") 2. Check arbitrage_found in result Result: If arbitrage: present allocation percentages and guaranteed ROI. If not: present overround and explain no guaranteed profit
Example 3: Parlay evaluation User says: "Is this 3-leg parlay at +600 worth it?" Actions: 1. De-vig each leg to get fair probabilities (e.g., 0.58, 0.62, 0.55) 2. Call parlay_analysis(legs="0.58,0.62,0.55", parlay_odds=600) Result: Present combined fair probability, edge, EV, +EV or -EV verdict, and Kelly fraction
Example 4: Line movement interpretation User says: "The line moved from -140 to -160, what does that mean?" Actions: 1. Call line_movement(open_odds=-140, close_odds=-160) Result: Present probability shift, direction, magnitude, and classification (sharp action, steam move, etc.)
Example 5: De-vig a standard spread User says: "What are the true odds for this spread? Both sides are -110" Actions: 1. Call devig(odds="-110,-110", format="american") Result: Present each side as 50% fair probability, vig is ~4.5%
Example 6: Odds format conversion User says: "Convert -200 to implied probability" Actions: 1. Call convert_odds(odds=-200, from_format="american") Result: Present 66.7% implied probability and 1.50 decimal odds
Commands that DO NOT exist — never call these
- ~~
get_odds~~ — does not exist. This module analyzes odds; it does not fetch them. Use nba-data/nfl-data/etc. for ESPN odds, or polymarket/kalshi for prediction market prices. - ~~
calculate_ev~~ — does not exist. Usefind_edgeorevaluate_betinstead. - ~~
compare_markets~~ — does not exist. Use themarketsskill for cross-platform comparison.
If a command is not listed in references/api-reference.md, it does not exist.
Troubleshooting
Error: ValueError: unknown format when calling convert_odds Cause: The from_format parameter is not one of american, decimal, or probability Solution: Use exactly american, decimal, or probability as the format string
Error: find_edge returns negative EV when a positive edge is expected Cause: Fair probability and market probability may be reversed, or de-vigging was skipped Solution: Run devig on sportsbook odds first, then pass the de-vigged fair_prob to find_edge
Error: find_arbitrage shows no arbitrage even when prices seem low Cause: Prices may sum to more than 1.0 when all outcomes are correctly included Solution: Verify you are using the correct probabilities for all outcomes; check total_implied in the result
Error: Kelly fraction is very high (greater than 0.5) Cause: Edge estimate is very large — often from a miscalculated fair probability Solution: Use half-Kelly or quarter-Kelly for conservative sizing. Re-verify fair probability via devig
Betting Analysis — API Reference
Odds Formats
| Format | Example | Description |
|---|---|---|
| American | -150, +130 | US sportsbook standard. Negative = favorite, positive = underdog |
| Decimal | 1.67, 2.30 | European standard. Payout per $1 (includes stake) |
| Probability | 0.60, 0.43 | Direct implied probability (0-1). Polymarket uses this format |
Conversion rules:
- American negative: prob = -odds / (-odds + 100). Example: -150 → 150/250 = 0.600
- American positive: prob = 100 / (odds + 100). Example: +130 → 100/230 = 0.435
- Decimal: prob = 1 / odds. Example: 1.67 → 0.599
- Kalshi prices (0-100 integer): divide by 100 to get probability format
Commands
| Command | Required | Optional | Description |
|---|---|---|---|
convert_odds | odds, from_format | Convert between American, decimal, probability | |
devig | odds | format | Remove vig from sportsbook odds → fair probabilities |
find_edge | fair_prob, market_prob | Compute edge, EV, and Kelly from two probabilities | |
kelly_criterion | fair_prob, market_prob | Kelly fraction for optimal bet sizing | |
evaluate_bet | book_odds, market_prob | book_format, outcome | Full pipeline: devig → edge → Kelly |
find_arbitrage | market_probs | labels | Detect arbitrage across outcomes from multiple sources |
parlay_analysis | legs, parlay_odds | odds_format, correlation | Multi-leg parlay EV and Kelly analysis |
line_movement | open_odds, close_odds, open_line, close_line, market_type | Analyze open-to-close line movement |
Key Concepts
- Vig/Juice: The sportsbook's margin. A -110/-110 line implies 52.4% + 52.4% = 104.8% total (4.8% overround). De-vigging removes this to get fair probabilities.
- Edge: The difference between your estimated true probability and the market price. Positive edge = profitable in expectation.
- Kelly Criterion: Optimal bet sizing. f* = (fair_prob - market_prob) / (1 - market_prob). For conservative sizing, use half-Kelly (×0.5) or quarter-Kelly (×0.25).
- Expected Value (EV): Average return per dollar bet. EV = fair_prob / market_prob - 1.
- Arbitrage: When prices across sources don't sum to 100%, you can bet all outcomes and guarantee profit regardless of the result.
- Parlay: Multi-leg bet where all legs must win. Combined probability = product of individual leg probabilities. Higher risk, higher reward.
- Line Movement: How odds change between open and close. Large moves toward one side suggest sharp/professional money. Reverse line movement (ML and spread moving opposite directions) suggests a public vs sharp split.
Related skills
FAQ
What does betting do?
|
When should I use betting?
|
What are common prerequisites?
--- name: betting description: | Betting analysis - odds conversion, de-vigging, edge detection, Kelly criterion, arbitrage detection, parlay analysis, and line movement.
Is Betting safe to install?
skills.sh reports 2 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.