football-value-bets
Scanned@nandichi
npx machina-cli add skill @nandichi/football-value-bets --openclawFootball Value Bets
Generate professional, data-driven football bet slips. No gut feelings, purely statistics and value analysis.
When to activate
Activate this skill when the user:
- Asks for a football bet, bet slip, accumulator, or picks
- Asks for match analysis for betting purposes
- Asks for bet statistics, results, or ROI
- Asks for a pick or tip for football
Prerequisites
Install dependencies (one-time):
pip install requests
Set API key (free via football-data.org/client/register):
export FOOTBALL_DATA_API_KEY="your-key-here"
Or fill in the key at {baseDir}/config/settings.json under api_key.
Mode 1: Generate Bet Slip
Step 1 -- Fetch data
Fetch current match data:
python3 {baseDir}/scripts/match_fetcher.py --mode full
This returns a JSON package with:
- All scheduled matches for today and tomorrow
- League standings and form data per team
- Head-to-head history (last 5 encounters)
Coverage: Premier League, Bundesliga, Serie A, La Liga, Ligue 1, Eredivisie, Champions League.
If the user wants a specific date:
python3 {baseDir}/scripts/match_fetcher.py --mode full --date-from 2026-02-15 --date-to 2026-02-15
Step 2 -- Analyse each match
Analyse EVERY match from the data on these factors (in order of importance):
A. Form (last 5-10 matches)
- Use the
formfield from the standings data (e.g. "W,W,D,L,W") - Calculate win percentage, goals per match
- Pay attention to home form vs away form trends
B. Home/away statistics
- Home team: goals for/against at home
- Away team: goals for/against away
- Compare goal difference at home vs on the road
C. Head-to-head (H2H)
- Review the
h2hdata: who wins historically? - Look for patterns: does one team always score? Are these low- or high-scoring games?
D. Table position and motivation
- Top of the table (title/CL spots): high motivation, consistent
- Mid-table: unpredictable, be cautious
- Bottom (relegation): can be surprisingly strong or weak
- Difference in table position as an indicator
E. Additional factors (via web search) After the data analysis, search the web for EVERY shortlisted match:
- Injuries and suspensions of key players (FotMob, Transfermarkt)
- Recent news (manager change, internal issues, transfer saga)
- xG (expected goals) data from recent matches
- Weather conditions for outdoor matches in winter months
Use search terms like: "[Team A] vs [Team B] team news injuries" and "[Team A] xG stats 2025-26"
F. Odds estimation
- Estimate realistic odds per outcome (based on your analysis)
- Compare with common bookmaker odds (search the web if needed)
- VALUE = when your estimated probability is higher than the implied probability of the odds
- Implied probability = 1 / odds (e.g. odds 2.00 = 50% implied)
Step 3 -- Pick selection
Select ONLY picks that meet all criteria:
- Estimated win probability > 45%
- Odds per pick: 1.70 - 2.50 (value range)
- Clear motivation based on data
- No more than 1 pick per match
Allowed pick types:
- 1 / X / 2: Home win, draw, away win
- 1X / X2: Double chance
- BTTS Yes/No: Both Teams To Score
- Over/Under 2.5 goals
- Handicap -1: Team wins by 2+ goals
Step 4 -- Honesty check
If you find FEWER than 3 picks with real value:
Do NOT generate a bet slip. Say honestly:
"No strong bet slip possible today. The matches offer insufficient value based on the data. Reasons: [brief explanation]. Wait for better odds or the next matchday."
This is MANDATORY. Never force it. Honesty > revenue.
Step 5 -- Generate output
Generate TWO variants:
Variant A: Main slip (3-4 picks, total odds 8x-15x)
| Match | Pick | Odds | Motivation | Prob % | Risk |
|---|---|---|---|---|---|
| Ajax - PSV | BTTS Yes | 1.85 | Both teams scored in 8/10 recent matches, H2H always goals | 52% | Low |
| Arsenal - Chelsea | Over 2.5 | 1.90 | Avg 3.2 goals per match this season, both attack-minded | 48% | Medium |
| ... | ... | ... | ... | ... | ... |
Total odds: XX.XX Recommended stake: 5-10 EUR Potential payout: XX.XX EUR
Variant B: Backup (2-3 picks, total odds 4x-8x)
Same table format but with safer picks (higher probabilities, lower odds).
Always include at the bottom:
- Estimated hitrate per variant (e.g. "Main slip: ~15% chance of all picks hitting, individual picks ~50% average")
- Alternative advice: "Consider singles if you want to play it safer"
- Disclaimer: "Gamble responsibly. Max stake 5-10 EUR per slip, monthly limit 75 EUR."
Step 6 -- Save bet
Automatically save the bet slip for tracking:
python3 {baseDir}/scripts/bet_tracker.py --mode save --data '{
"type": "main",
"stake": 5.0,
"picks": [
{
"match": "Ajax - PSV",
"competition": "Eredivisie",
"pick": "BTTS Yes",
"odds": 1.85,
"estimated_probability": 0.52,
"motivation": "Both teams scored in 8/10 recent matches",
"risk": "low"
}
],
"total_odds": 12.50,
"notes": ""
}'
Repeat for the backup slip with "type": "backup".
Mode 2: Record results
When the user says a bet has won or lost:
# Mark entire slip
python3 {baseDir}/scripts/bet_tracker.py --mode result --date 2026-02-15 --slip-idx 1 --result win
# Mark specific pick
python3 {baseDir}/scripts/bet_tracker.py --mode result --date 2026-02-15 --slip-idx 1 --pick-idx 2 --result loss
Result options: win, loss, void
Always ask the user for the date and which slip (main or backup) it concerns.
Mode 3: View statistics
When the user asks about results, stats, ROI, or hitrate:
python3 {baseDir}/scripts/bet_tracker.py --mode stats
Present the JSON output as a readable summary:
- All-time hitrate and ROI
- Current month: staked, returned, profit/loss, budget remaining
- Best and worst month
Warn if the monthly budget is almost spent (>80% used).
Mode 4: View history
python3 {baseDir}/scripts/bet_tracker.py --mode history --days 30
Show an overview of all bets from the last N days.
Analysis quality rules
These rules are HARD. Always follow them:
- Never more than 5 picks per slip. More picks = exponentially lower chance.
- Never odds below 1.50 or above 3.00 per pick. Too low = no value, too high = too risky.
- Never 2 picks from the same match. Correlation destroys value.
- Never a pick without data backing. "Gut feeling" is not an argument.
- Always run the honesty check. No slip is better than a bad slip.
- Avoid derbies and cup matches unless the data is overwhelming. Too unpredictable.
- Always check injuries. A team without key players is a different team.
- Factor in the season phase. Early season = unreliable data. End of season = varying motivation.
Budget and responsible gambling
Configuration is in {baseDir}/config/settings.json:
- Per bet: 5-10 EUR
- Monthly limit: 75 EUR
- Always check the stats for monthly spending before generating a new slip
If the monthly budget is at or nearly at its limit (>90%):
- Inform the user
- Advise waiting until next month
- Do NOT generate a new slip unless the user explicitly states they want to proceed
Tone and style
- Output in English
- Professional but accessible
- No hype, no promises
- Data and percentages front and center
- Honest about risks
Overview
Football Value Bets generates professional, data-driven bet slips for football matches using form, H2H, standings, injuries, and value analysis. It tracks results with hit rate and ROI to help users evaluate performance and make informed picks.
How This Skill Works
The skill fetches current match data via the football-data API, analyzes factors A–F (form, home/away stats, H2H, table position, and extra factors from web search), and estimates win probabilities and odds. Picks are selected only when they meet criteria (win probability >45%, odds 1.70–2.50, clear motivation) and at most one pick per match; if fewer than 3 value picks exist, it will not generate a strong bet slip and will explain why.
When to Use It
- Asks for a football bet, bet slip, accumulator, or picks
- Asks for match analysis for betting purposes
- Asks for bet statistics, results, or ROI
- Asks for a pick or tip for football
- Wants to review data-driven guidance before placing bets
Quick Start
- Step 1: Install dependencies and set API key (pip install requests; export FOOTBALL_DATA_API_KEY=\"your-key-here\").
- Step 2: Fetch data: python3 {baseDir}/scripts/match_fetcher.py --mode full
- Step 3: Run analysis and review generated bet slips; if value is insufficient, you’ll see a no-strong-bet message.
Best Practices
- Use win probability > 45% and odds 1.70–2.50 as the core threshold for picks
- Rely on up-to-date data: form, home/away stats, and H2H trends
- Incorporate injuries, suspensions, and xG data from web sources when available
- Limit to at most one pick per match to avoid overexposure
- Track ROI and hit rate over time to monitor performance
Example Use Cases
- Example: A Premier League match with strong home form and favorable H2H yields a 2.10 odds pick with >45% win probability.
- Example: A two-match accumulator includes a BTTS Yes and an Under 2.5 goals pick where both meet value criteria.
- Example: If data shows insufficient value, the system returns No strong bet slip and explains why.
- Example: A Handicap -1 pick is selected when one team shows clear 2+ goal superiority in recent form.
- Example: A match analysis highlights clear motivation gaps between teams leading to a high-confidence single pick.