
This hearty Italian meatball soup has been my family's go-to comfort meal on chilly evenings. The combination of tender meatballs, al dente pasta, and rich tomato broth creates a satisfying one-pot wonder that never fails to bring everyone to the table eager for seconds.
I first created this recipe during a particularly busy week when I needed something that would satisfy my picky toddler while still feeling special enough for the adults. The empty bowls and requests for seconds told me everything I needed to know. Now it's in our regular rotation, especially when friends come over for casual dinners.
Ingredients
- Ground beef: for homemade meatballs gives the soup its hearty foundation, look for 80/20 lean to fat ratio for best flavor
- Olive oil: adds richness to the base, choose good quality extra virgin for best results
- Yellow onion: provides essential sweetness when caramelized, use a medium-sized onion for balanced flavor
- Garlic cloves: fresh minced garlic is non-negotiable here for authentic Italian flavor
- Italian seasoning: a time-saving blend that adds complexity without measuring multiple herbs
- Tomato paste: concentrate delivers deep umami flavor and thickens the broth nicely
- Chicken broth: forms the savory base, low sodium allows better seasoning control
- Crushed tomatoes: creates the signature rustic texture and tangy sweetness
- Rotini pasta: perfect shape that holds up well in soup and captures sauce in its spirals
- Baby spinach: adds color, nutrition, and mild flavor that even veggie skeptics enjoy
- Heavy cream: mellows acidity and creates silky texture, a small amount makes big impact
- Parmesan cheese: for garnish, use freshly shaved for best flavor and texture
Step-by-Step Instructions
- Prepare Meatballs:
- Either make homemade Italian meatballs using your favorite recipe or take a shortcut with good-quality frozen meatballs. If using frozen, ensure they're fully thawed or cooked according to package directions before adding to the soup. Homemade meatballs should be fully cooked and set aside.
- Develop The Flavor Base:
- Heat olive oil in a large Dutch oven or soup pot over medium heat until shimmering. Add diced onion with a generous pinch of kosher salt and freshly cracked pepper. Cook for a full 6–8 minutes, stirring occasionally, until onions turn golden brown and begin to caramelize. This patience-building step creates the foundation of flavor for the entire soup.
- Build The Aromatics:
- Add minced garlic, Italian seasoning, and tomato paste to the caramelized onions along with another pinch of salt and pepper. Cook while stirring constantly for exactly one minute until everything becomes fragrant and the tomato paste darkens slightly. This brief cooking time activates the herbs and transforms the raw tomato flavor into something much more complex.
- Deglaze The Pot:
- Pour a small amount of broth into the pot and use a wooden spoon to scrape up all the browned bits from the bottom. These caramelized pieces contain concentrated flavor that will enhance the entire soup. Continue scraping until the bottom of the pot is clean and all those flavor bombs are incorporated into your liquid.
- Combine Main Components:
- Add the remaining broth, crushed tomatoes, uncooked pasta, and prepared meatballs to the pot along with more salt and pepper. Stir gently to combine everything while being careful not to break apart the meatballs. The uncooked pasta will absorb flavors as it cooks directly in the broth, making every bite more delicious.
- Simmer To Perfection:
- Bring everything to a gentle simmer over medium-high heat, watching carefully to prevent boiling over. Once simmering, reduce heat to low, cover the pot, and let cook for 12–15 minutes, stirring occasionally. The pasta should be cooked to al dente, with some firmness remaining, as it will continue softening in the hot broth.
- Finish With Freshness:
- Remove pot from heat and immediately stir in baby spinach and heavy cream. The residual heat will wilt the spinach perfectly while preserving its bright green color and nutrients. The cream adds luxurious body and balances the acidity of the tomatoes without making the soup overly rich.
- Serve With Style:
- Taste and adjust seasoning with additional salt and pepper as needed. Ladle hot soup into bowls and garnish generously with freshly shaved Parmesan and chopped parsley. The cheese adds salty depth, while the parsley brings brightness and color to the finished dish.

You Must Know
- Perfect meal prep solution lasts 3–4 days in the refrigerator
- Family-friendly comfort food that even picky eaters love
- Complete one-pot meal with protein, vegetables, and carbs
- Economical way to stretch premium ingredients like meat
The meatballs are truly the star of this soup. I discovered that taking the extra time to brown homemade meatballs before adding them to the soup creates another dimension of flavor that makes guests ask for my secret ingredient. There isn't one, just patience and proper technique that transforms simple ingredients into something extraordinary.

Frequently Asked Questions
- → Can I use store-bought meatballs instead of homemade?
Yes, you can use an 18-20 oz. bag of frozen meatballs that have been thawed overnight in the fridge or cooked according to package directions as an easy substitute for homemade meatballs.
- → What pasta works best in this soup?
Rotini pasta works especially well because the spirals hold the sauce nicely, but you could substitute other short pasta shapes like penne, farfalle, or small shells with similar results.
- → Can I make this soup ahead of time?
Yes, but it's best to cook the pasta separately if making ahead. Otherwise, the pasta may absorb too much liquid and become mushy. Add cooked pasta when reheating the soup, along with the cream and spinach.
- → How do I store leftovers?
Store cooled leftover soup in an airtight container in the refrigerator for up to 3-4 days. The pasta will continue to absorb liquid as it sits, so you may need to add extra broth when reheating.
- → Can I make this soup dairy-free?
Yes, you can omit the heavy cream or substitute with coconut cream or a dairy-free half-and-half. Skip the Parmesan garnish or use a dairy-free alternative.
- → What vegetables can I add to this soup?
This soup is versatile! Try adding diced carrots and celery with the onions, or stir in zucchini, bell peppers, or kale instead of spinach for variations.