# 8rain Station — Model Upload Specification Machine-readable reference for the 8rain Station model upload format. This replaces the Google Sheet template for AI-assisted model building. Source: [Google Sheet Template](https://docs.google.com/spreadsheets/d/1M0qrS-c1azK2BQbEmjnqr-RXPFUpHN9fgltym9u18zI/edit?usp=sharing) --- ## CSV Schema Upload as CSV (comma-delimited) or paste directly into the Upload section on the Weightings page. | Column | Required | Type | Description | |---|---|---|---| | LEAGUE | yes | string | League short-code: `mlb`, `nhl`, `nba`, `nfl`, `epl`, `wnba`, `ufc` | | DATE | yes | int | Game date as `YYYYMMDD` (e.g., `20250415`) | | HOME | yes | string | Home team short-code (see Team Codes below) | | AWAY | yes | string | Away team short-code (see Team Codes below) | | DOUBLEHEADER | no | int | Game number when multiple games on same day. Default `0`. Mostly MLB. | | SECTION | yes | string | Market section (see Market Registry below) | | MARKET | yes | string | Market code (see Market Registry below) | | SELECTOR | conditional | string | **Player props**: Player ID (MLB = 6-digit mlbid from MLB.com URLs). **Team props**: Team short-code. **Game-level markets**: leave blank. | | POINT | conditional | string | Line value for totals/spreads (e.g., `7` for total O/U 7). For spreads, value is from the perspective of the SIDE in the same row (home `-1.5`, away `+1.5`). Leave blank for moneylines. | | SIDE | yes | string | `home`, `away`, `over`, `under`, `yes`, `no`, `odd`, `even` | | WIN % | yes | string | True probability as decimal (`0.37` = 37%) or American odds (`-150`, `+120`). Two-sided markets need two rows (one per side). | ### Validation Rules - Every two-sided market needs **two rows** (one per side) to form a complete line - `SECTION` + `MARKET` must match a valid combination from the Market Registry - `SELECTOR` is **required** for `player_prop` and `team_prop` sections; must be blank for `head_to_head`, `spread`, `total`, `game_prop` - `POINT` is **required** for `total`, `spread`, `team_prop` (runs/hits/etc.), and `player_prop` markets; must be blank for `head_to_head` moneylines - Spread `POINT` values must include sign: `-1.5` for favorite, `+1.5` for underdog - `WIN %` can be American odds (integers with optional sign) or decimal probability (0.00-1.00) - `HOME` and `AWAY` can be blank for `team_prop` and `player_prop` rows (SELECTOR identifies the subject) --- ## Market Registry ### MLB #### head_to_head | MARKET | SIDE | POINT | SELECTOR | Description | |---|---|---|---|---| | `h2h` | home/away | — | — | Moneyline | | `h2h_i1` | home/away | — | — | 1st Inning Moneyline | | `h2h_2i` | home/away | — | — | Nth Inning Moneyline (2i-9i) | | `h2h_i2` | home/away | — | — | First N Innings Moneyline (i2-i7) | | `ftts` | home/away | — | — | First Team to Score | | `ltts` | home/away | — | — | Last Team to Score | | `team_with_most_hits` | home/away | — | — | Team with Most Hits | | `win_most_innings` | home/away | — | — | Team that Wins Most Innings | #### spread | MARKET | SIDE | POINT | SELECTOR | Description | |---|---|---|---|---| | `spread` | home/away | signed | — | Run Line (point from side's perspective) | | `spread_i1` | home/away | signed | — | 1st Inning Spread | | `spread_2i` | home/away | signed | — | Nth Inning Spread (2i-9i) | | `spread_i2` | home/away | signed | — | First N Innings Spread (i2-i7) | #### total | MARKET | SIDE | POINT | SELECTOR | Description | |---|---|---|---|---| | `total` | over/under | number | — | Total Runs | | `total_i1` | over/under | number | — | 1st Inning Runs | | `total_2i` | over/under | number | — | Nth Inning Total (2i-9i) | | `total_i2` | over/under | number | — | First N Innings Total (i2-i7) | #### game_prop | MARKET | SIDE | POINT | SELECTOR | Description | |---|---|---|---|---| | `btts` | yes/no | — | — | Both Teams to Score | | `rhe` | over/under | number | — | Total Runs + Hits + Errors | | `overtime` | yes/no | — | — | Will There Be Extra Innings? | | `runs_odd_even` | odd/even | — | — | Total Runs Odd/Even | | `home_runs_odd_even` | odd/even | — | — | Total Home Runs Odd/Even | | `hits` | over/under | number | — | Total Hits Both Teams | | `total_bases` | over/under | number | — | Total Bases Both Teams | | `strikeouts` | over/under | number | — | Total Strikeouts Both Teams | | `doubles` | over/under | number | — | Total Doubles Both Teams | | `triples` | over/under | number | — | Total Triples Both Teams | | `home_runs` | over/under | number | — | Total Home Runs Both Teams | #### team_prop | MARKET | SIDE | POINT | SELECTOR | Description | |---|---|---|---|---| | `runs` | over/under | number | team code | Total Runs for Team | | `runs_i5` | over/under | number | team code | First 5 Innings Runs (also i3, i7) | | `runs_i1` | over/under | number | team code | 1st Inning Runs | | `runs_2i` | over/under | number | team code | 2nd Inning Runs | | `hits` | over/under | number | team code | Total Hits for Team | | `hits_i5` | over/under | number | team code | First 5 Innings Hits | | `hits_i1` | over/under | number | team code | 1st Inning Hits | | `home_runs` | over/under | number | team code | Total Home Runs for Team | | `runs_odd_even` | odd/even | — | team code | Runs Odd/Even | | `runs_odd_even_i5` | odd/even | — | team code | First 5 Innings Runs Odd/Even | #### player_prop | MARKET | SIDE | POINT | SELECTOR | Description | |---|---|---|---|---| | `batter_hits` | over/under | number | mlbid | Total Hits by Batter | | `batter_runs` | over/under | number | mlbid | Total Runs Scored by Batter | | `batter_rbis` | over/under | number | mlbid | Total RBIs by Batter | | `batter_bases` | over/under | number | mlbid | Total Bases by Batter | | `batter_h+r+rbi` | over/under | number | mlbid | Hits + Runs + RBIs by Batter | | `batter_walks` | over/under | number | mlbid | Total Walks by Batter | | `batter_strikeouts` | over/under | number | mlbid | Total Strikeouts by Batter | | `batter_stolen_bases` | over/under | number | mlbid | Total Stolen Bases by Batter | | `batter_singles` | over/under | number | mlbid | Total Singles by Batter | | `batter_doubles` | over/under | number | mlbid | Total Doubles by Batter | | `batter_triples` | over/under | number | mlbid | Total Triples by Batter | | `batter_home_runs` | over/under | number | mlbid | Total Home Runs by Batter | | `pitcher_hits` | over/under | number | mlbid | Total Hits Allowed by Pitcher | | `pitcher_earned_runs` | over/under | number | mlbid | Total Earned Runs by Pitcher | | `pitcher_outs` | over/under | number | mlbid | Total Outs Recorded by Pitcher | | `pitcher_walks` | over/under | number | mlbid | Total Walks Allowed by Pitcher | | `pitcher_strikeouts` | over/under | number | mlbid | Total Strikeouts by Pitcher | | `pitcher_win` | yes/no | — | mlbid | Did Pitcher Record a Win? | ### NHL #### head_to_head | MARKET | SIDE | POINT | SELECTOR | Description | |---|---|---|---|---| | `h2h` | home/away | — | — | Moneyline | | `h2h_m10` | home/away | — | — | First 10 Minutes (also m5) | | `h2h_p1` | home/away | — | — | Period Moneyline (p1-p3) | #### spread | MARKET | SIDE | POINT | SELECTOR | Description | |---|---|---|---|---| | `spread` | home/away | signed | — | Puck Line | | `spread_m10` | home/away | signed | — | First 10 Minutes Spread (also m5) | | `spread_p1` | home/away | signed | — | Period Spread (p1-p3) | #### total | MARKET | SIDE | POINT | SELECTOR | Description | |---|---|---|---|---| | `total` | over/under | number | — | Total Goals | | `total_m10` | over/under | number | — | First 10 Minutes (also m5) | | `total_p1` | over/under | number | — | Period Total (p1-p3) | #### game_prop | MARKET | SIDE | POINT | SELECTOR | Description | |---|---|---|---|---| | `btts` | yes/no | — | — | Both Teams to Score | | `goals_odd_even` | odd/even | — | — | Total Goals Odd/Even | | `overtime` | yes/no | — | — | Will There Be Overtime? | | `btts2g` | yes/no | — | — | Both Teams Score 2+ Goals | | `power_play_goals` | over/under | number | — | Total PP Goals Both Teams | | `shots_on_goal` | over/under | number | — | Total SOG Both Teams | | `btts_reg` | yes/no | — | — | Both Teams Score in Regulation | | `short_handed_goals` | over/under | number | — | Total SH Goals Both Teams | | `goals_odd_even_reg` | odd/even | — | — | Goals Odd/Even in Regulation | #### team_prop | MARKET | SIDE | POINT | SELECTOR | Description | |---|---|---|---|---| | `score` | over/under | number | team code | Total Goals for Team | | `score_p1` | over/under | number | team code | Period Goals (p1-p3) | | `score_reg` | over/under | number | team code | Regulation Goals | | `shots_on_goal` | over/under | number | team code | SOG for Team | | `power_play_goals` | over/under | number | team code | PP Goals for Team | | `score_odd_even` | odd/even | — | team code | Goals Odd/Even | #### player_prop | MARKET | SIDE | POINT | SELECTOR | Description | |---|---|---|---|---| | `player-points-yn` | yes/no | — | player code | Anytime Goal Scorer | | `player-assists-ou` | over/under | number | player code | Assists | | `player-blocks-ou` | over/under | number | player code | Blocked Shots | | `player-faceOffs_won-ou` | over/under | number | player code | Faceoffs Won | | `player-firstToScore-yn` | yes/no | — | player code | First Goal Scorer | | `player-goals-ou` | over/under | number | player code | Goals | | `player-hits-ou` | over/under | number | player code | Hits | | `player-lastToScore-yn` | yes/no | — | player code | Last Goal Scorer | | `player-goals+assists-ou` | over/under | number | player code | Points (G+A) | | `player-powerPlay_goals+assists-ou` | over/under | number | player code | PP Points | | `player-goalie_saves-ou` | over/under | number | player code | Saves | | `player-shots_onGoal-ou` | over/under | number | player code | Shots on Goal | ### NBA #### head_to_head | MARKET | SIDE | Description | |---|---|---| | `h2h` | home/away | Moneyline | | `h2h_q1` | home/away | Quarter Moneyline (q1-q4) | | `h2h_h1` | home/away | Half Moneyline (h1, h2) | | `ftts` | home/away | First Team to Score | | `ltts` | home/away | Last Team to Score | | `ltts_q1` | home/away | Last Team to Score in Quarter | #### spread | MARKET | SIDE | Description | |---|---|---| | `spread` | home/away | Point Spread | | `spread_q1` | home/away | Quarter Spread (q1-q4) | | `spread_h1` | home/away | Half Spread (h1, h2) | #### total | MARKET | SIDE | Description | |---|---|---| | `total` | over/under | Total Points | | `total_q1` | over/under | Quarter Total (q1-q4) | | `total_h1` | over/under | Half Total (h1, h2) | #### game_prop | MARKET | SIDE | Description | |---|---|---| | `points_odd_even` | odd/even | Total Points Odd/Even | | `overtime` | yes/no | Will There Be Overtime? | | `consecutive_points` | over/under | Most Consecutive Points by Same Team | #### team_prop | MARKET | SIDE | SELECTOR | Description | |---|---|---|---| | `points` | over/under | team code | Total Points by Team | | `points_q1` | over/under | team code | Quarter Points (q1-q4) | | `points_h1` | over/under | team code | Half Points (h1, h2) | | `consecutive_points` | over/under | team code | Most Consecutive Points | | `points_odd_even` | odd/even | team code | Points Odd/Even | | `points_odd_even_q1` | odd/even | team code | Quarter Points Odd/Even | | `points_odd_even_h1` | odd/even | team code | Half Points Odd/Even | #### player_prop | MARKET | SIDE | Description | |---|---|---| | `player-assists-ou` | over/under | Assists | | `player-blocks-ou` | over/under | Blocks | | `player-blocks+steals-ou` | over/under | Blocks + Steals | | `player-doubleDouble-yn` | yes/no | Double Double | | `player-fieldGoalsMade-ou` | over/under | Field Goals Made | | `player-firstBasket-yn` | yes/no | First Basket Scorer | | `player-freeThrowsAttempted-ou` | over/under | Free Throws Attempted | | `player-freeThrowsMade-ou` | over/under | Free Throws Made | | `player-points-ou` | over/under | Points | | `player-points+assists-ou` | over/under | Points + Assists | | `player-points+rebounds-ou` | over/under | Points + Rebounds | | `player-points+rebounds+assists-ou` | over/under | Points + Rebounds + Assists | | `player-rebounds-ou` | over/under | Rebounds | | `player-rebounds+assists-ou` | over/under | Rebounds + Assists | | `player-steals-ou` | over/under | Steals | | `player-threePointersMade-ou` | over/under | Three-Pointers Made | | `player-tripleDouble-yn` | yes/no | Triple Double | | `player-turnovers-ou` | over/under | Turnovers | ### NFL #### player_prop | MARKET | SIDE | Description | |---|---|---| | `player-touchdowns-yn` | yes/no | Anytime TD | | `player-fieldGoals_made-ou` | over/under | Field Goals | | `player-firstTouchdown-yn` | yes/no | First TD | | `player-passing_longestCompletion-ou` | over/under | Longest Pass | | `player-receiving_longestReception-ou` | over/under | Longest Reception | | `player-rushing_longestRush-ou` | over/under | Longest Rush | | `player-passing_interceptions-ou` | over/under | Passing Interceptions | | `player-passing_touchdowns-ou` | over/under | Passing TDs | | `player-passing_yards-ou` | over/under | Passing Yards | | `player-points-ou` | over/under | Points | | `player-receiving_yards-ou` | over/under | Receiving Yards | | `player-receiving_receptions-ou` | over/under | Receptions | | `player-rushing+receiving_yards-ou` | over/under | Rushing + Receiving Yards | | `player-rushing_yards-ou` | over/under | Rushing Yards | ### EPL | SECTION | MARKET | SIDE | Description | |---|---|---|---| | spread | `spread` | home/away | Point Spread | | total | `total` | over/under | Total Goals | ### UFC | SECTION | MARKET | SIDE | Description | |---|---|---|---| | head_to_head | `h2h` | home/away | Moneyline (home/away per UFC.com order) | | total | `rounds` | over/under | Total Rounds | --- ## Team Codes ### MLB | Code | Team | |---|---| | AZ | Arizona Diamondbacks | | ATH | Athletics | | ATL | Atlanta Braves | | BAL | Baltimore Orioles | | BOS | Boston Red Sox | | CHC | Chicago Cubs | | CWS | Chicago White Sox | | CIN | Cincinnati Reds | | CLE | Cleveland Guardians | | COL | Colorado Rockies | | DET | Detroit Tigers | | HOU | Houston Astros | | KC | Kansas City Royals | | LAA | Los Angeles Angels | | LAD | Los Angeles Dodgers | | MIA | Miami Marlins | | MIL | Milwaukee Brewers | | MIN | Minnesota Twins | | NYM | New York Mets | | NYY | New York Yankees | | PHI | Philadelphia Phillies | | PIT | Pittsburgh Pirates | | SD | San Diego Padres | | SF | San Francisco Giants | | SEA | Seattle Mariners | | STL | St. Louis Cardinals | | TB | Tampa Bay Rays | | TEX | Texas Rangers | | TOR | Toronto Blue Jays | | WSH | Washington Nationals | ### NHL | Code | Team | |---|---| | ANA | Anaheim Ducks | | BOS | Boston Bruins | | BUF | Buffalo Sabres | | CGY | Calgary Flames | | CAR | Carolina Hurricanes | | CHI | Chicago Blackhawks | | COL | Colorado Avalanche | | CBJ | Columbus Blue Jackets | | DAL | Dallas Stars | | DET | Detroit Red Wings | | EDM | Edmonton Oilers | | FLA | Florida Panthers | | LAK | Los Angeles Kings | | MIN | Minnesota Wild | | MTL | Montreal Canadiens | | NSH | Nashville Predators | | NJD | New Jersey Devils | | NYI | New York Islanders | | NYR | New York Rangers | | OTT | Ottawa Senators | | PHI | Philadelphia Flyers | | PIT | Pittsburgh Penguins | | SJS | San Jose Sharks | | SEA | Seattle Kraken | | STL | St. Louis Blues | | TBL | Tampa Bay Lightning | | UTA | Utah Mammoth | | VAN | Vancouver Canucks | | VGK | Vegas Golden Knights | | WSH | Washington Capitals | | WPG | Winnipeg Jets | ### NBA | Code | Team | |---|---| | ATL | Atlanta Hawks | | BOS | Boston Celtics | | BKN | Brooklyn Nets | | CHA | Charlotte Hornets | | CHI | Chicago Bulls | | CLE | Cleveland Cavaliers | | DAL | Dallas Mavericks | | DEN | Denver Nuggets | | GSW | Golden State Warriors | | HOU | Houston Rockets | | IND | Indiana Pacers | | LAC | Los Angeles Clippers | | LAL | Los Angeles Lakers | | MEM | Memphis Grizzlies | | MIA | Miami Heat | | MIL | Milwaukee Bucks | | MIN | Minnesota Timberwolves | | NOP | New Orleans Pelicans | | NYK | New York Knicks | | OKC | Oklahoma City Thunder | | ORL | Orlando Magic | | PHI | Philadelphia 76ers | | PHO | Phoenix Suns | | POR | Portland Trail Blazers | | SAC | Sacramento Kings | | SAS | San Antonio Spurs | | TOR | Toronto Raptors | | UTA | Utah Jazz | | WAS | Washington Wizards | ### NFL | Code | Team | |---|---| | ARI | Arizona Cardinals | | ATL | Atlanta Falcons | | BAL | Baltimore Ravens | | BUF | Buffalo Bills | | CAR | Carolina Panthers | | CHI | Chicago Bears | | CIN | Cincinnati Bengals | | CLE | Cleveland Browns | | DAL | Dallas Cowboys | | DEN | Denver Broncos | | DET | Detroit Lions | | GB | Green Bay Packers | | HOU | Houston Texans | | IND | Indianapolis Colts | | JAX | Jacksonville Jaguars | | KC | Kansas City Chiefs | | LV | Las Vegas Raiders | | LAC | Los Angeles Chargers | | LAR | Los Angeles Rams | | MIA | Miami Dolphins | | MIN | Minnesota Vikings | | NE | New England Patriots | | NO | New Orleans Saints | | NYG | New York Giants | | NYJ | New York Jets | | PHI | Philadelphia Eagles | | PIT | Pittsburgh Steelers | | SF | San Francisco 49ers | | SEA | Seattle Seahawks | | TB | Tampa Bay Buccaneers | | TEN | Tennessee Titans | | WAS | Washington Commanders | ### EPL | Code | Team | |---|---| | ARS | Arsenal | | AVL | Aston Villa | | BHA | Brighton & Hove Albion | | BRE | Brentford | | BRN | Burnley | | CHE | Chelsea | | CRY | Crystal Palace | | EVE | Everton | | FUL | Fulham | | LEE | Leeds United | | LIV | Liverpool | | MCI | Manchester City | | MUN | Manchester United | | NEW | Newcastle United | | NFO | Nottingham Forest | | SUN | Sunderland | | TOT | Tottenham Hotspur | | WHU | West Ham United | | WOL | Wolverhampton | ### WNBA | Code | Team | |---|---| | ATL | Atlanta Dream | | CHI | Chicago Sky | | CON | Connecticut Sun | | DAL | Dallas Wings | | GSV | Golden State Valkyries | | IND | Indiana Fever | | LVA | Las Vegas Aces | | LAS | Los Angeles Sparks | | MIN | Minnesota Lynx | | NYL | New York Liberty | | PHX | Phoenix Mercury | | SEA | Seattle Storm | | WAS | Washington Mystics | --- ## Player ID Conventions | League | SELECTOR Format | Source | |---|---|---| | MLB | 6-digit integer (e.g., `592450`) | MLB.com player page URL: `mlb.com/player/{name}-{mlbid}` | | NHL | Player code string | As used in NHL data feeds | | NBA | Player code string | As used in NBA data feeds | | NFL | Player code string | As used in NFL data feeds | --- ## Examples ### MLB Moneyline (two-sided) ```csv LEAGUE,DATE,HOME,AWAY,DOUBLEHEADER,SECTION,MARKET,SELECTOR,POINT,SIDE,WIN % MLB,20250410,COL,MIL,,head_to_head,h2h,,,home,-115 MLB,20250410,COL,MIL,,head_to_head,h2h,,,away,125 ``` ### MLB Run Line / Spread (two-sided, signed points) ```csv MLB,20250410,COL,MIL,,spread,spread,,-1.5,home,160 MLB,20250410,COL,MIL,,spread,spread,,1.5,away,-140 ``` ### MLB Team Prop (selector = team code) ```csv MLB,20250411,,,,team_prop,runs,NYY,3.5,over,-150 MLB,20250411,,,,team_prop,runs,NYY,3.5,under,130 MLB,20250411,,,,team_prop,hits,LAD,7.5,over,-150 ``` ### MLB Player Prop (selector = mlbid) ```csv MLB,20250411,,,,player_prop,batter_hits,592450,1.5,over,-150 MLB,20250411,,,,player_prop,batter_home_runs,592450,0.5,over,100 MLB,20250411,,,,player_prop,pitcher_strikeouts,543037,5.5,over,-120 ``` ### MLB Game Prop ```csv MLB,20250411,CLE,KC,,game_prop,hits,,,over,-130 MLB,20250411,CLE,KC,,game_prop,overtime,,,yes,300 ``` ### NHL Examples ```csv NHL,20250411,TBL,FLA,,head_to_head,h2h,,,home,-130 NHL,20250411,TBL,FLA,,total,total,,5.5,over,-110 NHL,20250411,,,,team_prop,score,TBL,2.5,over,-120 NHL,20250411,,,,player_prop,player-goals-ou,8478403,0.5,over,+150 ``` ### NBA Examples ```csv NBA,20250411,BOS,MIL,,head_to_head,h2h,,,home,-200 NBA,20250411,BOS,MIL,,spread,spread,,-6.5,home,-110 NBA,20250411,BOS,MIL,,total,total,,225.5,over,-110 NBA,20250411,,,,player_prop,player-points-ou,203999,28.5,over,-115 ``` --- ## Notes for AI Model Builders 1. **Probability format**: Decimal probabilities (0.00-1.00) are cleaner for programmatic output. American odds are accepted for convenience but add conversion complexity. 2. **Two-sided markets**: Most markets require two rows. Over/under pairs should sum to approximately 1.00 (before vig). Home/away moneyline pairs should also sum to ~1.00. 3. **Point selection**: Choose points that match what sportsbooks actually offer. Common MLB totals: 6.5-10.5 (full game), 4.5-6.5 (F5). Common player prop points vary by stat — check current sportsbook offerings. 4. **Batch upload**: CSV upload is the fastest method. Generate your full slate programmatically, save as CSV, upload once. 5. **Incremental updates**: You can upload partial slates. New lines for the same game/market/side/point will update existing entries.