Install
openclaw skills install sports-acca-trackerTrack accumulator (acca) betting slips across football, basketball, and tennis — parses slip photo or text, checks live scores every 15 minutes, and reports bet status with overall acca health and cash-out context.
openclaw skills install sports-acca-trackerTrack accumulator (parlay) bets across football, basketball, and tennis by monitoring live scores and reporting whether each leg is still alive. Works with any betting slip — photo, screenshot, or typed text.
User sends slip photo
→ Agent parses legs (vision_analyze or text extraction)
→ Agent creates a cron job (*/15 * * * *)
→ Cron searches live scores every 15 min
→ Cron delivers report: per-leg status + acca health
→ Auto-cleans up after all matches finish
Use vision_analyze with the image and this question:
Extract all betting legs from this slip. For each leg return:
- Match (Team A vs Team B) or Event (Player A vs Player B for tennis)
- Sport (football/soccer, basketball, tennis)
- Competition/League
- Date and kickoff time
- Bet type (exact wording from slip)
- Decimal odds
Also extract: total odds, stake amount, max return, any bonus info.
Auto-detect sport per leg based on:
Tag each leg with its sport — the cron prompt uses sport-specific APIs.
If user types their slip, extract the same fields. Normalize bet type wording to match the standard types in references/bet-types.md.
After parsing, confirm with the user before starting tracking:
📋 PARSED SLIP — 5 legs
1. Arsenal vs PSG (⚽ UCL, 21:00) — Arsenal W (1.55) — 64.5%
2. Bayern vs Inter (⚽ UCL, 21:00) — Bayern W (1.40) — 71.4%
3. Lakers vs Celtics (🏀 NBA, 02:30) — Lakers W (1.80) — 55.6%
4. Djokovic vs Alcaraz (🎾 ATP, 14:00) — Djokovic W (2.10) — 47.6%
5. FSV Schöningen vs Lohne (⚽ RL, 18:00) — BTTS No (2.65) — 37.7% ⚠️
Stake: €10 | Combined odds: 30.12 | Max return: €301.20
Riskiest leg: #5 (37.7% implied)
Start tracking? (yes/no)
Calculate implied probability per leg: 1 / odds * 100. Flag any under 40% as ⚠️ gamble leg.
Use the cronjob tool:
action: create
name: acca-tracker-{short-id}
schedule: "*/15 * * * *"
repeat: 48
deliver: origin
prompt: {see template below}
| Scenario | Schedule | Repeat |
|---|---|---|
| Single match day | */15 * * * * | 48 |
| High-stakes acca | */10 * * * * | 72 |
| Multi-day (Tue + Wed) | */15 * * * * | 192 |
| Tournament bracket | 0 */2 * * * | 84 |
You are tracking a MULTI-SPORT accumulator bet. Check live scores NOW and report.
SLIP DETAILS:
{paste all legs with sport tags, bet types, odds, and win conditions}
Total odds: {total} | Stake: {stake} | Max return: {max_return}
INSTRUCTIONS:
1. For each leg, determine scores using the scores.sh helper script:
- Run in terminal: bash scripts/scores.sh {DATE} Soccer
- Run in terminal: bash scripts/scores.sh {DATE} Basketball
- Run in terminal: bash scripts/scores.sh {DATE} Tennis
- Output: league|home|away|home_score|away_score|status (or league|event|result|status for tennis)
- Match results to legs by team/player names
- If script returns NO_DATA, fall back to web_search as last resort
2. For each leg determine:
- Current score
- Match status: Not Started / Live (minute/set) / HT / FT / Postponed / Abandoned
- Sport-specific score format (football: goals, basketball: points, tennis: sets+games)
- Bet status: ✅ WON / ✅ WINNING / ⏳ PENDING / ❌ LOST / ❌ DEAD
3. Calculate overall acca status:
- ALL SAFE ✅ = no legs lost
- STILL ALIVE ⏳ = no legs lost, none confirmed won
- ACCA DEAD ❌ = at least one leg LOST
4. If acca dead: name the killing leg, explain why
5. Calculate "legs alive / won / lost / pending / total"
6. If all FT: state "TRACKING COMPLETE" and summarize
SPORT-SPECIFIC BET EVALUATION:
- Football: standard 90min + stoppage (see references/bet-types.md)
- Basketball: Match Winner = team with more points at FT. Overtime counts.
Over/Under = total combined points of both teams.
- Tennis: Match Winner = player who wins required sets (2/3 or 3/5).
Set betting = exact set score. Games over/Under = total games in match.
REPORT FORMAT (code blocks only):
🏟️ ACCA LIVE REPORT — {time}
Leg | Match | Score | Status | Bet | Result
----|--------------------------------|--------------|--------|------------|----------
1 | ⚽ Arsenal vs PSG | 2 - 0 (67') | 67' | Arsenal W | ✅ WINNING
2 | 🏀 Lakers vs Celtics | 98 - 102 | Q4 | Lakers W | ❌ DEAD
3 | 🎾 Djokovic vs Alcaraz | 6-4, 3-2 | Set 2 | Djokovic W | ✅ WINNING
📊 1 winning / 0 won / 1 dead / 1 pending (3 total)
❌ ACCA DEAD — Leg 2 killed it (Lakers trailing 98-102 Q4)
DATA: If no score found, say so explicitly. Never guess scores.
If 2+ hours past kickoff with no data: "unverified — likely finished"
🏟️ ACCA LIVE — 21:34 CET
1 | Arsenal vs PSG | 1 - 0 | 55' | Arsenal W | ✅ WINNING
2 | Bayern vs Inter | 0 - 0 | 55' | Bayern W | ⏳ PENDING
3 | Luton vs Northampton | 0 - 0 | 55' | BTTS No | ✅ WINNING
📊 1 winning / 0 won / 0 lost / 2 pending
💰 ⏳ STILL ALIVE
🏟️ ACCA LIVE — 22:18 CET
1 | Arsenal vs PSG | 2 - 1 | 78' | Arsenal W | ✅ WINNING
2 | Bayern vs Inter | 1 - 2 | 78' | Bayern W | ❌ DEAD
3 | Luton vs Northampton | 0 - 0 | 78' | BTTS No | ✅ WINNING
📊 1 winning / 0 won / 1 dead / 1 pending
❌ ACCA DEAD — Leg 2 killed it (Bayern losing 1-2)
Remaining matches still playing — updating for interest.
🏟️ ACCA FINAL — 23:45 CET — 🎉🎉🎉
1 | Arsenal vs PSG | 2 - 1 | FT | Arsenal W | ✅ WON
2 | Bayern vs Inter | 3 - 1 | FT | Bayern W | ✅ WON
3 | Luton vs Northampton | 0 - 0 | FT | BTTS No | ✅ WON
📊 3/3 LEGS WON
💰 ACCA WON — Stake: €10 | Return: €210.40
Tracking complete.
When some legs won and others pending, estimate cash-out value:
Won legs combined odds: 1.55 × 1.40 = 2.17
Remaining legs implied probability: 0.565 × 0.541 × 0.377 = 0.115
Estimated value: €10 × 2.17 × 0.115 = €2.49
Cash-out range: ~€2.00 – €3.50 (rough estimate)
Only include when: at least 1 leg WON, at least 1 PENDING, acca NOT dead. Always frame as "estimated".
See references/data-sources.md for full API details.
Quick reference:
scripts/scores.sh {date} {sport} — handles all transport, all sportsexecute_code with Python/urllib (same API, different transport)strEvent (not strHomeTeam/strAwayTeam), coverage tournament-dependentSee references/bet-types.md for the full list of 18+ bet types with scoring logic, decision tree, and edge cases (void, ET, red cards, handicaps).
repeat countstrEvent, parsing requiredlast_delivery_error. Try explicit telegram:chat_id:thread_id format. Reports still generate at ~/.hermes/cron/output/{job_id}/.mdsports-acca-tracker (old football-acca-tracker also exists, no delete cmd)clawhub publish <path> --slug <slug> --name "Name" --version X.Y.Z --tags "tag1,tag2"clawhub inspect <slug>