Swedish meatballs are one of the few dishes almost nobody has a bad memory of. They are small and tender in a way American meatballs never are, the gravy is pale and silky instead of red and loud, and there is a spoonful of tart red jam on the side that should not work and completely does. Sweden's own tourism account once claimed on Twitter that the recipe came home from Turkey with King Charles XII in the early 1700s, then walked it back when Swedish historians objected. The dish is beloved enough that its origin story became a national argument.
We ran a standard, generous, family-recipe-box version through our Nutrition Score and got 33 out of 100.
Then we rebuilt it and got 75. Same allspice and nutmeg, same pale gravy, same egg noodles, same lingonberry. What surprised us is where the points actually were. The meatballs themselves — the part everyone assumes is the problem, two fatty ground meats in one bowl — were worth the least of the five changes we made. And one swap we were sure would help made the score go down.
The original: what is in it and how it scores
We scored the version that shows up in most family recipes and most restaurant plates, built to serve four:
- 1 lb of 80/20 ground beef and 1/2 lb of ground pork
- 1/2 cup of dry bread crumbs soaked in 1/2 cup of whole milk
- 1 small onion, 1 egg, 1 1/4 teaspoons of salt, allspice, nutmeg, black pepper
- 8 tablespoons of butter across the whole dish — softening the onion, frying the meatballs, building the roux, tossing the noodles
- A gravy of 3 tablespoons of flour, 2 cups of beef broth, and 3/4 cup of heavy cream, with a little soy sauce and Dijon
- 12 oz of egg noodles
- 1/4 cup of lingonberry jam
Per serving: 1,335 calories, 58.8 g protein, 93.5 g carbohydrate, 4.4 g fiber, 75.2 g total fat, 35.2 g saturated fat, and 1,980 mg of sodium. Two and three-quarter plant points.
Start with what is already good here, because it is a lot. This is real food. Meat, milk, egg, flour, butter, broth — there is nothing ultra-processed in the pan. The micronutrient sheet is genuinely strong: 167% of a day's vitamin B12, 99% of folate, 96% of zinc, 91% of niacin, 80% of iron, and 73% of a day's protein in one plate. Nobody should feel bad about this dinner.
What drags it to 33:
- Saturated fat: 35.2 g per serving, 150% of a day's worth. Against an FDA Daily Value of 20 g, one plate is a day and a half. Two fatty ground meats, a stick of butter split four ways, and 3/4 cup of heavy cream all land in the same bowl.
- Sodium: 1,980 mg, 86% of a day's worth. The FDA puts the ceiling at less than 2,300 mg a day, and most of this comes from the salted broth and the salt in the meat mixture, not from anything exotic.
- 4.4 g of fiber — 15% of the Daily Value. Refined bread crumbs, refined noodles, and one small onion.
- Vitamin C: zero, and 2.75 plant points. This is the real story. There is no vegetable anywhere on this plate. The score flags low vitamin C and low plant diversity as two of its three biggest weaknesses.
The dimension breakdown says it plainly: energy and recovery scores 57 and weight management 45, but gut health lands at 24, longevity at 24, and heart health at 25.
The upgrades: five swaps, 42 points
Each swap is scored on top of the one before it, in the order we made them, so the deltas add up to the total. If you only make one change, make the first one — it is the cheapest change on this list and it beats rebuilding the gravy.
1. Put vegetables on the plate (they are part of the recipe now)
- Swap: Nothing green → 10 oz of broccoli and 1 cup of peas cooked in the noodle water, plus fresh dill
- Score impact: +10 points (33 to 43)
- What it changes: Vitamin C from zero to most of a day's worth, fiber from 4.4 g to 8.5 g, plant points from 2.75 to 5
- What it costs you: Nothing on the plate. About ninety seconds of attention at the pasta pot.
This is the swap nobody thinks of as a swap, and on its own it was worth more than rebuilding the gravy was. Swedish meatballs are traditionally served with something green anyway — peas are common, and a cucumber salad is standard — but the something green is treated as optional, so it disappears. We wrote it into the recipe instead: broccoli goes into the noodle water for the last three minutes, peas for the last one, everything drains together.
The dill is not decoration either. It counts toward plant diversity, and it does the thing a bright herb does to a rich cream gravy, which is make it taste less heavy without removing anything.
2. Rebuild the meat blend: lean beef, turkey, and mushrooms
- Swap: 1 lb of 80/20 beef + 1/2 lb of pork → 3/4 lb of 93% lean beef + 1/2 lb of ground turkey + 5 oz of finely chopped cremini mushrooms; bread crumbs → rolled oats
- Score impact: +5 points (43 to 48)
- What it changes: Cuts saturated fat by about 6 g per serving and 226 calories, adds another plant point
- What it costs you: Leaner meat dries out — the mushrooms are what buy the moisture back, and they are not optional
Five points is a smaller return than most people expect from the change that sounds most drastic, and it is worth saying why: leaner meat removes fat, but it also removes some of what the score liked about this dish. Protein per serving drops from 63 g to 53.3 g at this step. The dish gives up a little to gain a little more.
The mushroom part is the technique that makes it work. Cook them down with the onion first so their water cooks off, then fold them into the meat. They hold moisture through cooking and add glutamates, which is why a study comparing mushrooms and textured soy as meat extenders in beef patties found mushroom-extended patties at 20% substitution scored as well with consumers as full-sodium, all-beef controls. If you would rather keep the pork, our guide to ground pork substitutes covers what each swap does to texture. The rolled oats standing in for bread crumbs is a smaller move — a traditional panade with a bit more fiber — and it is one of the options in our bread crumb substitutes guide.
3. Rebuild the gravy: cornstarch and evaporated milk instead of a butter roux and cream
- Swap: 3 tbsp flour + 3/4 cup heavy cream + most of the butter → 2 tbsp cornstarch + 3/4 cup evaporated milk + 2 tbsp butter and 1 tbsp olive oil for the whole dish
- Score impact: +15 points (48 to 63) — the biggest single jump
- What it changes: Saturated fat drops from 29 g to 12.7 g per serving; calories drop by another 227
- What it costs you: A slightly cleaner, less rounded gravy. It is close, and the Dijon and soy sauce cover most of the gap.
Here is the part worth understanding, because it is the whole argument for doing a makeover in order rather than one swap at a time: we also tested this gravy rebuild on its own, against the original, changing nothing else. Alone, it was worth +4 points. In place — after the vegetables and the leaner meat — the same change was worth +15. Cutting saturated fat only pays properly once the plate has something on it worth measuring.
Technique-wise this is easier than a roux, not harder. Cornstarch has roughly twice the thickening power of flour, so 2 tablespoons does the work of 4, and it thickens in about a minute in simmering broth instead of needing to be cooked out first. Evaporated milk is the ingredient doing the heavy lifting on texture: it is milk with most of the water removed, so it carries concentrated milk protein and lactose that read as richness without cream's fat load. It is one of the swaps we recommend most in our heavy cream substitutes guide, and if you do not have a can, our cornstarch guide covers the thickener side. Stir it in off the heat and do not let the gravy boil after it goes in.
4. Whole wheat egg noodles
- Swap: 12 oz regular egg noodles → 12 oz whole wheat egg noodles
- Score impact: +4 points (63 to 67)
- What it changes: Fiber from 9.7 g to 12 g per serving, plus B vitamins and magnesium that refining removes
- What it costs you: A firmer, nuttier noodle. Under this much gravy, it is a small difference.
Refining a grain strips more than half of wheat's B vitamins, 90% of its vitamin E, and virtually all of its fiber. Whole wheat egg noodles put that back without changing what the dish is — they are still egg noodles, still wide and soft, still the right vehicle for this gravy.
Worth noting: this swap was worth zero points when we tested it on the original by itself. Same noodles, same fiber gain, no movement — the saturated fat was so far over the line that nothing else could register. It only became a 4-point swap after the gravy was fixed.
5. Low-sodium broth and a quarter less salt
- Swap: Regular beef broth → low-sodium beef broth; 1 1/4 tsp salt → 3/4 tsp
- Score impact: +8 points (67 to 75)
- What it changes: Sodium from 1,470 mg to 1,040 mg per serving — from 64% of a day's worth to 45%
- What it costs you: Very little, because the mushrooms, soy sauce, and Dijon are all doing savory work that salt used to do alone
Eight points for the least interesting change on the list. Americans average about 3,400 mg of sodium a day against a limit of 2,300 mg, and most of it arrives exactly like this — in broth, and in the salt that goes into a mixture by habit rather than by taste. Salt the meat mixture, then taste the gravy at the end and add a pinch there if it needs one. That is a much smaller total than salting both to full strength on autopilot.
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 on purpose
The lingonberry. A quarter cup of jam across four servings is 9.8 g of added sugar per plate, 37% of a day's worth, and the score flags it as a caution. We tested removing it: the score went down two points, to 73. The jam brings fruit, a plant point, and vitamin C, and its sugar load is small enough that the score prefers keeping it. It is also the ingredient that makes the dish Swedish. It stays.
Butter, 2 tablespoons of it. One tablespoon finishes the gravy, one goes on the noodles with the dill. That is a quarter of the original amount and it is still enough to taste. Halving the butter alone, with nothing else changed, was worth exactly zero points on the original — so there is no reason to be precious about the last spoonful. Our butter substitutes guide covers the swaps if you want to go further, but we would not.
Beef. An all-turkey version scored 79, four points better than what we published. We stopped anyway. At that point the meatball loses the beefy depth that makes it a Swedish meatball rather than a turkey meatball in cream sauce, and a makeover that guts the dish is a failed makeover. Four points is not worth it. If you disagree, it is one line in the recipe.
Swaps we tested and skipped
- A potato-cauliflower mash instead of the noodles: 75 down to 65, a 10-point loss. This is the swap the internet recommends most, and it was the worst thing we did to this dish. The mash removes fiber and dilutes protein per serving, and the score punished it hard. Mashed potatoes are a legitimate traditional side for meatballs; cauliflower-fying them is not an upgrade.
- Smaller noodle portions: 63 down to 59, a 4-point loss. We assumed cutting the noodles from 12 oz to 8 oz would help. It did the opposite — fiber per serving fell from 9.7 g to 8.7 g and protein density dropped, because shrinking the plate removed good things along with the calories. The score measures the quality of what is on the plate, not just how much of it there is. We kept the full portion.
- Greek yogurt instead of evaporated milk: 78, three points better. This one we skipped on technique, not on numbers. Yogurt's proteins are already destabilized by lactic acid and clump when heated, and a split gravy is a ruined dinner. If you want the three points, whisk the yogurt with a little of the cornstarch first, temper it with hot gravy, and never let the pan boil. We did not want to make that a required step in a weeknight recipe.
The healthier version: full recipe
Nutrition Score: 75 out of 100. Serves 4.
For the meatballs
- 3/4 lb (12 oz) 93% lean ground beef
- 1/2 lb (8 oz) ground turkey
- 5 oz cremini mushrooms, finely chopped (about 2 cups)
- 1 small yellow onion, finely chopped (about 3/4 cup)
- 1 tablespoon olive oil
- 1/2 cup old-fashioned rolled oats
- 1/2 cup whole milk
- 1 large egg
- 3/4 teaspoon salt
- 1/2 teaspoon ground allspice
- 1/4 teaspoon ground nutmeg
- 1/2 teaspoon black pepper
For the gravy
- 2 cups low-sodium beef broth
- 2 tablespoons cornstarch
- 3/4 cup evaporated milk
- 2 tablespoons butter, divided
- 1 teaspoon soy sauce
- 1 teaspoon Dijon mustard
To serve
- 12 oz whole wheat egg noodles
- 10 oz broccoli florets
- 1 cup frozen green peas
- 2 tablespoons chopped fresh dill
- 1/4 cup lingonberry jam
- Heat the olive oil in a large skillet over medium heat. Cook the mushrooms and onion, stirring occasionally, until the liquid they release has cooked off and the mixture is dry and lightly browned, 8 to 10 minutes. Scrape into a large bowl and let cool for 5 minutes.
- Stir the oats into the milk and let them soak while the vegetables cool.
- Heat the oven to 425F and line a rimmed baking sheet with parchment. Add the ground beef, ground turkey, soaked oats, egg, salt, allspice, nutmeg, and pepper to the bowl with the cooled mushroom mixture. Mix gently with your hands until just combined — overworking makes tough meatballs.
- Roll into about 24 meatballs, roughly 1 1/2 inches each, and space them out on the sheet. Bake for 15 to 18 minutes, until browned and cooked through to 165F. Baking instead of pan-frying is what lets the recipe get by on 1 tablespoon of oil for the whole batch.
- While they bake, bring a large pot of water to a boil and cook the noodles according to the package. Add the broccoli for the last 3 minutes and the peas for the last 1 minute. Drain, reserving 1/2 cup of the cooking water, then toss the noodles and vegetables with 1 tablespoon of the butter and the dill.
- Whisk the cornstarch into 1/4 cup of the cold broth until smooth. Bring the remaining broth to a simmer in the skillet you cooked the mushrooms in, scraping up any browned bits. Whisk in the cornstarch slurry and simmer for 1 to 2 minutes, until it thickens enough to coat a spoon.
- Take the pan off the heat. Stir in the evaporated milk, soy sauce, Dijon, and the remaining tablespoon of butter. Return to low heat and warm through without letting it boil. Thin with a splash of the reserved noodle water if it tightens up.
- Add the baked meatballs to the gravy and turn to coat. Serve over the noodles and vegetables, with the lingonberry jam on the side.
Per serving, original vs. improved:
- Nutrition Score: 33 → 75
- Calories: 1,335 → 926
- Saturated fat: 35.2 g → 12.3 g (150% of the Daily Value → 52%)
- Sodium: 1,980 mg → 1,040 mg (86% → 45%)
- Fiber: 4.4 g → 12 g (15% → 40%)
- Protein: 58.8 g → 54.2 g
- Vitamin C: 0% → 98% of the Daily Value
- Plant points: 2.75 → 7
Two honest caveats. Saturated fat at 12.3 g is still flagged high — this is a dish with beef, butter, and evaporated milk in it, and 52% of a day's worth in one dinner is about the floor for something still recognizable as Swedish meatballs. And 926 calories is a big plate, because it is a big plate: meatballs, a full portion of noodles, and about a cup of vegetables. We tested making it smaller and the score got worse.
Make it fit other diets
- Gluten-free: Use certified gluten-free oats in the meatballs and wide gluten-free or rice noodles. The gravy is already flour-free — cornstarch does that work.
- Dairy-free: Unsweetened oat milk in the panade, and oat cream or a cashew cream in place of the evaporated milk. Use olive oil instead of butter and be a little more generous with the Dijon.
- Pork-free: Already done — this version is beef and turkey.
In Eat Well Planner any of these is one step: open the recipe, ask for a dairy-free version, and Recipe Variations rewrites the whole thing with the substitutions worked in rather than leaving you to figure out the ratios yourself.
Do this to your own recipes
Every number in this post came out of the app, not out of a guess. We imported the original, read the score and its weaknesses, then ran the swaps one at a time and checked what each was actually worth before keeping it. That is Make It Healthier: it proposes swaps for the recipe in front of it, and a calculator verifies the gain before you ever see the suggestion — which is why a healthy-sounding swap that would make things worse, like the cauliflower mash, does not get recommended.
The lesson this dish taught is worth carrying to your own. The fix was rarely inside the thing being blamed. The meatballs were the smallest win; the plate around them was the biggest; and most of the changes only paid off in combination with each other. That is hard to see by eye and easy to see with a score next to it.
Import a recipe you love — from a website, an Instagram reel, or a YouTube video — and see what it scores. Then open the Recipe Playground and change one ingredient at a time. Want to keep the pork? Put it back and watch what it costs, then decide where to make it up. The point was never to eat a different dinner. It is to know which parts of the one you love are actually worth changing.