Creamy tomato soup is the one everyone agrees on. It is the soup you make when it is raining, the soup you eat out of a mug, the soup that exists mostly as a vehicle for grilled cheese. Nobody has a complicated relationship with it.
The nutrition is more complicated than the flavor, though. We built a standard restaurant-style version - butter and olive oil, onion, tomato paste, a 28-ounce can of crushed tomatoes, chicken broth, a full cup of heavy cream, and the 2 tablespoons of sugar that almost every recipe quietly includes - and ran it through our Nutrition Score. It came out at 43 out of 100.
Then we rebuilt it, scoring every swap against production nutrition data as we went. The final version scores 74. It is still creamy, still sweet, still the same orange-red bowl. It just gets there without the cream, and the swap that earned the most points was not the one we expected.
The original: what is in it and how it scores
The version we scored serves four and is close to what a bistro or a good blog recipe gives you: 2 tablespoons butter, 1 tablespoon olive oil, a medium onion, 2 cloves of garlic, 2 tablespoons tomato paste, one 28-ounce can of crushed tomatoes, 2 cups of chicken broth, 1 cup of heavy cream, 2 tablespoons of sugar, 1 1/2 teaspoons of salt, and a handful of basil.
Per serving, that lands at 409 calories, 16.1 g saturated fat, 1,740 mg sodium, 4.9 g fiber, 6.1 g protein, and 6.3 g of added sugar. The score flagged three problems: high sodium, high saturated fat, and low B12.
Two of those are worth pulling apart, because they explain everything that follows:
- The saturated fat is doing the real damage. One bowl carries 16.1 g. The Dietary Guidelines put the ceiling at less than 10% of daily calories, which is roughly 22 g on a 2,000-calorie day - so a bowl of soup, before the grilled cheese arrives, spends about three-quarters of that budget. Almost all of it is the cup of heavy cream.
- The sodium is high, but it is not mostly the salt shaker. 1,740 mg per serving is 76% of the 2,300 mg Daily Value, and the CDC is direct about why that matters: too much sodium raises blood pressure and the risk of heart disease and stroke. What surprised us is the breakdown. The 1 1/2 teaspoons of salt account for roughly 885 mg per serving, the canned tomatoes contribute about 375 mg, and the broth carries most of the rest.
Plenty of it is already fine, though. Even the original hits 39% of the Daily Value for iron, 33% for vitamin A, and 27% for vitamin C - the tomatoes are doing real work. This is a good vegetable soup wearing a cup of cream, not a nutritional void.
Worth noting for anyone reaching for the red-and-white can instead: Campbell's condensed tomato soup carries 480 mg of sodium and 8 g of added sugar per half cup of condensed soup, and nobody eats half a cup. The homemade version is not the villain here. It is just built on cream.
The upgrades
Five changes, scored cumulatively in this order. If you only make one, make the first.
1. Heavy cream, out. A can of white beans, in.
- Swap: 1 cup heavy cream to one 15-ounce can of cannellini beans, drained and rinsed
- Score impact: +11 points (43 to 54)
- What it changes: Saturated fat falls from 16.1 g to 4.0 g per serving, fiber climbs from 4.9 g to 9.1 g, protein goes from 6.1 g to 9.5 g, and calories drop by 134
- What it costs you: Almost nothing in texture. A little in richness - the soup is velvety rather than luxurious
This is the swap the whole post rests on. Blended white beans do the exact job cream was doing: they suspend in the liquid, coat the spoon, and round off the acidity of the tomatoes. Italian cooks have thickened soup with pureed beans for centuries, and a blender makes it effortless - once cooked into tomato, the beans leave no beany flavor at all.
What you give up is the specific fatty mouthfeel of dairy, the coating cream leaves on your palate. Beans give you body without that coating. Blend longer than feels necessary - 60 to 90 seconds with an immersion blender - and the gap narrows considerably. Rinse them well, too: draining and rinsing canned beans cuts their sodium by about 41%, according to work out of the University of Tennessee. Of all the ways to replace heavy cream in a cooked dish, this is the one that won our tests for a blended soup.
2. The sugar comes out. Roasted carrots go in.
- Swap: Delete the 2 tablespoons of sugar, add 2 medium carrots roasted with the onion
- Score impact: +4 points (54 to 58)
- What it changes: Added sugar goes from 6.3 g to zero, fiber rises to 10.2 g, plant points go from 3.75 to 5.75
- What it costs you: An extra 25 minutes of oven time, and you have to actually let the vegetables brown
The sugar in tomato soup is there to fight acidity, not to make it dessert. Carrots do the same job with their own sugars, and roasting concentrates them - which is why this only works if you roast the onion and carrots rather than sweating them in the pot. Pull them when the edges are deeply browned, not merely soft. Undercooked carrots give you carrot flavor instead of sweetness, and that is the failure mode here.
Four points is a modest return for 25 minutes of oven time. But the added sugar going to zero is worth more than the score alone suggests, and the carrots are what let the salt come down later without the soup tasting flat.
3. Butter out, olive oil in
- Swap: 2 tablespoons butter plus 1 tablespoon olive oil to 2 tablespoons olive oil total
- Score impact: +13 points (58 to 71)
- What it changes: Saturated fat drops from 4.0 g to 1.3 g per serving, and what fat remains is almost entirely unsaturated
- What it costs you: The specific dairy sweetness butter gives the base. Real, but small once the carrots are in
Here is the part we did not see coming. We also tested this swap on the original recipe, before anything else changed, and it was worth one point. Against a bowl already carrying 16 g of saturated fat from cream, taking out 2 tablespoons of butter barely registered. Once the cream was gone, the identical swap was worth 13.
That is not a quirk of our scoring - it is how nutrition actually works. Small improvements get buried under a large problem and only pay out once the large problem is solved, which is the best argument we know for fixing things in order instead of making every change you have heard of at once. (If you are weighing cooking fats generally, our olive oil substitutes guide covers what each one actually does in a pan.)
4. Cut the salt in half
- Swap: 1 1/2 teaspoons salt to 1/2 teaspoon
- Score impact: 0 points (71 to 71)
- What it changes: Sodium falls from 1,820 mg to 1,240 mg per serving - about 580 mg gone
- What it costs you: Genuinely noticeable at first. Roasted carrots and a longer basil steep cover most of it
We are reporting a swap worth zero points because that is the honest number, and because it is the opposite of what most people expect. Taking out a full teaspoon of salt removed 580 mg of sodium per bowl - a quarter of a day's Daily Value - and the score did not move, because the canned tomatoes and broth kept the recipe in the same penalty band.
Make the cut anyway. Sodium is cumulative across a day, and more than 70% of the average American's intake comes from packaged and prepared food they never seasoned themselves. A bowl of soup that hands back 580 mg is worth having whether or not a score rewards it.
5. Regular broth to low-sodium broth
- Swap: 2 cups chicken broth to 2 cups low-sodium chicken broth
- Score impact: +3 points (71 to 74)
- What it changes: Sodium drops to 1,130 mg per serving, and protein ticks up slightly
- What it costs you: Nothing you will notice in a soup this assertive
Same pattern as the butter: nearly invisible earlier in the build, worth real points once the sodium was low enough to matter. With roasted vegetables, cooked-down tomato paste, and basil in the pot, low-sodium broth is not a compromise - and our chicken broth substitutes guide covers what to use if you do not keep it on hand.
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 2 tablespoons of olive oil stay, deliberately: we scored a version with no added fat at all and it also came out at 74. The olive oil is free. It carries the fat-soluble compounds in the tomatoes and makes the soup taste finished, at no cost to the score.
The regular crushed tomatoes stay too (more on that below), as does the full 2 tablespoons of tomato paste, cooked until it darkens - that caramelization is much of what makes the soup taste like it simmered all afternoon.
Where we stopped: at 74. We tested stirring 2 tablespoons of heavy cream back in as a finishing swirl, the way restaurants serve it, and it cost 8 points - down to 66. That is a real trade, and it is yours to make. Twenty grams of grated parmesan on top costs 4 points and adds 1.8 g of protein, which is the better deal of the two. Both are optional, and neither is a mistake.
The healthier version: full recipe
Nutrition Score: 74 out of 100. Serves 4, about 1 1/2 cups each.
Ingredients
- 2 tablespoons extra-virgin olive oil, divided
- 1 medium yellow onion (about 5 oz), roughly chopped
- 2 medium carrots (about 5 oz total), cut into 1-inch pieces
- 2 cloves garlic, peeled and left whole
- 2 tablespoons tomato paste
- 1 (28 oz) can crushed tomatoes
- 2 cups low-sodium chicken broth
- 1 (15 oz) can cannellini beans, drained and rinsed
- 1/2 teaspoon salt
- 1/4 teaspoon black pepper
- 1/4 cup fresh basil leaves, plus more for serving
Instructions
- Heat the oven to 425F. On a sheet pan, toss the onion, carrots, and garlic with 1 tablespoon of the olive oil. Roast for 25 to 30 minutes, stirring once, until the carrots are tender and the edges are deeply browned. Do not pull them early - that browning is the sweetness that replaces the sugar.
- Warm the remaining tablespoon of olive oil in a large pot over medium heat. Add the tomato paste and cook, stirring constantly, for about 2 minutes, until it darkens to brick red and smells toasted rather than raw.
- Add the roasted vegetables, crushed tomatoes, broth, drained beans, salt, and pepper. Bring to a simmer, then cook uncovered for 15 minutes.
- Take the pot off the heat and stir in the basil. Let it sit for 2 minutes so the leaves soften and infuse.
- Blend until completely smooth - 60 to 90 seconds with an immersion blender, or in batches in a countertop blender with the lid vented. Longer is better. This is what makes the beans read as cream.
- Taste, adjust the pepper, and serve with torn basil on top.
Per serving, original vs. improved
- Nutrition Score: 43 to 74
- Calories: 409 to 247
- Saturated fat: 16.1 g to 1.4 g
- Sodium: 1,740 mg to 1,130 mg
- Fiber: 4.9 g to 10.2 g, against an FDA Daily Value of 28 g
- Protein: 6.1 g to 10.6 g
- Added sugar: 6.3 g to 0 g
- Plant points: 3.75 to 5.75
The improved bowl comes out a good source of iron (52% DV), vitamin A (40%), vitamin B6 (39%), folate (36%), fiber (34%), and potassium (32%). Sodium is the single caution left at 49% DV, which is the honest ceiling for a soup built on canned tomatoes and broth.
Swaps we tested and skipped
- Greek yogurt instead of beans (scored 75). One point higher than the beans, and we still said no. It gives up 4.3 g of fiber and a plant point, and yogurt splits in hot acidic liquid - heat and low pH together make the casein proteins clump - so it has to go in off the heat, tempered with a ladle of hot soup first. More fragile, less fiber, one point. Not worth it.
- No-salt-added canned tomatoes (scored 73). This one deserves an explanation. Sodium fell all the way to 780 mg per serving, but the score came out a point lower, because the no-salt-added product we scored is a thinner pack than crushed tomatoes - less fiber, fewer calories, less of everything. If sodium is your specific target, make this swap regardless. The one-point difference is noise. The 350 mg is not.
- Light coconut milk instead of beans (scored 69). Five points behind, and it tastes like coconut. Tomato soup does not want that.
- Cashews instead of beans (scored 73). One point behind, needs a high-speed blender to go fully smooth, and costs several times as much. The beans win on every axis that matters.
- Cutting the salt to 1/4 teaspoon (still 74). Sodium went to 980 mg, the score did not move, and the soup started tasting like it was missing something. We stopped at 1/2 teaspoon.
Make it fit other diets
This version arrived dairy-free and gluten-free without trying - taking out the cream and the butter did both. For a fully vegan bowl, swap the low-sodium chicken broth for low-sodium vegetable broth, and that is the only change. For a higher-protein version, blend in a second can of beans rather than adding dairy back.
For a different variation entirely - lower FODMAP, nightshade-free, whatever your household runs on - the app's Recipe Variations feature rewrites the whole recipe with the substitutions worked in.
Do this to your own recipes
Everything above came out of two tools anyone can use: import a recipe, look at its Nutrition Score, and run Make It Healthier, which proposes swaps and verifies the real nutritional gain with a calculator before it shows you anything. The per-swap deltas came from the Recipe Playground, where you change one ingredient and watch the score move.
It is worth doing to your own version of this soup, because the useful findings here were the ones we could not have predicted - butter worth 1 point until it was suddenly worth 13, a whole teaspoon of salt worth zero, the fanciest swap on the list beaten by a can of beans. Your recipe will have its own. And once the soup is sorted, the thing it exists to be dunked in is grilled cheese, which we put through the same treatment.