This soul-warming soup brings together handmade beef and pork meatballs, aromatic vegetables, and small pasta swimming in a luscious tomato-cream base. The meatballs, seasoned with Parmesan, garlic, and herbs, brown beautifully before simmering to tender perfection in the flavorful broth. Heavy cream creates the signature velvety texture, while fresh baby spinach adds color and nutrients. Each spoonful delivers tender meat, al dente pasta, and vegetables in a satisfyingly rich broth. Perfect for chilly evenings, this Italian classic serves six generously and tastes even better the next day.
The first time I made this soup was during a snowstorm when I needed something that could simmer slowly while I watched the flakes pile up outside. My kitchen filled with the smell of browning meatballs and garlic, and I knew this was going to be a keeper before I even took the first spoonful.
I served this to my sister on a random Tuesday and she texted me the next morning asking for the recipe. Thats when I knew it wasnt just me being snowbound and dramatic about soup.
Ingredients
- 500 g ground beef or beef pork mix: The fat content keeps meatballs tender, and I learned the hard way that super lean meat makes them tough
- 1/2 cup breadcrumbs: These are the binder that keeps everything together without making the meatballs dense
- 1/4 cup grated Parmesan cheese: Adds a salty depth that makes the meatballs taste like theyve been simmering for hours
- 1 large egg: The essential glue that holds the meatballs together through all that stirring and simmering
- 2 cloves garlic minced: Fresh garlic in the meatballs means little flavor pockets throughout
- 2 tbsp chopped fresh parsley: Brightens up the rich meat and makes everything taste fresher
- 1 tsp dried oregano: The classic Italian herb that makes everything taste like a proper Italian kitchen
- 1/2 tsp salt and 1/4 tsp ground black pepper: Basic seasoning that you should not skip or the meatballs will taste bland
- 2 tbsp olive oil: Use this for browning meatballs and starting your soup base
- 1 medium onion diced: The foundation of flavor that sweetens as it cooks down
- 2 carrots diced: Add natural sweetness and color that balances the tomatoes
- 2 celery stalks diced: Essential for that classic soup base flavor profile
- 3 cloves garlic minced: More garlic is always the right decision in soup
- 1 tsp dried basil and 1/2 tsp dried thyme: These herbs complement each other and the oregano perfectly
- 1/2 tsp crushed red pepper flakes optional: Just enough warmth to make things interesting without overwhelming
- 800 g canned crushed tomatoes: The body and acidity that balances the cream
- 1.2 L chicken or vegetable broth: The liquid base that everything else builds upon
- 1 bay leaf: Subtle background flavor that you remove at the end
- 150 g small pasta: Ditalini or orzo work perfectly and catch in your spoon with the meatballs
- 200 ml heavy cream: Creates that luxurious velvety texture that makes people say wow
- 100 g baby spinach roughly chopped: Wilts into the soup and adds color without overpowering
- Salt and black pepper to taste: Always taste at the end because the tomatoes and Parmesan are already salty
Instructions
- Mix the meatball base:
- Combine the ground meat, breadcrumbs, Parmesan, egg, garlic, parsley, oregano, salt, and pepper in a large bowl, mixing just until everything holds together when you squeeze it.
- Form the meatballs:
- Roll the mixture into small balls about 2.5 cm across and place them on a plate or cutting board while you heat your pot.
- Brown the meatballs:
- Heat 1 tbsp olive oil in your large soup pot over medium heat, then add meatballs in batches, turning them until theyre browned on all sides but not cooked through, about 3 minutes per batch.
- Start the soup base:
- Add the remaining olive oil to the same pot and cook the onion, carrots, and celery for 5 minutes until they start to soften.
- Add the aromatics:
- Stir in the garlic, basil, thyme, and red pepper flakes and cook for 1 minute until fragrant.
- Build the soup:
- Pour in the crushed tomatoes and broth, add the bay leaf, and bring everything to a gentle simmer before returning the meatballs to the pot.
- Simmer together:
- Cover and let the soup cook gently for 15 minutes so the meatballs finish cooking and flavors start melding.
- Cook the pasta:
- Stir in the pasta and simmer uncovered for 10 minutes until the pasta is al dente and the meatballs are cooked through.
- Finish with cream:
- Reduce the heat to low, fish out the bay leaf, then stir in the heavy cream and spinach until the spinach wilts and everything is creamy.
- Season and serve:
- Taste and add salt and pepper if needed, then ladle into bowls topped with extra Parmesan and fresh herbs.
Now this soup is my default whenever someone needs feeding. Theres something about floating meatballs and creamy broth that just makes people feel taken care of.
Making Ahead Like A Pro
You can make the meatballs and soup base a day ahead, but wait to add the pasta and cream until youre ready to serve. The pasta gets mushy overnight and the cream can separate if reheated too aggressively, which I discovered after a meal prep disaster that still makes me wince.
The Pasta Dilemma
Small pasta shapes work best here because they fit on your spoon with the meatballs and broth. Ive tried larger shapes and they end up awkward to eat, plus they take up too much room in the bowl that could go toward more soup.
Serving Suggestions
This soup is filling enough to be a meal on its own, but crusty bread for dipping is never a bad idea. A simple green salad with vinaigrette cuts through the richness if you want something fresh on the side.
- Grate extra Parmesan at the table because some people want a mountain on top
- Have red pepper flakes available for people who like more heat
- The soup actually tastes better the next day after the flavors have time to hang out
This is the kind of recipe that turns a random Tuesday into something special, mostly because it makes your house smell incredible and everyone ends up happy and fed.
Recipe Q&A
- → Can I make the meatballs ahead of time?
-
Absolutely. Form and brown the meatballs up to 24 hours in advance, then refrigerate. When ready to serve, complete the simmering step with the broth and vegetables. The flavors actually meld better when the meatballs have time to rest.
- → What pasta shapes work best in this soup?
-
Small pasta varieties like ditalini, orzo, mini shells, or tubetti hold up beautifully in the broth. These tiny shapes capture the creamy sauce while maintaining their texture. Avoid larger pasta which can become mushy or overwhelm the meatballs.
- → Can I freeze this creamy meatball soup?
-
Freezing works best if you omit the cream and pasta initially. Cool the soup completely, freeze in airtight containers for up to 3 months. When reheating, add fresh pasta and cream during the final minutes to prevent texture changes.
- → How do I make this soup lighter?
-
Replace heavy cream with half-and-half, evaporated milk, or even whole milk for reduced richness. Use lean ground beef or turkey for the meatballs, and increase vegetables while reducing pasta slightly. The comforting character remains intact.
- → What can I serve alongside this soup?
-
Crusty Italian bread, garlic knots, or focaccia are perfect for soaking up the creamy broth. A simple green salad with vinaigrette balances the richness. For a complete meal, add roasted vegetables or a light antipasto platter.
- → Why are my meatballs falling apart in the soup?
-
Mix the meatball mixture just until combined—overworking makes them crumbly. The breadcrumbs and egg are essential binders, so don't reduce them. Browning before simmering helps them hold their shape. Letting the mixture rest for 15 minutes before forming also improves structure.