Getting the Most Out of a Free Tool That Actually Works
Most people treat the Rotowire optimizer like it is some kind of crystal ball. It is not. It is a spreadsheet with constraints, and if you understand how it calculates things, it can save you a ton of time during Sunday preparation. If you treat it blindly, it will hand you a lineup that looks fine on paper and tanks your week.The tool sits on Rotowire.com under their fantasy football section. It is free, no account required to run basic projections. You input your roster requirements, lock in your studs, set salary limits if you are running a GPP or cash game hybrid, and it spits out a projected top end. The interface has been around in roughly the same form since 2018, which means it is stable but not particularly polished. That stability is actually a feature here. I spent about four years using this as my primary optimization backbone before shifting to a custom script for my deeper DFS work. The reason I stuck with it for so long was speed. A full 17-week season optimization pass, running through all my matchup projections and injury flags, takes about twelve minutes. That is without any adjustments. With adjustments, maybe twenty minutes on a good day. I have seen people manually building lineups who spend two hours and still miss the same correlations the optimizer catches automatically. The optimization itself runs on a linear programming solver. You do not need to know the math, but you do need to know what that means in practice. The solver finds the highest projected point total within your roster constraints. It does not factor in variance, floor plays, or the likelihood of a game script going sideways unless you build that in yourself. That gap is where most people get burned.
How the Input Process Actually Works
You start by uploading or manually entering a player pool. The cleanest way is to pull projections from a single source rather than mixing them across sites. Rotowire has its own projections, but most users import from ESPN, Yahoo, or a custom CSV. I always use my own adjusted projections because the default numbers tend to overheat tight ends in positive game scripts and undersell running backs in short-yardage situations. Once your pool is loaded, you set your lineup slots. Standard NFL optimized lineups usually include one quarterback, two running backs, two wide receivers, one tight end, and a flex spot. Some platforms allow a superflex or DST slots. The optimizer will respect whatever configuration you define. Salary cap mode adds another layer where each player gets a price tag and you must stay under a total threshold. That changes how the solver weights players because a cheap high-upside play can displace an expensive safe option even if the safe option has higher raw projections. Locking players is straightforward. You select which rosters or players are locked in and the optimizer will leave them fixed while reshuffling the rest. This is the feature that matters most in practice. If you decide your quarterback lock is non-negotiable, lock him and let the algorithm build around him rather than fighting the output.
The Correlation Problem Nobody Talks About
Here is the thing that trips up beginners. The optimizer will put a quarterback and his top wide receiver on the same lineup without any hesitation because it maximizes total projected points. In cash games that is usually fine. In GPPs it is a liability. When that quarterback has a bad day, both of those players tank together. You have effectively cut your roster size in half without meaning to. Rotowire does not have a built-in correlation toggle. You handle this by manually removing the correlated player from your pool or locking the quarterback and excluding his primary target. I keep a separate stack list in a side document and simply delete correlated candidates before running the optimizer. That adds about three minutes to the process but it prevents the kind of lineup collapse that happens when three of your five skill players are tied to the same offense.
Get the Full Details

A Real Example From Last Season
Week 12 last year I ran the optimizer with my full projections. It produced a clean top line that included a specific running back who had a favorable matchup on the surface but was playing behind an offensive line that had lost its left guard two days earlier. The projection editor had not yet adjusted for that. The optimizer happily gave me the play because the raw projection was still strong. I caught the O-line detail from a beat reporter tweet and removed that back from my pool. The next iteration dropped his replacement by maybe four projected points but gave me a much cleaner game script exposure. That back ended up with three carries and four yards. The replacement had twenty touches and a touchdown. Not a huge swing in the grand scheme, but in a head-to-head league those four points are the difference between making the playoffs and watching someone else do it. It will not tell you when to bench a player because of a late scratch. It will not account for weather shifts on game day. It does not know that a coach is riding a running back into double digits in goal line work or that a wide receiver is dealing with a hamstring issue that has not made the injury report yet. All of that is manual. The optimizer is a projection engine, not a situational analysis engine. There is also a limit to how many players you can run at once. The free version handles a standard pool without issue, but if you try to feed it a mega pool with over two hundred options, the solver starts taking longer and occasionally returns suboptimal results due to timeout constraints. I have never hit that wall in normal play, but it is worth noting if you experiment with large rosters.
Setting Up a Practical Workflow
Here is the routine I used most weekends. Friday afternoon I pull projections and input them into the tool. I flag any confirmed injuries with a note and remove or downweight those players. Saturday morning I run the first optimization pass. I review the output for correlation conflicts and stack issues. I then adjust based on any new information that broke overnight, like a late scratching question mark or a shifted betting line. Sunday morning I do one final pass, lock my confirmed starters, and generate the final slate. The whole thing takes about fifteen to twenty-five minutes depending on how many adjustments you need. That is the realistic time investment. Anything less and you are not actually using the tool properly. Anything more and you are second guessing yourself excessively.
When to Skip It Entirely
There are weeks where the optimizer is almost useless. Those are single-point game environments where one player is massively overloaded, like a backup quarterback throwing for forty attempts because his team is a massive underdog. The projections will skew heavily toward that one passer and the optimizer will flood your lineup with him and his targets. In those scenarios the variance is so high that projection-based optimization loses its edge. I manually build those lineups instead, focusing on floor plays and avoiding the overexposed star. Another scenario where I abandon it is when the player pool is too thin. Small sample sizes, early season games with limited history, or weeks with major injury replacements. The projections are less reliable and the optimizer will happily produce garbage with confidence. In those cases I rely on more conservative approaches or skip optimization altogether and go with experienced gut calls.

A Few Technical Details That Help
If you are comfortable with spreadsheets, export your optimizer output to CSV. That lets you sort by projected points per dollar in salary cap mode or by ceiling floor spread if you want to analyze variance. Rotowire does not have a built-in export function beyond the web interface, so copying to a sheet is the only way to do deeper analysis. Another trick is to run multiple iterations with different locks. Instead of accepting the first result, lock one player from the top output and rerun. This gives you an alternate lineup that respects your preference while still being mathematically optimized around it. I usually run three to five iterations before settling, which adds maybe five minutes but gives me more flexibility if my original choice gets a late scratch. The tool also lets you set minimum and maximum player limits per team in some configurations. That is useful if you want to limit exposure to a single team or ensure you have representation from multiple high-total games. It is an underused feature and it can be the difference between a balanced lineup and one that is overweighted toward a single predictable outcome.
Bottom Line
The Rotowire optimizer is a solid foundation for NFL fantasy lineup construction. It is fast, free, and accurate within the bounds of whatever projections you feed it. It is not a substitute for situational awareness or injury monitoring. Use it as a starting point, not a final answer. The people who get consistent value from it are the ones who understand its blind spots and adjust for them manually. Everything else is just filling out a form and hoping for a good result.