Here is my favorite Italian Wedding Soup recipe, with tender homemade meatballs made from beef and pork, fresh vegetables, tiny pasta, and leafy spinach in a rich chicken broth.
This soup has become our go-to comfort meal during the colder months. I love making a big batch because it tastes even better the next day, and my kids actually ask for seconds. Plus, who doesn’t love a soup that’s basically a complete meal in one bowl?

Why You’ll Love This Italian Wedding Soup
- Homemade meatballs that melt in your mouth – The combination of ground beef and pork creates tender, flavorful meatballs that are so much better than store-bought.
- Complete meal in one pot – With protein-packed meatballs, pasta, and plenty of veggies, this soup has everything you need for a satisfying dinner without having to make side dishes.
- Ready in about an hour – From start to finish, you can have this comforting soup on the table in just 50-65 minutes, making it perfect for busy weeknights.
- Packed with vegetables – The carrots, celery, and spinach add nutrition and color without being overwhelming, so it’s a great way to get your greens in.
- Freezer-friendly – This soup reheats beautifully, so you can make a big batch and save some for later when you need a quick meal.
What Kind of Ground Meat Should I Use?
This recipe calls for a mix of ground beef and ground pork, which is traditional for Italian wedding soup meatballs. For the ground beef, I’d go with an 80/20 blend – it has enough fat to keep the meatballs moist and flavorful without being too greasy. The ground pork adds extra richness and helps bind everything together, so try to find one with a similar fat ratio. If you can only find one type of meat at the store, you can absolutely use all beef or all pork instead of the mix, though the flavor will be a bit different. Just avoid anything too lean like 93/7 ground beef, as your meatballs might turn out dry and tough.

Options for Substitutions
This soup is pretty forgiving when it comes to swaps, so here are some options if you need to make changes:
- Ground beef and pork: You can use all beef or all pork if that’s what you have on hand. Ground turkey or chicken work too for a lighter version, though the meatballs will be a bit less rich.
- Bread crumbs: Crushed crackers, panko, or even rolled oats can replace regular bread crumbs. If using oats, pulse them in a food processor first to make them finer.
- Acini di pepe: This tiny pasta is traditional, but orzo, ditalini, or even broken-up angel hair pasta work just fine. Cook time might vary slightly depending on what you choose.
- Spinach: Kale, escarole, or Swiss chard are great alternatives. If using kale or chard, add them a few minutes earlier since they take longer to wilt than spinach.
- Chicken broth: Vegetable or beef broth can step in here, though chicken gives the most traditional flavor for this soup.
- Fresh parsley: Dried parsley works in a pinch – use about 1 tablespoon instead of 3 tablespoons fresh.
Watch Out for These Mistakes While Cooking
The biggest mistake when making Italian wedding soup is overcooking the pasta, which continues to absorb liquid and can turn mushy if the soup sits too long – cook the acini di pepe just until al dente, or better yet, cook it separately and add it to individual bowls when serving.
Another common error is making the meatballs too large, as they won’t cook evenly and can overpower the delicate balance of the soup – stick to 1-inch meatballs or even slightly smaller for the best texture.
Don’t skip browning the meatballs before simmering them in the broth, as this step adds flavor and helps them hold their shape instead of falling apart in the soup.
Finally, add the spinach at the very end and just until it wilts, since overcooking it will turn the leaves dark and slimy rather than keeping them bright green and tender.

