Kind of Lost Kind of Lost · OR Tools · NHL Lineup Optimizer · Support

NHL Lineup Optimizer

Upload the player pool straight from DraftKings or FanDuel — nothing else. The tool pulls tonight's forward lines, power-play units and confirmed starting goalies from Daily Faceoff for the teams on your slate, then builds a diverse set of lineups ready to upload back. Free tool by kindoflost.

1 · Site & player pool

DraftKings NHL Classic: C, C, W, W, W, D, D, G, UTIL · $50,000 cap.
📥 Drop the player pool CSV here, or browse
This reads the DraftKings NHL player-pool export (Position, Name + ID, Salary, Game Info, TeamAbbrev…), not a spreadsheet of your own.
📈 Drop projections here, or browse
Columns: an id or name column + a projection column.
Already have your own line chart? (optional)
🏒 Drop a line-combinations CSV here, or browse
Columns: Team, Unit, Player1…Player5. Unit is L1–L4 (forward lines), D1–D3 (pairings), PP1/PP2 (power-play units), or G (starter). For anyone who pays for a line-chart service and would rather use theirs.

What is this NHL DFS lineup optimizer?

A free NHL DFS optimizer for DraftKings and FanDuel — no signup, no paywall, no “3 free lineups” teaser. It solves a real mixed-integer program (the same math the paid tools use) to build a set of lineups that are individually strong and collectively different, because in large tournaments one good lineup is easy — twenty is the hard part.

How it works

  1. Export the player pool from DraftKings or FanDuel and upload it. That is the only file you need.
  2. The tool pulls the forward lines, power-play units and confirmed starting goalies for the teams on your slate from Daily Faceoff and fills the Line and PP columns. Hit refresh any time — lines move at the morning skate and goalies get confirmed close to puck drop. Every value stays editable.
  3. Trim the pool: lock, exclude, or cap exposure on any player, and overwrite projections.
  4. Set the rules — how many units to stack and how deep, what your goalie is allowed to correlate with, and how different each lineup must be from the rest.
  5. Generate. You get salary-cap-legal lineups in a CSV formatted for direct re-upload.

Why hockey stacks are different

DraftKings NHL Classic is nine slots — two centers, three wingers, two defencemen, a goalie and a utility — under a $50,000 cap, with skaters from at least three teams. FanDuel NHL Classic is also nine: two centers, two wingers, two defencemen, two utilities and a goalie, under a $55,000 cap, with no more than four players from one team. Under the hood that is a knapsack problem: maximize projected points subject to the cap and the position rules.

What makes hockey its own thing is the unit. A forward line is three players who change together, share ice time, and share goals — one goal pays the scorer and both assisters. A power-play unit is five players doing the same thing with a man advantage, and it is not a line: it is assembled from the best players across several lines, which is why it needs its own column. Meanwhile your goalie is negatively correlated with the skaters he faces, so rostering both is a bet against yourself. The optimizer treats all of that as hard constraints.

Common questions

Is it really free? Yes — it is a working demo of optimization models I have built for 20+ years. No account, no lineup limit tricks.

Where do the line combinations come from? Daily Faceoff, which publishes them free. The tool pulls only the teams on your slate, when you load the pool and again whenever you hit refresh. If that lookup ever fails — the source is down, or goes premium, as line-chart sites have a habit of doing — nothing breaks: the pool still loads, the solver still runs, and you can type the Line and PP columns in yourself or upload your own chart.

How current is it? As current as the source. Lines are cached for about ten minutes and starting goalies for about four, and the refresh button goes past the cache. A goalie only counts as starting when he is reported confirmed or likely — an unconfirmed goalie is the source guessing from the schedule, and the tool will not pass a guess off as a confirmation.

Does it support Yahoo? Yes, multi-game contests. Yahoo lineups carry two goalies and no utility under a $200 cap; the tool keeps the two goalies in different games. Upload the player export, plus the contest template so the download has Yahoo's full player IDs.

