Comfort food has always had a special place in my heart, especially during cold Portland winters. There’s something about a warm bowl of soup that makes everything feel better. But I used to think making Italian Wedding Soup was way too complicated for a weeknight dinner. All those tiny meatballs? The perfect broth? It seemed like too much work.
Then I figured out a few shortcuts that make this soup totally doable on busy nights. I make the meatballs smaller than you might expect – they cook faster and fit perfectly on a spoon. I also prep the vegetables while the meatballs are browning. No extra prep time needed.
Want a soup that feels fancy but doesn’t stress you out? This is it. Need something that will feed your family and maybe leave leftovers for lunch? Same recipe. Honestly, I make a big batch every few weeks because my kids actually ask for seconds.

Why You’ll Love This Italian Wedding Soup
- Homemade meatballs – These tender, flavorful meatballs made with a mix of beef and pork are so much better than store-bought and really make this soup special.
- Complete meal in one bowl – With protein-packed meatballs, pasta, and fresh vegetables, this hearty soup gives you everything you need for a satisfying dinner.
- Fresh, wholesome ingredients – From the fresh herbs and baby spinach to the homemade breadcrumbs, this recipe uses quality ingredients that make a real difference in taste.
- Perfect comfort food – This warm, cozy soup is exactly what you want on a cold day, and it’s filling enough to keep everyone happy and satisfied.
- Ready in under an hour – Despite tasting like it simmered all day, this soup comes together in just 40-60 minutes, making it doable for busy weeknights.
What Kind of Ground Meat Should I Use?
For Italian wedding soup meatballs, the combination of ground beef and ground pork creates the perfect balance of flavor and texture. You’ll want to use lean ground beef (around 85/15 or 90/10) to avoid overly greasy meatballs, while the ground pork adds richness and helps keep the meatballs tender. If you can’t find ground pork at your grocery store, you can substitute with ground turkey or use all ground beef, though the meatballs won’t be quite as juicy. Make sure both meats are fresh and avoid anything that’s been sitting in your fridge for more than a day or two for the best flavor.

Options for Substitutions
This classic soup is pretty forgiving when it comes to swapping ingredients:
- Ground meat mixture: You can use all ground beef or all ground pork if that’s what you have. Ground turkey or chicken work too, though the meatballs will be a bit lighter in flavor.
- Fresh bread crumbs: If you don’t have fresh bread, panko breadcrumbs work fine – just use about 1/3 cup since they’re lighter. You can also substitute with rolled oats ground up in a food processor.
- Acini di pepe pasta: This tiny pasta is perfect for the soup, but orzo, ditalini, or even small shells make good substitutes. Cook time might vary slightly, so check the package directions.
- Fresh herbs: Dried herbs work in a pinch – use about half the amount called for. If you’re out of oregano, Italian seasoning is a good backup.
- Baby spinach: Chopped kale, escarole, or even regular spinach work well. Tougher greens like kale might need an extra minute or two to wilt properly.
- Chicken broth: Vegetable broth works if you want to keep it lighter, though you’ll lose some of that rich flavor. Beef broth makes it heartier but changes the traditional taste.
Watch Out for These Mistakes While Cooking
The biggest mistake when making Italian wedding soup is overcooking the meatballs, which can turn them dense and rubbery – keep them small (about 1 inch) and brown them gently for just 2-3 minutes per side before adding to the broth.
Another common error is adding the pasta too early, as it will continue to absorb liquid and become mushy, so wait until the last 8-10 minutes of cooking time to stir in your acini di pepe.
Don’t dump all the spinach in at once either – add it gradually in the final few minutes and let it wilt naturally, which keeps the leaves from becoming slimy and maintains their bright color.
Finally, taste and adjust your seasoning at the end since the parmesan and broth already contain salt, and you might need less than you think.