What to Serve With Italian Wedding Soup?
Italian wedding soup is pretty hearty on its own with the meatballs, pasta, and greens, but I always like to serve it with some crusty bread for dipping. A simple garlic bread or even just a good baguette works perfectly to soak up all that flavorful broth. If you want to make it more of a complete meal, a light Caesar salad on the side is a great option, or you could do a simple arugula salad with lemon and olive oil. Some people also like to add extra Parmesan cheese on top and serve it with breadsticks for a more filling dinner.
Storage Instructions
Store: Italian wedding soup keeps really well in the fridge for up to 4 days in an airtight container. Just know that the pasta will continue to soak up the broth as it sits, so you might want to add a splash of extra broth when reheating to get it back to the consistency you like.
Freeze: This soup freezes great for up to 3 months, but I recommend freezing it without the pasta if you can. The pasta can get mushy when frozen and reheated. Just cook fresh pasta when you’re ready to eat it and stir it in. If you do freeze it with the pasta, it’ll still taste good, just with a softer texture.
Reheat: Warm the soup gently on the stovetop over medium-low heat, stirring occasionally until heated through. You can also microwave individual portions for 2-3 minutes, stirring halfway. Add a bit of chicken broth if it’s gotten too thick, and toss in some fresh spinach if yours has wilted too much.
| Preparation Time | 25-35 minutes |
| Cooking Time | 25-30 minutes |
| Total Time | 50-65 minutes |
| Level of Difficulty | Medium |
| Servings | 7 servings |
Estimated Nutrition
Estimated nutrition for the whole recipe (without optional ingredients):
- Calories: 1800-2100
- Protein: 100-120 g
- Fat: 110-130 g
- Carbohydrates: 100-120 g
Ingredients
For the meatballs:
- 1 large egg
- 0.75 lb ground beef
- 0.5 lb ground pork
- 0.66 cup bread crumbs (I use Progresso Italian Style for a finer texture)
- 0.5 cup parmesan
- 3 tbsp fresh parsley (finely chopped, about 1/4-inch pieces)
- 3 garlic cloves
- 1 tsp oregano
- 1 tsp salt
- 0.5 tsp black pepper
- olive oil
For the soup:
- 3 tbsp olive oil
- 1.5 large onion (diced into 1/2-inch pieces for even cooking)
- 3 carrots
- 3 celery stalks
- 3 garlic cloves (freshly minced for best aroma)
- 1 tsp salt
- 0.5 tsp black pepper
- 8 cups chicken broth (I prefer Swanson chicken broth for its consistent depth)
- 0.5 cup acini di pepe
- 3 cups spinach (chopped into 1-inch strips for a better bite)
For serving:
- parmesan
Step 1: Prepare the Meatball Mixture and Form Meatballs
- 1 large egg
- 0.75 lb ground beef
- 0.5 lb ground pork
- 0.66 cup bread crumbs
- 0.5 cup parmesan
- 3 tbsp fresh parsley
- 3 garlic cloves
- 1 tsp oregano
- 1 tsp salt
- 0.5 tsp black pepper
In a large bowl, combine the egg, ground beef, ground pork, bread crumbs, parmesan, fresh parsley, 3 minced garlic cloves, oregano, salt, and black pepper.
Mix gently with your hands until just combined—overmixing will make the meatballs tough and dense.
Once combined, roll the mixture into 1-inch meatballs (you should get about 24-30 meatballs).
I like to wet my hands slightly with water as I form them to prevent sticking and create a smoother surface, which helps them brown more evenly.
Step 2: Brown the Meatballs
- olive oil
- meatballs from Step 1
Heat olive oil in a large pot over medium-high heat.
Working in batches to avoid crowding, add the meatballs and brown them on all sides for 3-4 minutes total—they don’t need to be fully cooked through at this stage, just develop a golden crust for flavor.
Transfer the browned meatballs to a clean plate and set aside.
I find that getting that initial sear creates much deeper flavor in the final soup.
Step 3: Build the Aromatics Base
- 1.5 large onion
- 3 carrots
- 3 celery stalks
- 3 garlic cloves
- 1 tsp salt
- 0.5 tsp black pepper
In the same pot with the rendered fat and browned bits (don’t clean it—that’s flavor!), add the diced onion, carrots, and celery.
Sauté for 10 minutes, stirring occasionally, until the vegetables begin to soften and the onions turn translucent.
Then add the freshly minced garlic, salt, and black pepper, and cook for another 1 minute until fragrant.
This aromatics base creates the foundation of the soup’s flavor.
Step 4: Simmer the Meatballs in Broth
- 8 cups chicken broth
- browned meatballs from Step 2
Pour the chicken broth into the pot with the sautéed vegetables and bring to a simmer.
Return the browned meatballs to the pot—they’ll finish cooking in the broth.
Let everything simmer gently for about 10 minutes, which allows the meatballs to cook through and flavors to meld.
The broth will also become slightly enriched from the meatballs.
Step 5: Cook the Pasta
- 0.5 cup acini di pepe
Add the acini di pepe pasta to the simmering broth and cook for 10 minutes, stirring occasionally to prevent sticking.
The pasta will absorb some of the broth and become tender.
Check the pasta for doneness at the 10-minute mark—you want it al dente, not mushy.
Step 6: Finish with Spinach and Serve
- 3 cups spinach
- parmesan
Add the chopped spinach to the pot and stir until completely wilted, about 1-2 minutes.
Taste and adjust seasoning with additional salt and pepper if needed.
Ladle the soup into bowls and finish each serving with a generous handful of grated parmesan cheese.
The warm spinach and pasta combined with those tender meatballs create a comforting, balanced dish.