Does it support FanDuel? Yes. Pick FanDuel in step 1 and upload the players-list CSV from the contest page. The download is FanDuel's own upload format (C, C, W, W, D, D, UTIL, UTIL, G), up to 250 lineups per file. FanDuel's file has no starting-goalie column, so starters come only from the line lookup — or from a 1 you type in a goalie's Line column.

What about Showdown / single-game contests? Not yet — classic full-slate only.

Are the projections any good? The optimizer uses the projections in your file — and you can overwrite any of them. Its job is squeezing the most out of whatever projections you trust.

Do you have one for other sports? Yes — MLB and NFL, which work the same way with batting-order and quarterback stacking instead.

Get an email when we ship updates to the NHL optimizer. Low volume, unsubscribe anytime.

Questions people actually ask

The hockey vocabulary is the hard part, not the optimizer. Click any question.

What is the difference between a line, a power-play unit and a “unit”?
A line is a forward trio — left wing, centre, right wing — who skate a shift together. Four per team. A power-play unit is the five skaters a coach sends out on the man advantage, usually four forwards and a defenceman, picked across lines rather than being one line. Two per team. A defence pair is the two defencemen who skate together, three per team. Unit is this tool’s umbrella word for any group whose players score together, because the stacking rules treat them the same way. Only lines and power-play units can be stacked; defence pairs are read and numbered but never stacked.
Do I have to supply the line combinations myself?
No. Upload the DraftKings or FanDuel player-pool CSV exactly as it downloads — that is the only file you need. Neither site ships line combinations, so the tool looks them up from Daily Faceoff for just the teams on your slate, along with power-play units and confirmed starting goalies. Refresh it any time — lines move at the morning skate and goalies get confirmed an hour before puck drop. If the lookup fails, the tool still works: you can type the Line and PP columns in yourself, or turn stacking off.
What does “2 units × 3 players” actually mean?
Three players from each of two different lines or power-play units — the classic double stack, six skaters in two correlated blocks. Each stack row reads n units × k players, and the rows add together rather than overlapping, because one unit can only satisfy one row. So adding row B at 1 × 2 gives you one more unit contributing two players: 3-3-2.
Do the two stacks have to be from different teams?
Yes, with Each stack from a different team on, which is the default. It matters more than it sounds: a team’s second line and its second power-play unit share players, so without that rule the solver can satisfy “two units” with about five skaters from one team and call it a double stack. Switch it off if you actually want a heavy single-team stack — it is a legitimate play, just a different one.
Can a stack be two defencemen?
No. Only lines and power-play units are stackable, and neither is a pair of defencemen. But a stack is not purely forwards either: every power-play unit includes a defenceman, so a 2-player power-play stack can legitimately be that defenceman plus a forward.
Is the stack salary window measured across all stacked players?
Yes — it sums the full salary of every selected unit, and it counts the whole unit, not just the members that ended up in your lineup. So the window has to move with the shape you asked for. Two lines is six salaries; add a power-play unit and it is eight. The 50–75% default suits the 2 × 3 GPP shape. For a single 1 × 3 stack the Cash preset correctly turns the window off, because half the cap on three players is unreachable.
“Max shared lines / PP units vs any prior lineup” — if I use a line once, can I use it again?
Yes, as often as you like. The check runs separately against each earlier lineup: against any single one of them, at most this many units in common. At 1, if lineup 1 was Colorado’s line 2 plus Pittsburgh’s line 2, a later lineup may reuse either one — it just cannot reuse both. In plain terms: no two lineups may carry the same pair of stacks. That is the rule that stops twenty lineups being twenty shades of the same two stacks, which a player-overlap cap cannot do — swap one winger and the stack is identical.
Why did I ask for 150 lineups and get 54?
Almost certainly the clock, not the rules. Each new lineup has to differ from every lineup before it, so the work grows as the set grows: measured on a twelve-team (six-game) slate, about 2–2.5 seconds a lineup early in the batch and about 4–6 seconds by the fiftieth. The message under the button now tells you which of the two ran out. If it was time, use Keep going to N — it keeps what you have and constrains the new lineups to differ from them, which a fresh run cannot do because it has never seen them. Loosening the Tier 3 caps is not the fix: measured one at a time, every one of them moved the count by under 8%, and half made it worse.
Do the lineup patterns override the settings above them?
Only two of them. A pattern replaces your stack shapes (the A/B/C rows) and which kinds of unit may be stacked, for the lineups it governs. It then adds rules that have no control of their own — whether a stacked team must also give you a defenceman, whether your two defencemen come from the same game or different ones, and whether every stack must come from one game. Everything else still applies exactly as you set it: the salary window, exposure caps, cooldowns, minimum skater teams, max players per team, confirmed goalies and declared skaters. One asymmetry worth knowing — a pattern can turn on “goalie from a stacked team”, but it cannot turn it off if you switched it on yourself.
Where do the projections come from, and can I use my own?
By default the tool uses the site's own season average — AvgPointsPerGame in the DraftKings file, FPPG in the FanDuel one — which is an average of actual fantasy points, a fallback, not a forecast. There is no projection model here and the tool does not pretend otherwise. Upload your own projections and they replace it, which is the recommended way to use this: the optimizer is only ever as good as the numbers you feed it.
What actually changes between Cash and GPP?
Cash wants one best lineup and is happy to repeat it: a single 3-man stack, at least 90% of the cap spent, four skater teams, the goalie tied to a stacked team, and almost no diversity between lineups — which is correct, because in a cash game twenty near-copies of your best lineup is the right answer. GPP wants many different shots: two stacks, the salary window on, 40% player exposure, cooldowns, and unit-level diversity. The diversity is exactly what makes a GPP batch slow.
Is a unit cooldown of 9 too high?
It depends entirely on slate size, and the number is not arbitrary — it is ported from the Excel model this tool replaces. On a twelve-team (six-game) slate there are 48 forward lines to stack — 72 units if you switch power-play stacking on — so freezing the ones used in the last 9 lineups (up to 18) leaves most of them free. On a three-game slate there are about 24 lines, and a cooldown of 9 can put most of them on ice at once. So the tool now sizes it for you: when the pool loads, and whenever you pick GPP, K is set to three-quarters of the number of teams on the slate, between 2 and 9 — 9 on twelve teams, 4 on six. Type your own number and it stays. The companion setting caps how many recently-used units may return: at 1 a lineup reusing a recent line must find its other stack among rested units; at 0 it is a literal ban, which on a twelve-team slate with lines only ran dry after six lineups in testing — if that happens, the Relax one rule and continue button loosens one setting at a time.
How do I use the Vegas lines?
Load your file, then press Load Vegas lines in step 2 — NHL lines post around game day, and preseason games carry none. Each team gets an Impl number: the goals Vegas expects it to score, worked out by splitting the game total with the moneyline. It is an approximation, not a sportsbook team total. Sort the list by Impl to see the slate from the top down, then go to step 3 → Tier 2 → Vegas rules. Only stack teams implied ≥ means a team below that number cannot have its lines or power-play units stacked. No goalie facing a team implied ≥ keeps your goalie away from the offenses Vegas likes. Both boxes start blank, which means off. They never change the blue checkboxes, a team whose game has no line is never filtered, and if a number leaves nothing to build with you get a message saying so.
What does Update injury list do?
It checks every player on your slate against ESPN’s injury report. Players listed out, on injured reserve or suspended are unchecked — tick them back if you disagree; day-to-day players just get a badge. A confirmed starting goalie stays checked with a ⚠ badge, because a confirmation is fresher than an injury note; a skater on a projected line who ESPN lists as out is unchecked with the same badge. Use On/Off by status above the player list to switch a whole status on or off at once.

Who built this

I'm Mario — an operations research analyst with 20+ years in optimization and supply chain (Cargill, Cessna Aircraft, Textron Aviation). Daily fantasy lineup building is a knapsack problem in a costume: the same constrained-optimization math I used for scheduling and routing, just with a salary cap instead of a truck. This NHL DFS tool runs a real MILP solver (PuLP/CBC) end to end, not a heuristic or a spreadsheet formula. More about me and the other free tools →