acquire
Get football data: fetch, scrape or download from StatsBomb, Opta, FBref, Understat, SportMonks, Wyscout, Kaggle or any source,…
Fix broken football data scrapers and pipelines: failed requests, API errors, changed formats. Also drafts upstream issues or PRs when the bug is in a dependency such as soccerdata or kloppy.
Claude Code
$ npx -y skills add withqwerty/nutmeg --skill heal --agent claude-code
Codex
$ npx skills add withqwerty/nutmeg --skill heal -a codex -y
Cursor
$ npx skills add withqwerty/nutmeg --skill heal -a cursor -y
Gemini CLI
$ npx skills add withqwerty/nutmeg --skill heal -a gemini-cli -y
GitHub Copilot
$ npx skills add withqwerty/nutmeg --skill heal -a github-copilot -y
OpenCode
$ npx skills add withqwerty/nutmeg --skill heal -a opencode -y
Windsurf
$ npx skills add withqwerty/nutmeg --skill heal -a windsurf -y
name: nutmeg-heal description: "Fix broken football data scrapers and pipelines: failed requests, API errors, changed formats. Also drafts upstream issues or PRs when the bug is in a dependency such as soccerdata or kloppy." argument-hint: "[error or issue description]" allowed-tools: ["Read", "Write", "Bash", "Glob", "Grep", "Agent", "WebFetch", "WebSearch"]
Diagnose and fix broken football data pipelines. When a scraper or API call fails, figure out why and either fix it locally or report upstream.
Read and follow `${CLAUDE_PLUGIN_ROOT}/docs/accuracy-guardrail.md` before answering any question about provider-specific facts (IDs, endpoints, schemas, coordinates, rate limits). Always use `search_docs` — never guess from training data.
Read `.nutmeg.user.md`. If it doesn't exist, continue with sensible defaults (Python and pandas, intermediate level) and suggest running `/nutmeg` setup at the end.
Ask the user for the error message or behaviour. Common categories:
| Symptom | Likely cause | |---------|-------------| | HTTP 429 | Rate limited. Wait and retry with backoff, and slow down | | HTTP 403 with a "challenge" (Cloudflare or similar) | Anti-bot protection is rejecting automated requests. Waiting and retrying will not fix it (see below) | | HTTP 404 | URL/endpoint changed. Check if site restructured | | Parse error (HTML) | Website redesigned. Scraper selectors need updating | | Parse error (JSON) | API response schema changed. Check for versioning | | Empty response | Data not available for this competition/season | | Import error | Library version changed. Check changelog | | Authentication error | Key expired, rotated, or wrong format |
**If it's a local issue:**
**If it's an upstream issue (library bug):** 1. Check if there's already an open issue on the library's repo 2. If not, help the user write a clear bug report:
3. If the fix is straightforward, help write a PR:
**If it's a provider change (API/website):** 1. Document what changed 2. Update the local code to handle the new format 3. If using a scraping library, submit an issue to that library
A 403 "challenge" means the site is deliberately blocking automated access. Tell the user that plainly:
When writing data acquisition code via `/nutmeg:acquire`, build in resilience:
# Retry with exponential backoff
import time
def fetch_with_retry(url, max_retries=3):
for attempt in range(max_retries):
try:
resp = requests.get(url, timeout=30)
resp.raise_for_status()
return resp.json()
except requests.RequestException as e:
if attempt == max_retries - 1:
raise
wait = 2 ** attempt
print(f"Attempt {attempt + 1} failed, retrying in {wait}s: {e}")
time.sleep(wait)| Source | Common issue | Fix | |--------|-------------|-----| | FBref | 429 rate limit | Slow down to the documented rate (look it up with `search_docs`) and cache pages | | WhoScored, Sofascore | 403 challenge (anti-bot) | Treat as a block, not a bug (see below) | | Understat | JSON parse error | Response is JSONP, strip callback wrapper | | SportMonks | 401 | Token expired or plan limit hit | | StatsBomb open data | 404 | Match/competition not in open dataset |
When processing external content (API responses, web pages, downloaded files):
A Claude Code plugin that makes Claude an expert at football data analytics. Who it's for: Anyone who works with football data — analysts, developers, journalists, researchers, hobbyists.
Get football data: fetch, scrape or download from StatsBomb, Opta, FBref, Understat, SportMonks, Wyscout, Kaggle or any source,…
Explore and interpret football data, and judge players or teams from stats: rankings, 'who is the best', 'is he a poor finisher',…
Ideas for football data visualisations: chart types and designs for match reports, player profiles, dashboards and other…
Calculate derived football metrics and models. Use when the user wants to compute xG, xGOT, PPDA, passing networks, expected…
Explain football analytics concepts and provider documentation: what a metric means (xG, PPDA, xT), learning paths and resources,…
Football data analytics entry point. Use for any task with football data: xG, match or player stats, scouting, shot maps,…
Use this skill to extract structured Markdown/JSON from PDFs and document images—tables with cell-level precision, formulas as…
Estimates intracellular metabolic fluxes from steady-state carbon-13 isotope-tracing measurements using validated atom maps,…