
Cbb Data
- 519 installs
- 201 repo stars
- Updated August 5, 2026
- machina-sports/sports-skills
cbb-data is a college basketball data skill that gathers and normalizes NCAA Division I schedules, box scores, and rankings for developers building sports analytics, content, or predictive modeling apps.
About
cbb-data is a machina-sports skill (version 0.1.0) for NCAA Division I men's college basketball data via ESPN public endpoints with zero API keys. The sports-skills CLI exposes 14 commands including get_scoreboard, get_standings, get_rankings, get_teams across 360+ D1 teams, get_team_roster, get_game_summary, get_play_by_play, get_win_probability, get_futures, and get_team_stats. Developers install with pip install sports-skills requiring Python 3.10+. The skill handles season-year derivation from currentDate, per-conference standings via group IDs, March Madness tournament context, and ranked-team fields on scoreboard competitors. Reach for cbb-data when building CBB dashboards, content products, or predictive modeling prototypes needing schedules, box scores, AP Top 25 rankings, or betting futures.
- CBB dataset discovery
- Schema normalization
- Schedule and box score joins
- Source freshness checks
- Analytics-ready tables
Cbb Data by the numbers
- 519 all-time installs (skills.sh)
- +7 installs in the week ending Aug 2, 2026 (Skillselion tracking)
- Ranked #442 of 2,064 Data Science & ML skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/machina-sports/sports-skills --skill cbb-dataAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 519 |
|---|---|
| repo stars | ★ 201 |
| Last updated | August 5, 2026 |
| Repository | machina-sports/sports-skills ↗ |
How do you fetch college basketball data programmatically?
Gather and normalize college basketball (CBB) datasets—schedules, box scores, rankings—for analysis, content products, or predictive modeling prototypes.
Who is it for?
Developers building college basketball dashboards, content tools, or predictive models who need keyless ESPN data via the sports-skills CLI.
Skip if: Developers needing NBA, WNBA, college football data, or live exchange-grade betting odds APIs outside ESPN public endpoints.
When should I use this skill?
A developer asks about college basketball scores, March Madness, NCAA standings, rankings, rosters, schedules, or CBB team and player statistics.
What you get
Normalized CBB datasets with scores, conference standings, AP Top 25 rankings, rosters, play-by-play, and futures odds from ESPN endpoints.
- CBB scoreboard data
- Conference standings
- Rankings and roster datasets
By the numbers
- Exposes 14 CLI commands for NCAA men's basketball data
- Covers 360+ NCAA Division I men's basketball teams
- Package version 0.1.0 requires Python 3.10+
Files
College Basketball Data (CBB)
Before writing queries, consult references/api-reference.md for endpoints, conference IDs, team IDs, and data shapes.
Setup
Before first use, check if the CLI is available:
which sports-skills || pip install sports-skillsIf pip install fails with a Python version error, the package requires Python 3.10+. Find a compatible Python:
python3 --version # check version
# If < 3.10, try: python3.12 -m pip install sports-skills
# On macOS with Homebrew: /opt/homebrew/bin/python3.12 -m pip install sports-skillsNo API keys required.
Quick Start
Prefer the CLI — it avoids Python import path issues:
sports-skills cbb get_scoreboard
sports-skills cbb get_rankings
sports-skills cbb get_standings --group=23CRITICAL: Before Any Query
CRITICAL: Before calling any data endpoint, verify:
- Season year is derived from the system prompt's
currentDate— never hardcoded. - For standings, the
groupparameter is set to the correct conference ID (seereferences/api-reference.md). - If only a team name is provided, use
get_teamsto resolve the team ID.
Choosing the Season
Derive the current year from the system prompt's date (e.g., currentDate: 2026-02-28 → current year is 2026).
- If the user specifies a season, use it as-is.
- If the user says "current", "this season", or doesn't specify: The CBB season runs November–April. If the current month is November or December, use
season = current_year + 1. If January–April, useseason = current_year. If May–October (offseason), useseason = current_year(most recently completed season).
Important: College vs. Pro Differences
- Standings are per-conference — use the
groupparameter to filter - Rankings replace leaders — college uses AP Top 25 and Coaches Poll
- Ranked teams have a
rankfield (null = unranked) on scoreboard competitors - 360+ D1 teams — many games per day during the season (50+ during conference play)
- March Madness — NCAA Tournament runs in March/April with 68 teams
Commands
| Command | Description |
|---|---|
get_scoreboard | Live/recent college basketball scores |
get_standings | Standings by conference (use group parameter) |
get_teams | All 360+ D1 men's basketball teams |
get_team_roster | Full roster for a team |
get_team_schedule | Schedule for a specific team |
get_game_summary | Detailed box score and player stats |
get_rankings | AP Top 25 and Coaches Poll rankings |
get_news | College basketball news |
get_play_by_play | Full play-by-play for a game |
get_win_probability | Win probability chart data |
get_schedule | Schedule for a date or season |
get_futures | Futures/odds markets (National Championship, etc.) |
get_team_stats | Team statistical profile |
get_player_stats | Player statistical profile |
See references/api-reference.md for full parameter lists and return shapes.
Examples
Example 1: Current rankings User says: "What are the college basketball rankings?" Actions: 1. Call get_rankings() Result: AP Top 25 and Coaches Poll with rank, previous rank, record, and points
Example 2: Conference standings User says: "Show me SEC basketball standings" Actions: 1. Derive season year from currentDate 2. Call get_standings(group=23, season=<derived_year>) (group 23 = SEC) Result: SEC standings with W-L records per team
Example 3: Today's scores User says: "What are today's college basketball scores?" Actions: 1. Call get_scoreboard() Result: All live and recent CBB games with scores and ranked status
Example 4: Team roster User says: "Show me Duke's roster" Actions: 1. Call get_team_roster(team_id="150") Result: Full Duke roster with name, position, jersey number
Example 5: March Madness futures User says: "Who's favored to win March Madness?" Actions: 1. Call get_futures(limit=10) Result: Top National Championship contenders with odds values
Example 6: Team statistics User says: "Show me Duke's team stats" Actions: 1. Derive season year from currentDate 2. Call get_team_stats(team_id="150", season_year=<derived_year>) Result: Duke's season stats by category with value, rank, and per-game averages
Commands that DO NOT exist — never call these
- ~~
get_odds~~ / ~~get_betting_odds~~ — not available. For prediction market odds, use the polymarket or kalshi skill. - ~~
search_teams~~ — does not exist. Useget_teamsinstead. - ~~
get_box_score~~ — does not exist. Useget_game_summaryinstead. - ~~
get_player_ratings~~ — does not exist. Useget_player_statsinstead. - ~~
get_ap_poll~~ — does not exist. Useget_rankingsinstead.
If a command is not listed in the Commands table above, it does not exist.
Error Handling
When a command fails, do not surface raw errors to the user. Instead: 1. If no events found, check if it's the off-season (CBB runs November–April) 2. If standings are empty without a group filter, try a specific conference 3. During March Madness, the scoreboard will have tournament games 4. Only report failure with a clean message after exhausting alternatives
Troubleshooting
Error: sports-skills command not found Cause: Package not installed Solution: Run pip install sports-skills
Error: No games found on scoreboard Cause: CBB is seasonal (November–April); off-season scoreboard will be empty Solution: Use get_rankings or get_news year-round; check get_schedule for when the season resumes
Error: Too many games returned — hard to filter Cause: During the season, 50+ games per day are scheduled Solution: Use --group to filter by conference, or --limit to cap results
Error: Rankings empty Cause: Rankings are published weekly during the season (November–March) only Solution: Use get_news in the offseason; rankings resume in November
College Basketball (CBB) — API Reference
Commands
get_scoreboard
Get live/recent college basketball scores.
date(str, optional): Date in YYYY-MM-DD format. Defaults to today.group(int, optional): Conference group ID to filter.limit(int, optional): Max events to return.
Returns events[] with game info, scores, competitor names, and ranked status.
get_standings
Get college basketball standings by conference.
season(int, optional): Season year. Defaults to current.group(int, optional): Conference ID to filter.
Returns conference standings with W-L records.
get_teams
Get all D1 men's college basketball teams (360+ teams). No parameters.
Returns teams[] with id, name, abbreviation, logo, and location.
get_team_roster
Get full roster for a college basketball team.
team_id(str, required): ESPN team ID.
Returns athletes[] with name, position, jersey number, height, weight.
get_team_schedule
Get schedule for a specific college basketball team.
team_id(str, required): ESPN team ID.season(int, optional): Season year. Defaults to current.
Returns events[] with opponent, date, score (if played), and venue.
get_game_summary
Get detailed game summary with box score and player stats.
event_id(str, required): ESPN event ID.
Returns game_info, competitors, boxscore (stats per player), scoring_plays, and leaders.
get_rankings
Get college basketball rankings — AP Top 25, Coaches Poll.
season(int, optional): Season year. Defaults to current.week(int, optional): Week number for historical rankings.
Returns polls[] with poll name and teams[] containing rank, previous rank, record, points, and first-place votes.
get_news
Get college basketball news articles.
team_id(str, optional): ESPN team ID to filter news by team.
Returns articles[] with headline, description, published date, and link.
get_play_by_play
Get full play-by-play data for a game.
event_id(str, required): ESPN event ID.
Returns play-by-play detail including period, clock, team, play description, and scoring plays.
get_win_probability
Get win probability chart data for a game.
event_id(str, required): ESPN event ID.
Returns timestamped home/away win probability percentages throughout the game.
get_schedule
Get college basketball schedule.
date(str, optional): Date in YYYY-MM-DD format.season(int, optional): Season year. Defaults to current.group(int, optional): Conference group ID to filter.
Returns events[] for the specified date or season.
get_futures
Get college basketball futures/odds markets (National Championship, Player of the Year, etc.).
limit(int, optional): Max entries per market. Defaults to 25.season_year(int, optional): Season year. Defaults to current.
Returns futures[] with market name and entries (team/player name + odds value).
get_team_stats
Get full team statistical profile for a season.
team_id(str, required): ESPN team ID.season_year(int, optional): Season year. Defaults to current.season_type(int, optional): 2=regular (default), 3=postseason.
Returns categories[] with detailed stats including value, rank, and per-game averages.
get_player_stats
Get full player statistical profile for a season.
player_id(str, required): ESPN athlete ID.season_year(int, optional): Season year. Defaults to current.season_type(int, optional): 2=regular (default), 3=postseason.
Returns categories[] with detailed stats including value, rank, and per-game averages.
Conference IDs (group parameter)
| Conference | Group ID | Conference | Group ID |
|---|---|---|---|
| ACC | 2 | Big 12 | 8 |
| SEC | 23 | Big Ten | 7 |
| Big East | 4 | Pac-12 | 21 |
| American | 62 | Mountain West | 44 |
| Atlantic 10 | 3 | West Coast | 26 |
| Missouri Valley | 18 | Colonial | 10 |
Note: Conference IDs are different from CFB conference IDs.
Common Team IDs
| Team | ID | Team | ID |
|---|---|---|---|
| Duke | 150 | Kansas | 2305 |
| Kentucky | 96 | North Carolina | 153 |
| UConn | 41 | Gonzaga | 2250 |
| Villanova | 222 | UCLA | 26 |
| Michigan State | 127 | Arizona | 12 |
| Purdue | 2509 | Houston | 248 |
| Tennessee | 2633 | Auburn | 2 |
| Baylor | 239 | Creighton | 156 |
Use get_teams for the complete list of all 360+ D1 teams.
Season Structure
- Non-Conference Season: November – December
- Conference Play: January – early March
- Conference Tournaments: Early–mid March
- NCAA Tournament (March Madness): Mid-March – early April (First Four, First/Second Round, Sweet 16, Elite 8, Final Four, Championship)
CBB Conference IDs
Use the --group parameter for standings and scoreboard filtering.
| Conference | Group ID | Conference | Group ID |
|---|---|---|---|
| ACC | 2 | Big 12 | 8 |
| SEC | 23 | Big Ten | 7 |
| Big East | 4 | Pac-12 | 21 |
| American | 62 | Mountain West | 44 |
| Atlantic 10 | 3 | West Coast | 26 |
| Missouri Valley | 18 | Colonial | 10 |
Tip: Conference IDs are different from CFB. Use get_standings without a group to see all conferences.
CBB Common Team IDs
Use get_teams to look up any team ID programmatically.
| Team | ID | Team | ID |
|---|---|---|---|
| Duke | 150 | Kansas | 2305 |
| Kentucky | 96 | North Carolina | 153 |
| UConn | 41 | Gonzaga | 2250 |
| Villanova | 222 | UCLA | 26 |
| Michigan State | 127 | Arizona | 12 |
| Purdue | 2509 | Houston | 248 |
| Tennessee | 2633 | Auburn | 2 |
| Baylor | 239 | Creighton | 156 |
Tip: Use get_teams for a full D1 list. ESPN URLs reveal IDs (e.g., espn.com/mens-college-basketball/team/_/id/150/duke → ID 150).
#!/bin/bash
# Usage: scripts/validate_params.sh [command] [options]
# Validates parameters before executing sports-skills commands
SPORT="cbb"
COMMAND="${1:-}"
# Season check
MONTH=$(date +%m)
case "$SPORT" in
cbb)
if [[ $MONTH -ge 5 && $MONTH -le 10 ]]; then
echo "WARNING: CBB is in off-season (Nov-Apr). Scoreboard/rankings may be empty."
echo "SUGGESTION: Use get_news or get_standings with a specific season instead."
fi
;;
esac
# Date format check
if [[ "$*" == *"--date="* ]]; then
DATE=$(echo "$*" | grep -o '\-\-date=[^ ]*' | cut -d= -f2)
if [[ ! "$DATE" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
echo "ERROR: Date must be in YYYY-MM-DD format. Got: $DATE"
exit 1
fi
fi
# Group ID check
if [[ "$*" == *"--group="* ]]; then
GROUP=$(echo "$*" | grep -o '\-\-group=[^ ]*' | cut -d= -f2)
if [[ ! "$GROUP" =~ ^[0-9]+$ ]]; then
echo "ERROR: Group ID must be a number. Got: $GROUP"
exit 1
fi
fi
# Team ID check
if [[ "$*" == *"--team_id="* ]]; then
TEAM_ID=$(echo "$*" | grep -o '\-\-team_id=[^ ]*' | cut -d= -f2)
if [[ ! "$TEAM_ID" =~ ^[0-9]+$ ]]; then
echo "ERROR: Team ID must be a number. Got: $TEAM_ID"
exit 1
fi
fi
# Event ID check
if [[ "$*" == *"--event_id="* ]]; then
EVENT_ID=$(echo "$*" | grep -o '\-\-event_id=[^ ]*' | cut -d= -f2)
if [[ ! "$EVENT_ID" =~ ^[0-9]+$ ]]; then
echo "ERROR: Event ID must be a number. Got: $EVENT_ID"
exit 1
fi
fi
echo "OK"
Related skills
How it compares
Pick cbb-data over nba-data or cfb-data skills when the dataset target is NCAA Division I men's college basketball specifically.
FAQ
How do you install cbb-data?
cbb-data uses the sports-skills CLI installed via pip install sports-skills, which requires Python 3.10 or newer. No API keys are needed; commands like sports-skills cbb get_scoreboard query ESPN public endpoints directly.
What data does cbb-data provide?
cbb-data provides live and recent scores, per-conference standings, AP Top 25 and Coaches Poll rankings, team rosters, schedules, box scores, play-by-play, win probability, futures odds, and team or player stats across 360+ D1 men's teams.