Scalloped potatoes are a dish of patience. You slice potatoes until your wrist aches, you layer them into a dish, you pour something rich over the top, and then you wait an hour while the kitchen fills with the smell of dairy and garlic browning. What comes out is soft, savory, faintly sweet from the onion, and covered in a blistered brown lid of cheese. It is the pan that empties first at Thanksgiving and the one people go back to with a spoon at 11pm.
So we built the standard holiday version - three pounds of russets, two cups of heavy cream, half a stick of butter, eight ounces of cheddar - and ran it through the Eat Well Planner Nutrition Score. It came back at 34 out of 100. The number that stops you is saturated fat: about 21 g per serving, which is 89% of a day's Daily Value, and more than the entire daily limit the American Heart Association suggests for most adults. From a side dish. Eight servings into a 9x13 pan.
Then we rebuilt it one swap at a time, re-scoring against live nutrition data after every single change. The finished gratin scores 56 - twenty-two points higher - with 69% less saturated fat, 45% fewer calories, and a top that still browns and bubbles and cracks under a spoon. The cream swap you are already expecting was worth 11 points, which is exactly half the total. The other half came from four things nobody puts in a scalloped potato recipe. Here is all of it.
The original: what's in it and how it scores
The version we scored is the one in most family binders: 3 lb of russet potatoes sliced thin, a sauce of 2 cups heavy cream thickened with 2 tablespoons of flour and 4 tablespoons of butter, 8 oz of shredded cheddar, one small onion, two cloves of garlic, 2 teaspoons of salt, thyme and pepper. Baked in a 9x13 and cut into eight servings. Here is one serving:
- Nutrition Score: 34 / 100
- Calories: about 523
- Saturated fat: about 21 g (89% of the Daily Value, flagged very high)
- Sodium: about 830 mg (36% of the Daily Value)
- Fiber: about 2.6 g
- Protein: about 12 g
- Plant points: 2.75
Saturated fat is the whole story, and it is worth being precise about where it comes from, because the instinct is to blame the potatoes. It is not the potatoes. Of the roughly 168 g of saturated fat in the whole pan, about 95 g comes from the heavy cream, about 30 g from the butter, and about 43 g from the cheddar. The potatoes contribute almost none - fresh potatoes are, as Harvard's Nutrition Source puts it, virtually fat-free. Everything on the caution list arrived in the pan after the potatoes did.
The second problem is quieter: 2.75 plant points and 2.6 g of fiber. This is a large, filling, hour-long dish built out of essentially one vegetable. A serving is 523 calories and does almost nothing for plant diversity, which matters if you are tracking the thirty-different-plants-a-week target from gut microbiome research.
And then the part that deserves defending. The potatoes are genuinely good for you and the score agrees - the original still rates as an excellent source of vitamin B6 (50% DV), phosphorus, calcium and potassium. Potatoes carry more potassium per standard serving than any other vegetable, about 544 mg per 100 g cooked. There is no added sugar. Nobody needs to feel bad about a potato. The dairy load is the problem, and the dairy load is fixable without the dish noticing much.
The upgrades
Five changes, each scored on top of the last, in the order we would actually make them. If you only do the first one, you get half the total gain for about four minutes of extra work.
1. Swap the cream sauce for a garlic-thyme milk sauce
- Swap: 2 cups heavy cream + 2 tbsp flour + 4 tbsp butter, to 2 1/2 cups whole milk + 2 1/2 tbsp cornstarch + 2 tbsp butter
- Score impact: +11 points (34 to 45)
- What it changes: Saturated fat falls from 21 g to 8.5 g a serving; calories fall from 523 to 338
- What it costs you: Slightly less lush on the tongue. It is still creamy - you have to be looking for the difference
This is the swap, and it is worth exactly as much as the other four combined. The technical catch is real though, and it is why most people who try milk in scalloped potatoes go back to cream: milk curdles where cream does not. Heat splits dairy, and as chef Sara Moulton explains it, the lower the fat in the milk, the more likely it is to happen. Fat is what was protecting you.
Starch takes over that job. Swollen starch granules physically get in the way of the milk proteins that would otherwise find each other and clump, which is why starch keeps low-fat dairy sauces smooth - and why the potatoes' own starch has been quietly saving your gratin all along. So instead of pouring milk over raw potatoes and hoping, you make an actual sauce first: bloom the garlic and thyme in the butter, whisk in milk slurried with cornstarch, and simmer until it coats a spoon. Cornstarch rather than a flour roux because it thickens with about half the quantity and leaves the sauce glossy instead of pasty - our cornstarch guide covers the ratios if you want to swap in something else. If you would rather understand the cream side of this trade, the heavy cream substitutes guide goes through what each replacement does under heat.
2. Add a layer of spinach
- Swap: Add 7 oz of fresh spinach, wilted and squeezed dry, as a middle layer
- Score impact: +6 points (45 to 51)
- What it changes: Vitamin K lands at 106% of the Daily Value, plant points go from 2.75 to 3.75, protein up to 13.6 g
- What it costs you: A green stripe through the middle when you cut it. Some people love this and some people are annoyed by it
The second most valuable change in the entire post takes nothing away. It only adds - and it beat halving the cheese by five points. That is the thing worth internalizing about makeovers generally: the additions are usually the cheap wins, and everyone reaches for the subtractions first. Seven ounces of raw spinach is an alarming pile that cooks down to about half a cup, disappears into the middle of the dish, and tastes mostly of the sauce it is sitting in.
One non-negotiable step: wilt it in a dry pan and then squeeze it genuinely dry, hard, over the sink. Spinach is about 91% water and every drop of it that goes into the pan comes back out under the potatoes as a gray puddle. Squeeze until it stops giving.
3. Use celery root for a third of the potatoes
- Swap: 3 lb russet potatoes, to 2 lb russets + 1 lb celery root
- Score impact: +3 points (51 to 54)
- What it changes: Plant points from 3.75 to 4.75, fiber up, and about 20 calories a serving off
- What it costs you: A real flavor change - nutty, faintly celery-ish. It is the swap most likely to get noticed
Celery root looks like something dug up by accident and tastes like celery crossed with a parsnip. Potato-celeriac gratin is a legitimate French classic rather than a diet invention, and the reason it works is that celery root has enough savory backbone to stand in for potato without anyone thinking a vegetable has been smuggled in. A third is the ratio we settled on. Half is also good but at that point the dish has a new name.
Technique matters here more than in any other swap. Celery root is denser and less starchy than potato, so it softens more slowly - America's Test Kitchen handles this by leaning on acidity to hold the potatoes together while the root vegetables catch up. The simpler fix at home is to slice everything a true 1/8 inch on a mandoline, keeping the celery root at the thin end of that, and to bake covered for the first stretch so the whole dish steams before it browns.
4. Less cheese, but much sharper
- Swap: 8 oz medium cheddar, to 4 oz sharp cheddar in the layers + 1 oz gruyere on top
- Score impact: +1 point (54 to 55)
- What it changes: Saturated fat from 8.5 g to 6.6 g a serving (36% to 28% DV); calories from 324 to 283
- What it costs you: Protein drops from 13.3 g to 11.3 g. Flavor does not drop, if you buy the right cheese
Cutting the cheese nearly in half moved the score by exactly one point, which is a useful thing to know before you spend any willpower on it. The reason to do it anyway is that it takes saturated fat off the caution list, and the reason it does not hurt is that sharpness is not the same as quantity. A well-aged sharp cheddar has spent months developing the compounds that read as cheesy, so four ounces of it lands harder than eight ounces of the mild orange block. Our cheddar cheese guide gets into which cheeses melt and which turn oily, which matters when you are using less of it.
Save the gruyere for the top and add it in the last twenty minutes uncovered. Gruyere browns beautifully and it is the smell people actually respond to when the dish comes out. One ounce over the surface does more visible work than four ounces buried between layers.
5. More aromatics, less salt
- Swap: Garlic from 2 cloves to 5, thyme doubled, plus 1 tbsp Dijon, 1/2 tsp nutmeg and 2 tbsp parsley; salt from 2 tsp down to 1 1/4
- Score impact: +1 point (55 to 56)
- What it changes: Sodium from 36% to 26% of the Daily Value, about 230 mg a serving; plant points to 5.25; iron to 28% DV
- What it costs you: Nothing. It tastes more like itself, not less
Here is an honest result: when we tested the salt cut by itself, partway through the build, it moved the score by zero points. Sodium fell from 33% to 22% of a day and the overall number did not budge, because the score weighs a lot of things at once and sodium was never this dish's worst offense. The single point in this line comes from the aromatics. We are recommending the salt cut anyway, since the AHA's ideal target is 1,500 mg a day and 830 mg of it in a side dish is a lot of your budget spent on potatoes.
What makes the cut survivable is everything else in this line. Dijon adds acid and a savory edge that reads as seasoning. Nutmeg is traditional in gratins for a reason, and about half a teaspoon is the difference between creamy and finished. More garlic, more thyme, and parsley over the top at the end. Season the sauce, taste the sauce, and remember the cheese is bringing salt of its own.
Take the Guesswork Out of Eating Well
Eat Well Planner helps you organize your favorite recipes, plan balanced meals, and automatically generate shopping lists — all in one place. Whether you're tracking macros, managing dietary restrictions, or just trying to stop asking "what's for dinner?", we've got you covered.
Our AI-powered tools can adapt any recipe to your dietary needs, help you discover new meals you'll love, and even log your nutrition effortlessly. It's meal planning made simple.
Start Organizing Your Meals — FreeWhat we kept, and where we stopped
The butter stayed. Two tablespoons instead of four, but real butter, because it is what the garlic blooms in and it is a large part of why the dish smells like the holidays. We tested replacing it with olive oil - see below - and decided one point was not worth it. Real cheese stayed, both kinds. Whole milk stayed rather than 2%, on purpose. And the potatoes stayed potatoes.
Two more things worth saying plainly. First: scrub the potatoes instead of peeling them. We could not score this one honestly, because the nutrition database uses the same whole-potato entry either way, so this gain is not in the +22 - and the gain is modest in any case. Cooked potatoes with the skin provide 2.1 g of fiber per 100 g versus 1.8 g without. It is free, it is faster than peeling, and it gives the finished dish a nicer rustic look, so we do it.
Second, where we stopped: at the point where the next swap changes what the dish is. That line, for scalloped potatoes, is the potatoes themselves. Anything that replaces them wins points and loses the dish, and we would rather publish a 56 that people will actually make twice.
The healthier version: full recipe
Nutrition Score: 56 / 100. Serves 8.
- 2 lb (910 g) russet potatoes, scrubbed, sliced 1/8 inch thick
- 1 lb (450 g) celery root, peeled, sliced 1/8 inch thick
- 7 oz (200 g) fresh spinach
- 2 1/2 cups (600 g) whole milk
- 2 1/2 tbsp (20 g) cornstarch
- 2 tbsp (28 g) butter
- 1 small onion (110 g), finely chopped
- 5 cloves garlic (15 g), minced
- 4 oz (115 g) sharp cheddar, shredded
- 1 oz (30 g) gruyere, shredded
- 1 tbsp (15 g) Dijon mustard
- 2 tsp (2 g) dried thyme
- 1/2 tsp (1 g) grated nutmeg
- 1 1/4 tsp (7 g) fine salt
- 1/2 tsp black pepper
- 2 tbsp (8 g) chopped fresh parsley
- Heat the oven to 375F. Rub a 9x13 baking dish lightly with a little of the butter.
- Wilt the spinach in a dry skillet over medium heat, 2 to 3 minutes, until fully collapsed. Tip it into a strainer and, once cool enough to handle, squeeze it hard over the sink until it stops releasing water. Chop roughly and set aside.
- Slice the potatoes and celery root a true 1/8 inch thick, ideally on a mandoline. Keep the celery root at the thin end of that range, since it is denser and takes longer to soften. Hold the slices in a bowl.
- Melt the butter in a saucepan over medium heat. Cook the onion for 4 to 5 minutes until soft, add the garlic and thyme, and cook 1 minute more until fragrant.
- Whisk the cornstarch into 1/2 cup of the cold milk until completely smooth, then pour it and the remaining milk into the pan. Bring to a gentle simmer, whisking, and cook 2 to 3 minutes until the sauce thickens enough to coat the back of a spoon. Take it off the heat and stir in the Dijon, nutmeg, salt and pepper. Taste it - it should taste slightly too seasoned on its own.
- Layer half the potato and celery root slices into the dish, overlapping them. Spread the squeezed spinach over them in an even layer, then scatter half the cheddar. Add the remaining slices, pressing down gently to make a level surface.
- Pour the sauce evenly over the top, tilting the dish so it works down through the layers, and scatter the rest of the cheddar over the surface.
- Cover tightly with foil and bake for 45 minutes.
- Uncover, scatter the gruyere over the top, and bake for another 25 to 30 minutes, until the top is browned and bubbling and a knife slides through the center with no resistance.
- Rest for 15 minutes before serving, which is what lets the sauce set instead of running. Scatter the parsley over the top.
Per serving, original versus improved:
- Nutrition Score: 34 to 56
- Calories: 523 to 287
- Saturated fat: 21 g (89% DV) to 6.6 g (28% DV)
- Sodium: about 830 mg (36% DV) to about 600 mg (26% DV)
- Fiber: 2.6 g to 3.5 g
- Protein: 12 g to 11.5 g
- Plant points: 2.75 to 5.25
The improved version rates as an excellent source of vitamin K (140% DV), vitamin B6, phosphorus, calcium, potassium and iron. Protein is the one number that goes down, by half a gram, which is the cost of using less cheese.
Swaps we tested and skipped
Every one of these was scored the same way as the swaps above, applied to the finished 56-point recipe.
- Cauliflower instead of the potatoes: 58, +2 points. This is the punchline of the whole post. Deleting the ingredient the dish is named after, the swap recommended in more or less every healthy scalloped potatoes article on the internet, buys two points. Two. You give up the dish and get a rounding error.
- Olive oil instead of the remaining butter: 57, +1 point. It does help - saturated fat drops to 24% DV - and if you are cooking dairy-free anyway it is the right move. For everyone else, one point is not worth what the butter is doing for the smell of the kitchen. Our butter substitutes guide has the ratios.
- 2% milk instead of whole: 56, no change. Zero points, a thinner sauce, and a higher chance of curdling for your trouble.
- Greek yogurt for half the milk: 56, no change. An interesting failure, this one. It pushes protein from 11.5 g to 14.1 g a serving, which is a genuine improvement the score simply does not reward, and it costs you a real risk, because yogurt is acidic and starch will not swell properly in an acidic sauce, so the potatoes can stay stubbornly firm. If you want the protein, stir it in off the heat at the end.
Make it fit other diets
For dairy-free, unsweetened oat milk is the closest match here because it behaves like whole milk under heat and stays neutral in flavor; use olive oil for the butter and a good melting vegan cheese for the top, and expect a slightly thinner sauce. For gluten-free, this recipe already is - cornstarch instead of a flour roux was a texture decision that happens to solve it. For vegan, combine the dairy-free swaps with 2 tablespoons of nutritional yeast whisked into the sauce for the savory depth the cheese was providing.
Rather than working any of that out by hand, you can hand the finished recipe to Eat Well Planner's Recipe Variations and ask for a dairy-free or vegan version. It rewrites the whole thing with the substitutions worked in, and you can score the result to see what the variation cost or gained.
Do this to your own recipes
Nothing in this post was a guess. Every number came from importing the recipe, scoring it, changing one thing, and scoring it again - and the surprises are the reason it is worth doing rather than following swap advice off a list. Adding spinach was worth six times more than halving the cheese. Cutting the salt was worth nothing. Cauliflower, the swap the internet is most confident about, was worth two points and the entire dish.
That is the Make It Healthier feature working on your own recipes: import a recipe from any website, Instagram reel or YouTube video, get its Nutrition Score, and the AI proposes swaps with a calculator verifying the actual nutritional gain before you ever see the suggestion. If you want to argue with it, the Recipe Playground lets you change ingredients and watch the score move per edit - keep the full eight ounces of cheddar and see exactly what it costs, then decide whether to make it up somewhere else.
Take the recipe your family expects at the holidays and find out what it actually scores. Then find out which single change is worth eleven points. It is almost never the one you would have guessed.