Total Time: 50 minutes
Active Time: 25 minutes
Intensity: Easy
Servings: 6
A deeply comforting, one-pot wonder that combines the heartiness of Italian-style meatballs with a velvety, herb-infused broth and tender pasta. This soup is a complete meal that feels both indulgent and nourishing, perfect for a busy weeknight or a cozy weekend lunch. The “creamy” element comes from a clever (and lighter) technique using a roux and milk, avoiding heavy cream while still delivering rich, satisfying flavor in every spoonful.
Ingredients
For the Meatballs:
-
1 lb (450g) ground Italian sausage (mild or hot)
-
1/3 cup panko breadcrumbs
-
1 large egg, lightly beaten
-
1/4 cup freshly grated Parmesan cheese
-
2 cloves garlic, minced
-
1 tsp dried oregano
-
1/4 tsp black pepper
For the Soup:
-
2 tbsp olive oil
-
1 medium yellow onion, diced
-
2 medium carrots, diced
-
2 stalks celery, diced
-
4 cloves garlic, minced
-
1/3 cup all-purpose flour
-
6 cups (1.4L) low-sodium chicken broth
-
2 cups whole milk
-
1 (15oz) can diced tomatoes, with juices
-
2 tsp dried Italian seasoning
-
1 tsp dried basil
-
1 bay leaf
-
1 cup ditalini pasta (or other small pasta like small shells)
-
5 oz (about 5 cups) fresh baby spinach
-
Salt and freshly ground black pepper, to taste
For Serving:
-
Freshly grated Parmesan cheese
-
Chopped fresh parsley or basil
-
Crusty bread for dipping
Instructions
1. Prepare the Meatballs (10 minutes)
In a medium bowl, combine the ground sausage, panko, egg, Parmesan, minced garlic, oregano, and pepper. Mix gently with your hands or a fork until just combined—overmixing can make the meatballs tough. Roll the mixture into about 20-24 tablespoon-sized meatballs. Set aside on a plate.
2. Brown the Meatballs (10 minutes)
In a large Dutch oven or heavy-bottomed pot, heat 1 tablespoon of olive oil over medium-high heat. Add the meatballs in a single layer, working in batches if necessary to avoid crowding. Brown them on all sides, turning gently, for about 5-7 minutes total. They do not need to be cooked through at this stage. Remove the meatballs to a clean plate and set aside.
3. Build the Soup Base (10 minutes)
Reduce the heat to medium. Add the remaining 1 tablespoon of olive oil to the same pot. Add the diced onion, carrot, and celery. Sauté for 5-6 minutes, until the vegetables begin to soften. Add the minced garlic and cook for 1 more minute until fragrant.
Sprinkle the flour over the vegetables and stir constantly for 1-2 minutes to cook off the raw flour taste. This creates your roux, which will thicken the soup.
4. Simmer and Cook (20 minutes)
Gradually pour in the chicken broth, whisking constantly to prevent any lumps from forming. Add the milk, diced tomatoes with their juices, Italian seasoning, dried basil, and the bay leaf. Stir well and bring the soup to a gentle simmer.
Carefully add the browned meatballs back into the pot along with any accumulated juices. Reduce the heat to maintain a low simmer, cover partially, and let cook for 10 minutes.
5. Add Pasta and Finish (10 minutes)
After 10 minutes, stir in the ditalini pasta. Continue to simmer, uncovered, for another 8-10 minutes, or until the pasta is al dente and the meatballs are cooked through.
Turn off the heat. Remove the bay leaf. Stir in the fresh spinach until just wilted. Taste the soup and season generously with salt and black pepper as needed. The salt requirement will vary based on the sausage and broth used.
6. Serve
Ladle the hot soup into deep bowls. Garnish generously with freshly grated Parmesan cheese and a sprinkle of fresh herbs. Serve immediately with crusty bread on the side for the ultimate comforting experience.
Chef’s Notes & Tips
-
Make-Ahead: The meatball mixture can be prepared and rolled up to a day in advance, stored covered in the refrigerator.
-
Pasta Warning: If you plan on having leftovers, cook the pasta separately and add it to individual bowls when serving. This prevents it from absorbing all the broth and becoming mushy in stored soup.
-
Variations: Use ground turkey or beef for a different twist. Swap spinach for kale (add it a few minutes earlier to soften). For a richer soup, substitute 1 cup of the milk with heavy cream added at the very end.
-
Storage: Cool completely and store in an airtight container in the refrigerator for up to 3 days. Reheat gently on the stovetop, adding a splash of broth or milk if the soup has thickened too much.
Nutrition Information (Per Serving)
-
Calories: ~485 kcal
-
Total Fat: 28g
-
Saturated Fat: 9g
-
-
Cholesterol: 95mg
-
Sodium: 980mg *
-
Total Carbohydrates: 34g
-
Dietary Fiber: 3g
-
Sugars: 8g
-
-
Protein: 24g