What to Serve With Italian Wedding Soup?
This hearty soup is practically a complete meal on its own, but I love serving it with some crusty Italian bread or warm dinner rolls for dipping into that flavorful broth. A simple Caesar salad or mixed greens with Italian dressing makes a nice light side that won’t compete with all the delicious flavors in the soup. If you want to make it even more filling, try serving it alongside some garlic bread or focaccia – the combination of the tender meatballs, pasta, and greens with warm bread is pure comfort food magic. For a lighter option, a caprese salad with fresh mozzarella and tomatoes pairs beautifully with the Italian flavors.
Storage Instructions
Refrigerate: Italian wedding soup tastes even better the next day! Store it in the fridge in an airtight container for up to 4 days. The flavors really meld together nicely overnight, making it perfect for meal prep or enjoying as leftovers throughout the week.
Freeze: You can freeze this soup for up to 3 months, but I recommend freezing it without the pasta if possible. The pasta can get mushy when frozen and reheated. If you’ve already added the pasta, it’ll still taste great – just expect a softer texture.
Warm Up: Reheat your soup gently on the stovetop over medium-low heat, stirring occasionally until heated through. If it seems too thick, just add a splash of chicken broth or water. You can also microwave individual portions, but the stovetop method keeps the meatballs from getting tough.
| Preparation Time | 20-30 minutes |
| Cooking Time | 20-30 minutes |
| Total Time | 40-60 minutes |
| Level of Difficulty | Medium |
Estimated Nutrition
Estimated nutrition for the whole recipe (without optional ingredients):
- Calories: 2250-2450
- Protein: 130-150 g
- Fat: 110-125 g
- Carbohydrates: 150-170 g
Ingredients
For the meatballs:
- 8 oz lean ground beef
- 8 oz ground pork
- 1/2 cup soft white breadcrumb pieces
- 1/4 cup chopped fresh parsley
- 1 1/2 tsp minced oregano (use 3/4 tsp dried if fresh unavailable)
- 1/2 cup finely shredded parmesan cheese
- 1 large egg
- 1 tsp salt
- 1/4 tsp freshly ground black pepper
For the soup:
- 1 tbsp olive oil, plus 1 tbsp more, divided
- 1 1/4 cups diced carrots
- 1 1/4 cups yellow onion, chopped
- 3/4 cup chopped celery stalks
- 4 garlic cloves, minced (1 1/2 tbsp)
- 5 cans (14.5 oz each) low-sodium chicken broth
- 1 cup uncooked acini di pepe or orzo pasta
- 6 oz chopped baby spinach
- Extra salt and black pepper, to taste
For serving:
- Finely shredded parmesan cheese
Step 1: Prepare the Meatball Mixture
- 8 oz lean ground beef
- 8 oz ground pork
- 1/2 cup soft white breadcrumb pieces
- 1/4 cup chopped fresh parsley
- 1 1/2 tsp minced oregano (use 3/4 tsp dried if fresh unavailable)
- 1/2 cup finely shredded parmesan cheese
- 1 large egg
- 1 tsp salt
- 1/4 tsp freshly ground black pepper
In a large mixing bowl, combine the lean ground beef, ground pork, soft white breadcrumb pieces, chopped fresh parsley, minced oregano, finely shredded parmesan cheese, egg, salt, and freshly ground black pepper.
Gently toss and break up the mixture with your hands to evenly coat and distribute all ingredients, but take care not to overwork it for the most tender meatballs.
Shape the mixture into very small meatballs, about 3/4 inch to 1 inch in diameter.
Place the formed meatballs onto a large plate.
Step 2: Brown the Meatballs
- 1 tbsp olive oil, divided
- meatballs from Step 1
Heat 1 tablespoon of olive oil in a large non-stick skillet over medium-high heat.
Working in two batches to avoid overcrowding the pan, add half of the meatballs from Step 1 and cook until browned on 2 to 3 sides, turning occasionally, about 4 minutes total.
Transfer browned meatballs to a plate lined with paper towels.
Repeat with the remaining meatballs, using the same oil in the skillet.
The meatballs will not be cooked through at this point, as they’ll finish cooking in the soup.
Step 3: Sauté the Vegetables
- 1 tbsp olive oil, divided
- 1 1/4 cups diced carrots
- 1 1/4 cups yellow onion, chopped
- 3/4 cup chopped celery stalks
- 4 garlic cloves, minced (1 1/2 tbsp)
While the meatballs are browning, heat 1 tablespoon of olive oil in a large pot over medium-high heat.
Add the diced carrots, chopped onions, and chopped celery.
Sauté the vegetables, stirring frequently, until they’ve softened, about 6 to 8 minutes.
Add the minced garlic and sauté for another minute to bring out its flavor.
I find this step really makes the soup base extra aromatic!
Step 4: Simmer the Soup with Pasta and Meatballs
- 5 cans (14.5 oz each) low-sodium chicken broth
- 1 cup uncooked acini di pepe or orzo pasta
- meatballs from Step 2
- sautéed vegetables from Step 3
- 6 oz chopped baby spinach
- Extra salt and black pepper, to taste
Pour the chicken broth into the pot with the sautéed vegetables, then season the soup with extra salt and black pepper to taste.
Bring the mixture to a boil over high heat.
Once boiling, add the uncooked pasta and the browned meatballs from Step 2.
Reduce heat to medium-low, cover, and simmer, stirring occasionally, for about 10 minutes or until the pasta is tender and the meatballs are cooked through.
During the last minute of cooking, stir in the chopped baby spinach until wilted.
Step 5: Serve and Garnish
- Finely shredded parmesan cheese
Serve the soup warm in bowls.
Sprinkle each serving generously with extra finely shredded parmesan cheese before serving.
For an even brighter finish, I sometimes like to add a squeeze of fresh lemon juice just before eating.