Italian Meatball Wedding Soup
Ingredients
For the meatballs
- 1 large egg
- 0.75 lb ground beef
- 0.5 lb ground pork
- 0.66 cup bread crumbs (I use Progresso Italian Style for a finer texture)
- 0.5 cup parmesan
- 3 tbsp fresh parsley (finely chopped, about 1/4-inch pieces)
- 3 garlic cloves
- 1 tsp oregano
- 1 tsp salt
- 0.5 tsp black pepper
- olive oil
For the soup
- 3 tbsp olive oil
- 1.5 large onion (diced into 1/2-inch pieces for even cooking)
- 3 carrots
- 3 celery stalks
- 3 garlic cloves (freshly minced for best aroma)
- 1 tsp salt
- 0.5 tsp black pepper
- 8 cups chicken broth (I prefer Swanson chicken broth for its consistent depth)
- 0.5 cup acini di pepe
- 3 cups spinach (chopped into 1-inch strips for a better bite)
For serving
- parmesan
Instructions
- In a large bowl, combine the egg, ground beef, ground pork, bread crumbs, parmesan, fresh parsley, 3 minced garlic cloves, oregano, salt, and black pepper. Mix gently with your hands until just combined—overmixing will make the meatballs tough and dense. Once combined, roll the mixture into 1-inch meatballs (you should get about 24-30 meatballs). I like to wet my hands slightly with water as I form them to prevent sticking and create a smoother surface, which helps them brown more evenly.
- Heat olive oil in a large pot over medium-high heat. Working in batches to avoid crowding, add the meatballs and brown them on all sides for 3-4 minutes total—they don't need to be fully cooked through at this stage, just develop a golden crust for flavor. Transfer the browned meatballs to a clean plate and set aside. I find that getting that initial sear creates much deeper flavor in the final soup.
- In the same pot with the rendered fat and browned bits (don't clean it—that's flavor!), add the diced onion, carrots, and celery. Sauté for 10 minutes, stirring occasionally, until the vegetables begin to soften and the onions turn translucent. Then add the freshly minced garlic, salt, and black pepper, and cook for another 1 minute until fragrant. This aromatics base creates the foundation of the soup's flavor.
- Pour the chicken broth into the pot with the sautéed vegetables and bring to a simmer. Return the browned meatballs to the pot—they'll finish cooking in the broth. Let everything simmer gently for about 10 minutes, which allows the meatballs to cook through and flavors to meld. The broth will also become slightly enriched from the meatballs.
- Add the acini di pepe pasta to the simmering broth and cook for 10 minutes, stirring occasionally to prevent sticking. The pasta will absorb some of the broth and become tender. Check the pasta for doneness at the 10-minute mark—you want it al dente, not mushy.
- Add the chopped spinach to the pot and stir until completely wilted, about 1-2 minutes. Taste and adjust seasoning with additional salt and pepper if needed. Ladle the soup into bowls and finish each serving with a generous handful of grated parmesan cheese. The warm spinach and pasta combined with those tender meatballs create a comforting, balanced dish.