Install the CLI
Use Node.js >=22.12.0 on Windows, macOS, or Linux. For occasional use, run it directly with npx @jvorndran/fbs-cli.
npm install --global @jvorndran/fbs-cli
Unofficial · 71 read-only routes + team analysis · agent-ready
FBS CLI is an independent command line interface for CollegeFootballData. It
covers all 71 GET routes in the pinned cfbd 5.21.0 client, plus a
cutoff-safe analyze team report, and returns every result as clean YAML.
$ fbs games --year 2024 --week 1 --team "Florida State" command: games endpoint: /games query: year: 2024 week: 1 team: Florida State count: 1 games: - season: 2024 week: 1 matchup: Boston College at Florida State status: completed
Install the cross-platform npm package, configure your key, then make a focused first query.
Use Node.js >=22.12.0 on Windows, macOS, or Linux. For occasional use, run it directly with npx @jvorndran/fbs-cli.
npm install --global @jvorndran/fbs-cli
Request a free CFBD key, then run this command. It explains the validation and project-local save before asking for the key at a masked prompt.
fbs auth
Run fbs --help, start with teams or games, then reuse returned IDs for deeper queries.
fbs teams fbs --year 2026
Build a team dossier, investigate the next matchup, and audit the result. Bring a timestamped sportsbook number and current availability news; FBS CLI supplies structured CFBD evidence.
Each audit updates the next team dossier.
Investigate 2025 Florida State. Determine whether its record was supported by opponent quality, underlying efficiency, recent form, player concentration, and historical market performance. Identify the conditions that made the team attractive or dangerous for sides and totals.
Establish the schedule ledger, expected record, ATS sample, and stored provider observations.
fbs games --year 2025 --team "Florida State" --season-type regular fbs records --year 2025 --team "Florida State" fbs teams ats --year 2025 --team "Florida State" fbs lines --year 2025 --team "Florida State" --season-type regular
Contrast full-season quality with early and late form while removing garbage time.
fbs stats season advanced --year 2025 --team "Florida State" --exclude-garbage-time fbs stats season advanced --year 2025 --team "Florida State" --start-week 1 --end-week 7 --exclude-garbage-time fbs stats season advanced --year 2025 --team "Florida State" --start-week 8 --end-week 14 --exclude-garbage-time fbs ppa games --year 2025 --team "Florida State" --exclude-garbage-time fbs wepa team season --year 2025 --team "Florida State"
Check whether schedule strength and multiple provider rating systems confirm the raw profile.
fbs ratings srs expanded --year 2025 fbs ratings sp --year 2025 --team "Florida State" fbs ratings fpi --year 2025 --team "Florida State"
Find out whether production is distributed or dependent on a small number of players.
fbs player usage --year 2025 --team "Florida State" --exclude-garbage-time fbs ppa players season --year 2025 --team "Florida State" --threshold 10 --exclude-garbage-time
games[].id with
lines[].id, then join each opponent name to the expanded SRS rows.
TEAM DOSSIER Record vs. expected wins: Opponent quality and strength of schedule: Offensive and defensive identity: Early vs. late trend: Game-to-game volatility: Player concentration: Side-friendly conditions: Total-friendly conditions: Historical ATS and provider context: Conflicting evidence and data gaps:
Investigate {TEAM} versus {OPPONENT} using only information available before kickoff. The live market from {SPORTSBOOK} at {TIMESTAMP} is {SPREAD_AND_PRICE} with a total of {TOTAL_AND_PRICE}. Availability notes: {NOTES}. Return one side and one total entry with a bettable number, counterarguments, invalidation conditions, and a 0u, 0.5u, or 1u grade.
completed: false, the current time precedes
start_date, and each cutoff is that team’s last completed week.
Locate the target by opponent, capture its ID and week, derive each team’s completed-game weeks, then add stored market and model context.
fbs games --year {YEAR} --team "{TEAM}" --season-type regular
fbs games --year {YEAR} --team "{OPPONENT}" --season-type regular
fbs games --year {YEAR} --week {TARGET_WEEK} --team "{TEAM}" --season-type regular
fbs lines --game-id {GAME_ID}
fbs teams ats --year {YEAR} --team "{TEAM}"
fbs teams ats --year {YEAR} --team "{OPPONENT}"
fbs metrics wp pregame --year {YEAR} --week {TARGET_WEEK} --team "{TEAM}"
fbs ratings elo --year {YEAR} --week {TARGET_WEEK} --team "{TEAM}"
fbs ratings elo --year {YEAR} --week {TARGET_WEEK} --team "{OPPONENT}"
Repeat for both teams, then compare each offense with the opposing defense.
fbs stats season advanced --year {YEAR} --team "{TEAM}" --start-week 0 --end-week {CUTOFF_WEEK} --exclude-garbage-time
fbs stats game havoc --year {YEAR} --team "{TEAM}" --season-type regular
fbs ppa games --year {YEAR} --team "{TEAM}" --season-type regular --exclude-garbage-time
Repeat for both teams. Query plays once for each team’s last three completed-game weeks; byes mean those weeks can differ.
fbs drives --year {YEAR} --team "{TEAM}" --season-type regular
fbs plays --year {YEAR} --week {EACH_COMPLETED_WEEK} --team "{TEAM}" --season-type regular
fbs stats player season --year {YEAR} --team "{TEAM}" --start-week 0 --end-week {CUTOFF_WEEK} --season-type regular
fbs player usage --year {YEAR} --team "{TEAM}" --exclude-garbage-time
fbs ppa players games --year {YEAR} --team "{TEAM}" --threshold 10 --season-type regular --exclude-garbage-time
Use series history as context only and treat tier-denied weather as missing evidence.
fbs teams matchup --team1 "{TEAM}" --team2 "{OPPONENT}" --min-year {HISTORY_START} --max-year {PRIOR_YEAR}
fbs games weather --game-id {GAME_ID}
week < TARGET_WEEK. Omit season ATS, player usage, WEPA, SP+, FPI,
and forecast-weather claims unless archived before kickoff; use the target
game’s preserved pregame_elo instead of assuming weekly Elo timing.
MARKET SNAPSHOT
Sportsbook:
Captured at:
Verified spread, total, and prices:
Availability snapshot:
One-unit definition:
SIDE
Decision: PASS | LEAN | PLAY
Selection: {TEAM_AND_EXACT_VERIFIED_SPREAD}
Price:
Grade: 0u | 0.5u | 1u
Heuristic fair range:
Bettable through:
Evidence for:
Evidence against:
Valid only at:
Invalidated by:
Missing inputs:
TOTAL
Decision: PASS | LEAN | PLAY
Selection: Over/Under {EXACT_VERIFIED_TOTAL}
Price:
Grade: 0u | 0.5u | 1u
Heuristic fair range:
Bettable through:
Evidence for:
Evidence against:
Valid only at:
Invalidated by:
Missing inputs:
Maximum exposure is 1u per entry. Historical ATS and head-to-head never raise a tier by themselves, and units are never converted to dollars.
Audit game {GAME_ID} against the original betting card. Separate the betting result from the quality of the reasoning, identify high-variance events, determine whether the matchup thesis held, and update the team dossier without outcome chasing.
Use the original timestamped sportsbook number as the authoritative grading input.
fbs games --id {GAME_ID}
fbs lines --game-id {GAME_ID}
fbs games teams --id {GAME_ID}
fbs games players --id {GAME_ID}
Compare the final score with efficiency, disruption, and predicted-points evidence.
fbs stats game advanced --year {YEAR} --week {WEEK} --team "{TEAM}" --opponent "{OPPONENT}" --exclude-garbage-time
fbs stats game havoc --year {YEAR} --week {WEEK} --team "{TEAM}" --opponent "{OPPONENT}"
fbs ppa games --year {YEAR} --week {WEEK} --team "{TEAM}" --exclude-garbage-time
Trace field position, explosive plays, short fields, and the largest win-probability swings.
fbs drives --year {YEAR} --week {WEEK} --team "{TEAM}"
fbs plays --year {YEAR} --week {WEEK} --team "{TEAM}"
fbs metrics wp --game-id {GAME_ID}
Add this evidence only when the authenticated CFBD tier permits the endpoint.
fbs game box advanced --id {GAME_ID}
POSTGAME AUDIT Sportsbook and captured-at timestamp: Pregame availability snapshot: SIDE AUDIT Recorded selection, price, and grade: Result: WIN | LOSS | PUSH Thesis status: CONFIRMED | MIXED | REFUTED Evidence that held / failed: TOTAL AUDIT Recorded selection, price, and grade: Result: WIN | LOSS | PUSH Thesis status: CONFIRMED | MIXED | REFUTED Evidence that held / failed: SHARED PROCESS REVIEW Repeatable efficiency signals: High-variance events: Largest win-probability swings: Profile upgrades / holds / downgrades: Next-game watch conditions: Remaining uncertainty:
Command families stay close to CFBD REST paths. Use built-in help for the exact flags on any of the 71 endpoint commands.
Build a fresh, cutoff-safe YAML report with record, offense and defense efficiency, drives, PROE, player trends, and adjusted ranks.
Discover programs, conferences, venues, talent, calendars, rosters, historical series, and ATS records.
Find schedules and IDs, then retrieve box scores, historical provider lines, media, weather, scoreboards, and live plays.
Trace possessions, play-by-play, play types, and explicit athlete-to-play stat associations.
Query team and player production, advanced efficiency, havoc, usage, transfers, and success rates.
Explore predicted points, win probability, field-goal EP, and opponent-adjusted team or player metrics.
Cover polls, ratings, recruiting, playoffs, draft history, coaches, and returning production.
Designed for reliable handoffs
Successful requests write only structured YAML to stdout. Errors use the same approach on stderr, with stable codes and useful hints. The structural example is abridged.
command: games teams endpoint: /games/teams query: id: 401752731 count: 1 games: - game_id: 401752731 teams: - team: Florida State home_away: home stats: total_yards: 412 rushing_yards: 156