Prep time: 8 minutes
Cook time: 22 minutes
Total time: 30 minutes
Intensity: Easy (one pot, immersion blender)
Ingredients
For the soup base:
-
2 tbsp unsalted butter
-
1 medium yellow onion, finely diced
-
2 cloves garlic, minced
-
2 tbsp all-purpose flour (gluten-free blend works)
-
1½ cups low-sodium chicken or vegetable broth
-
2 cans (28 oz / 800 g) whole peeled tomatoes, undrained (or 2 cups crushed tomatoes + 1 cup tomato passata)
-
2 tbsp tomato paste
-
1½ cups whole milk (or 1 cup milk + ½ cup heavy cream for extra richness)
-
1 tsp granulated sugar
-
½ tsp fine sea salt
-
¼ tsp freshly cracked black pepper
-
¼ tsp celery salt (optional, for that classic flavor)
-
Pinch of ground cloves (a tiny pinch — it’s the secret ingredient)
-
½ tsp dried basil
To finish:
-
1 tbsp butter, stirred in at the end
-
2 tbsp chopped fresh basil or chives
-
Croutons or oyster crackers, for serving
Optional upgrades:
-
¼ cup grated Parmesan
-
½ tsp smoked paprika
-
1 tsp balsamic vinegar (for depth)
Equipment
-
Medium-heavy saucepan or Dutch oven
-
Immersion blender (or countertop blender)
-
Wooden spoon
-
Ladle
-
Small bowls for serving
Instructions
Step 1 — Sweat the aromatics (5 minutes | Intensity: Low-Medium)
Melt the butter in the saucepan over medium heat (about 325°F / 165°C). Add the diced onion and cook 4 minutes, stirring occasionally, until soft and translucent — not browned. Add the garlic and cook 30 seconds until fragrant. Keep the heat moderate — browned onions will darken the soup and make it taste roasted rather than classic.
Step 2 — Make the roux (2 minutes | Intensity: Medium)
Sprinkle the flour over the onions and cook, stirring constantly, 1–2 minutes until the raw flour smell disappears and the mixture looks like wet sand. Stir without stopping — a roux scorches fast, and burnt flour tastes bitter. This step is what gives the soup its signature body.
Step 3 — Build the base (3 minutes | Intensity: Medium)
Whisk in the broth a splash at a time, then cook 2 minutes, whisking, until the mixture thickens into a smooth gravy-like consistency. Add the tomato paste and cook 1 minute, stirring, to caramelize it slightly — this deepens the tomato flavor. Whisk continuously to prevent lumps.
Step 4 — Add the tomatoes and simmer (12 minutes | Intensity: Low)
Stir in the canned tomatoes with their juices, breaking them up with the spoon. Add the sugar, salt, pepper, celery salt, cloves, and dried basil. Bring to a gentle simmer over medium-low heat (about 200°F / 93°C) — do not boil hard, or the soup will splatter and the flavors will turn flat. Simmer uncovered 10–12 minutes, stirring occasionally, until slightly reduced and the tomatoes have softened.
Step 5 — Blend smooth (3 minutes | Intensity: Medium)
Remove from heat. Blend with an immersion blender 45–60 seconds until completely smooth and silky. If using a countertop blender, work in two batches, filling no more than halfway, and vent the lid with a towel — hot soup expands violently. Blend longer than you think — the signature texture is ultra-smooth.
Step 6 — Add the milk (3 minutes | Intensity: Low)
Return the pot to low heat (about 180°F / 82°C). Stir in the milk in a slow stream, whisking constantly. Never boil after adding milk — it will curdle and split. Warm gently 2–3 minutes until heated through, tasting and adjusting salt and sugar. If the soup tastes too acidic, add ½ tsp more sugar; too flat, a few drops of balsamic vinegar.
Step 7 — Finish and serve (2 minutes | Intensity: Low)
Off the heat, stir in the final tablespoon of butter until glossy. Ladle into warm bowls, top with fresh basil and croutons, and serve immediately.
Chef’s Notes & Troubleshooting
-
Soup split or grainy? The milk boiled or was added to a cold base. Keep the heat low and add milk slowly, off the boil.
-
Too thin? Simmer 5 minutes uncovered before adding the milk, or whisk in 1 tbsp cornstarch slurried in water.
-
Too thick? Loosen with broth or milk 1 tbsp at a time.
-
Too acidic? Add sugar ¼ tsp at a time — canned tomatoes vary by brand.
-
Sodium note: This version has roughly half the sodium of the canned original; taste before adding more salt.
-
Make it vegan: Use olive oil, vegetable broth, plant milk, and nutritional yeast; skip the finishing butter.
-
Make-ahead: Refrigerate up to 4 days; reheat gently over low heat, never boiling. Freeze the base before adding milk up to 3 months.
Nutrition (per serving — 1 of 4, about 1½ cups)
| Nutrient | Amount |
|---|---|
| Calories | ~210 kcal |
| Protein | 7 g |
| Total Fat | 9 g |
| — Saturated Fat | 5 g |
| Carbohydrates | 25 g |
| — Fiber | 4 g |
| — Sugars | 15 g |
| Cholesterol | 25 mg |
| Sodium | ~620 mg |
