My Projections

Download the projections, change what you disagree with, hand the file back — or upload somebody else's file entirely: any .xlsx or .csv with a header row, from Dobber to a table you pasted out of a PDF. Only your changes are stored, layered over the model, so when the model updates your edits survive and everything you did not touch keeps improving.

Start with our projections

Every skater and goalie we project, every category, as a spreadsheet. This same file is the import template — edit any white cell, delete the rows you do not care about, and hand it back. It carries a player_id per row, so it matches exactly and nothing has to be looked up by name. No account needed.

Or bring projections you already have

Dobber Hockey, The Athletic, Scott Cullen, your own spreadsheet — upload the file and the Advanced Projection Sandbox runs on those numbers instead of ours. You bring your own copy. These are other people's products and we do not host, bundle or resell them: download yours from whoever you bought it from, and it stays yours. Nothing to reformat and nothing to tidy up: we read .xlsx or .csv, match on the player's name, and cope with the way real files are actually built — a header that starts halfway down the page, several tabs covering different stats, more than one table side by side on the same tab.

All it needs is a header row with a Player column and whichever stats you have — GP, G, A, PTS, PPP, SOG, HIT, BLK, PIM, +/-, FOW/FOL, or the goalie columns. Column names can be anything reasonable: Goals, G andGls all land in the same place. Include a Team column if you can — it is what separates two players who share a name, and without it we skip them rather than guess. Where a stat appears on more than one tab we keep the first one, so a per-game table further along cannot overwrite a season total. Anything we cannot place comes back to you by name.
Sign in to save your own

An account is what your edits belong to. You can keep ten sets a season, and each one stores only what you CHANGED — so when our model updates, your changes survive and everything you did not touch keeps improving.

Importing from somewhere else

You do not have to use our file. Any .xlsx or .csv with a header row will do — a name column and at least one stat column. Upload it against a set and it is read the same way ours is.

Kodo's own export

Download above, edit any cell, upload it back.

Carries player_id, so nothing is matched by name and nothing can be ambiguous. The most reliable route, and the reason the download doubles as the template.

Dobber Hockey

Export the projections to .csv or save the workbook as .xlsx, then upload it whole.

Long headers (“Shots on Goal”, “Blocked Shots”, “PP Points”) are all understood. Multiple sheets are read; where the same player appears twice the FIRST value wins, which keeps a per-game tab from overwriting the totals tab.

FantasyPros / Yahoo / ESPN exports

Export to CSV and upload it unchanged.

Short headers (G, A, PTS, PPP, SOG, HIT, BLK) are the ones the parser knows best. Extra columns it does not recognise — ADP, tier, notes, bye — are ignored rather than rejected.

A subscription PDF or a paywalled table

Copy the table into a spreadsheet, keep the header row, save as .csv.

A title row or two above the header is fine; the parser looks down the first 25 rows for it.

Your own numbers, from scratch

Two columns is a valid file: a name column and one stat.

Player,Points is enough. Everything you do not supply keeps tracking the model.

Goalies

Same file or a separate one. Head the name column Goalie, Goaltender, Player or Name.

GS, W, L, SV%, GAA, SO, SV, SA and GP are all read. “Games” means starts on a goalie sheet and appearances on a skater sheet, and the importer tells them apart by which player the row is.

Column names it understands

Case and punctuation do not matter, and a projection prefix is stripped —PP.PTS, pp points and Proj. PP Pts are one column asked for three ways.

Who the row isrequiredPlayer · Name · Full Name · Skater · Goalie · Goaltender
Which clubrecommendedTeam · Tm · Club · NHL Team
ScoringG · A · PTS/P · PPG · PPA · PPP · SHG · SHA · SHP · GWG
PeripheralsSOG/Shots · HIT/Hits · BLK/Blocks · PIM · +/- · FOW · FOL
GamesGP · Games · Games Played
GoaliesGS/Starts · W · L · OTL · SV% · GAA · SO · SV · SA

The three things that actually go wrong

  1. Two players share a name. The importer will not guess. Add a Team column and it resolves them; where it still cannot, it hands the names back for you to settle rather than attaching the numbers to the wrong man. Two-letter codes are fine — TB, SJ, LA and NJ are read as TBL, SJS, LAK and NJD.
  2. A name we do not carry. Junior and European names that have never played an NHL game are reported back by name after the upload, not silently dropped.
  3. A total that contradicts its parts. Give goals and assists and points is recomputed. Give points alone and yours is kept — plenty of published projections never split it, and recomputing from parts that were never uploaded would discard the one number you paid for.

Getting it into the draft

A set is not a copy, it is a layer: only what differs from the model is stored, so the rows you never touched keep improving as the model updates. Once a set exists, pick it by name in:

  • Prep room — the Projections dropdown, top right. The board, the tiers and the ledger all rebuild off it.
  • Mock and Live portal — they read whatever Prep is set to, so there is nothing to choose twice.
  • Draft spreadsheet — the Projections dropdown in the builder. The workbook is generated off your numbers, values, tiers and all.
Derived totals recompute from their parts, so a row cannot contradict itself: raise a man's goals and his points follow. Rows you delete are simply not imported — the file is keyed on player_id, not on row order, so a forty-row file works exactly as well as a nine-hundred-row one. Back to the projections table →
My Projections · Kodo Hockey · Kodo Hockey