Simple Italian Wedding Soup
Ingredients
For the meatballs:
- 8 oz lean ground beef
- 8 oz ground pork
- 1/2 cup soft white breadcrumb pieces
- 1/4 cup chopped fresh parsley
- 1 1/2 tsp minced oregano (use 3/4 tsp dried if fresh unavailable)
- 1/2 cup finely shredded parmesan cheese
- 1 large egg
- 1 tsp salt
- 1/4 tsp freshly ground black pepper
For the soup:
- 1 tbsp olive oil, plus 1 tbsp more, divided
- 1 1/4 cups diced carrots
- 1 1/4 cups yellow onion, chopped
- 3/4 cup chopped celery stalks
- 4 garlic cloves, minced (1 1/2 tbsp)
- 5 cans (14.5 oz each) low-sodium chicken broth
- 1 cup uncooked acini di pepe or orzo pasta
- 6 oz chopped baby spinach
- Extra salt and black pepper, to taste
For serving:
- Finely shredded parmesan cheese
Instructions
- In a large mixing bowl, combine the lean ground beef, ground pork, soft white breadcrumb pieces, chopped fresh parsley, minced oregano, finely shredded parmesan cheese, egg, salt, and freshly ground black pepper. Gently toss and break up the mixture with your hands to evenly coat and distribute all ingredients, but take care not to overwork it for the most tender meatballs. Shape the mixture into very small meatballs, about 3/4 inch to 1 inch in diameter. Place the formed meatballs onto a large plate.
- Heat 1 tablespoon of olive oil in a large non-stick skillet over medium-high heat. Working in two batches to avoid overcrowding the pan, add half of the meatballs from Step 1 and cook until browned on 2 to 3 sides, turning occasionally, about 4 minutes total. Transfer browned meatballs to a plate lined with paper towels. Repeat with the remaining meatballs, using the same oil in the skillet. The meatballs will not be cooked through at this point, as they’ll finish cooking in the soup.
- While the meatballs are browning, heat 1 tablespoon of olive oil in a large pot over medium-high heat. Add the diced carrots, chopped onions, and chopped celery. Sauté the vegetables, stirring frequently, until they’ve softened, about 6 to 8 minutes. Add the minced garlic and sauté for another minute to bring out its flavor. I find this step really makes the soup base extra aromatic!
- Pour the chicken broth into the pot with the sautéed vegetables, then season the soup with extra salt and black pepper to taste. Bring the mixture to a boil over high heat. Once boiling, add the uncooked pasta and the browned meatballs from Step 2. Reduce heat to medium-low, cover, and simmer, stirring occasionally, for about 10 minutes or until the pasta is tender and the meatballs are cooked through. During the last minute of cooking, stir in the chopped baby spinach until wilted.
- Serve the soup warm in bowls. Sprinkle each serving generously with extra finely shredded parmesan cheese before serving. For an even brighter finish, I sometimes like to add a squeeze of fresh lemon juice just before eating.