DFS
Build DFS lineups from a salary export.
Upload your DraftKings or FanDuel salary export and we add our weekly projections for the skill positions, then build cap-legal lineups — up to 20 per build free, or the engine's full 500 with a Season Pass. Advanced mode takes your own salaries-and-projections CSV instead. Either way the file is parsed and solved right here in your browser.
Quick answer
How does this free DFS lineup optimizer work?
Upload a DraftKings or FanDuel salary export and the optimizer adds our weekly projections for the skill positions, defaulting defenses to an editable punt. It then builds distinct cap-legal lineups, best projection first — up to 20 per build free, or 500 with a Season Pass. Advanced mode still takes your own CSV, and your file never leaves your machine.
Your unedited DraftKings or FanDuel salary export. Skill-position projections and a DST punt value are added automatically when weekly projections are posted.
Player pool
No pool yet. The optimizer starts when your CSV does.
Rules
Needs opponent data — the optimizer doesn't know who plays whom.
Build
Lineups
Nothing built yet.
FAQ
Where do the salaries come from?
Your salary export — in both modes. Slate mode reads salaries straight from your unedited DraftKings or FanDuel file and fills in our weekly projections for the skill positions; advanced mode expects salaries and projections already merged into one CSV. Both modes parse the file in your browser; the file itself is never uploaded.
Where do the projections come from?
In slate mode they are ours. A weekly model rates quarterbacks, running backs, receivers, and tight ends for the site you pick, DraftKings or FanDuel, as a single point estimate. That number auto-fills when your salary file loads. Fresh projections post each week during the season, and each week is graded afterward on our public accuracy ledger. Team defenses are not projected; they default to a flat punt value instead.
Why does every defense show the same number?
Because we don't rate defenses. We hold no defense-scoring data to build or grade a projection on, so instead of a made-up number, every team defense gets the same flat punt value and a "not rated (punt)" badge. With the projections equal, the solver separates defenses by salary alone, so it has no reason to spend up at defense. You can type your own number over any defense if you disagree.
Can I load a projection export from another tool as-is?
In advanced mode, usually not. Advanced mode wants one CSV carrying Player, Position, Team, Salary, and Projection, but most projection exports have only Player and Projection. With no salaries, a salary cap has nothing to bind, so the upload fails with the exact missing columns named rather than a guess. Either merge your projections onto a salary list yourself, or use slate mode, which reads a raw salary export and adds our projections for you.
What columns does the CSV need?
In advanced mode, five — matched by name in any order: Player, Position, Team, Salary, Projection. Headers are case-insensitive, extra columns are ignored, and spreadsheet formatting like $7,500 or 6,000 parses fine. Three optional columns are read when present: Ceiling joins the pool table, Max Exposure pre-fills that player's exposure cap, and Projected Ownership is carried with the pool. For team defense, DST, DEF, D, and D/ST all work. Slate mode needs none of this — it reads a raw salary export instead.
How are the lineups picked?
Each lineup is the best remaining roster under the salary cap, the slot rules, and whatever you locked, excluded, boosted, or capped. After every solve that exact lineup is barred and the solver runs again, so results come back best-first with no duplicates. If your pool runs out of legal lineups before the count you asked for, the page says so rather than padding the list.
Is it really free?
Yes — every build up to 20 lineups is free, with no trial and no account required. The Season Pass raises the per-build count to the engine's 500 maximum. Free or paid, the solving happens on your machine, not our servers.