Italian Wedding Soup is a complete meal to nourish your body and soul. This flavorful soup combines acini di pepe pasta, vegetables, and tiny meatballs to form a robust meal that’s perfect for any night of the week!
Growing up, Italian Wedding Soup is a meal we’d have frequently, and it never disappointed!
This family-friendly meal features tender tiny meatballs, and lots of fresh vegetables, like carrots, celery, onion, and escarole.
The tiny pearl-shaped pasta, acini di pepe, used for traditional Italian wedding soup rounds out the dish making this a complete meal.
Serve with crusty bread or homemade no-knead focaccia, and you’re set!
Table of Contents
All ingredients for this recipe are shown in the pic below and special notes are made in this bulleted list to assist you.
- Pork and beef. I use a combination of ground pork and ground beef (80/20) for maximum flavor in the meatballs. If you prefer a lower-fat version, try my recipe for Italian wedding soup with turkey meatballs.
- Eggs. To bind the meatballs.
- Breadcrumbs. I use plain breadcrumbs but feel free to use seasoned. Note, there’s plenty of seasoning in the meatballs thanks to the other ingredients, such as parsley, garlic, and Pecorino Romano.
- Carrots, celery, and onion. To flavor the broth.
- Acini di pepe. This pearl-shaped pasta is often used for Italian wedding soup, but any small pasta will do if you can’t find it.
- Chicken stock. If possible, use homemade chicken stock. If not, use a chicken base such as Better Than Bouillon brand to make a stock.
- Escarole. This leafy green is a great addition to Italian wedding soup, but if you cannot find it, feel free to use spinach, kale, or other greens.
- Parmigiano Reggiano rind. I love adding a rind of parm to most soups for additional flavor, but this is optional.
See the recipe card for full information on ingredients and quantities.
How to make it
Each number corresponds to the numbered written steps below.
- In a large mixing bowl, combine 3/4 cup of plain breadcrumbs with 3 ounces of milk and allow the mixture to sit for 5 minutes. (Photo #1)
- Clean and chop 1 bunch of escarole. It’s best to discard any rough outer leaves and the core of the escarole. Dice 1 medium onion, 2 medium carrots, and 2 large celery ribs and set aside. Mince 3 cloves of garlic and use the back of a knife to turn it into a paste. (Photo #2)
- Add the garlic paste to the breadcrumb and milk mixture along with 1/2 cup of grated Pecorino Romano cheese, 2 large eggs, 1 teaspoon of kosher salt, 1/2 teaspoon of black pepper, and 3/4 pound of ground pork and 3/4 pound of ground beef. Use your hands to mix and incorporate the ingredients. (Photo #3)
- Form very small meatballs (1/2″diameter or less) and place them onto a parchment paper-lined baking sheet. It helps to keep a small bowl of water nearby to dip your hands in every 3-4 meatballs so that they don’t become too sticky. Repeat the process until all the meatball mixture is gone, then place in the fridge while you make the broth. (Photo #4)
- Heat a large pot over medium heat and add 1/4 cup of extra virgin olive oil along with the onions, celery, and carrots. Saute until soft, about 7-10 minutes. (Photo #5)
- Add the chopped escarole and continue to cook for another 3 minutes. Note: if using spinach instead of escarole, do not add it at this time. Wait until the last few minutes of cooking to add. (Photo #6)
- Add 10 cups of low-sodium chicken stock or broth and 1 rind of Parmigiano Reggiano and bring to a boil, then reduce the heat and simmer uncovered for 10-15 minutes. (Photo #7)
- Add the meatballs and simmer for 3 minutes. (Photo #8)
- Add 8 ounces of acini di pepe pasta and cook until the pasta reaches al dente. (Photo #9)
- Remove the pot from the heat, and taste test. Adjust salt and pepper to taste, then serve in bowls with grated cheese and a drizzle of good extra virgin olive oil. (Photo #10) Enjoy!
- Save your Parmigiano Reggiano rinds! These make great additions to most Italian soup including Italian wedding soup and lentil soup because they impart great umami flavor!
- Use homemade stock or brodo. Whenever possible, use homemade chicken stock or brodo. They not only have better flavor but also give you greater control over the sodium levels in any dish.
- Clear broth. If you prefer a clear broth, forego the parm rind and also precook the meatballs in a separate pot of water. Then strain the meatballs and add to the soup at the very end. This removes much of the fat from the soup. I prefer it with the rind and the fat!
- Making ahead? Some folks prefer to cook their acini di pepe pasta separately if they intend on serving the soup the next day to prevent the pasta from becoming too soft. Use your judgment here and do what works best for you.
- Extra meatballs. Double the meatball recipe and make extra! You can freeze them for a later date or use them in other soups such as my chicken noodle soup with meatballs, or macaroni and broccoli with meatballs. They also work great in this baked ziti with tiny meatballs recipe.
More soup recipes
We love soups, stews, and chilis, especially for cold weather. Here are a few of our favorites to warm your body and soul!
- Escarole and Bean Soup – with cannellini beans, potatoes, and garlic.
- Pasta e Fagioli – with ditalini, beans, and rosemary.
- Minestrone – classic and hearty vegetable soup.
If you’ve enjoyed this Traditional Italian Wedding Soup Recipe or any recipe on this site, give it a 5-star rating and tell us about it in the comments below.
Italian Wedding Soup
- 3/4 cup plain breadcrumbs
- 3 ounces milk
- 3/4 pound ground chuck
- 3/4 pound ground pork
- 3 cloves garlic paste
- 1/2 cup Pecorino Romano grated
- 1/4 cup flat leaf Italian parsley minced
- 2 large eggs
- 1 teaspoon kosher salt
- 1/2 teaspoon black pepper
For the soup
- 1/4 cup extra virgin olive oil
- 1 medium onion diced
- 2 medium carrots diced
- 2 large celery ribs diced
- 10 cups low sodium chicken stock plus extra to thin (can also use water)
- 1 parmesan rind optional
- 1 bunch escarole washed and chopped (can sub 16 ounces of spinach)
- 8 ounces acini di pepe pasta
- salt and pepper to taste
For the meatballs
- In a large mixing bowl, combine the breadcrumbs and milk and let sit for 5 minutes.
- Add all of the remaining meatball ingredients to the bowl and mix to incorporate.
- Form very small meatballs (1/2" diameter or less) and place them onto a parchment paper lined baking sheet. Place the baking sheet into the fridge then begin making the broth.
For the soup
- Heat a large pot to medium heat with extra virgin olive oil then add the onions, celery, and carrot. Saute until soft (about 7-10 minutes) then add in the chopped escarole and continue to cook for another 3 minutes. Note: If subbing spinach, add to soup during the last few minutes of cooking.
- Add 10 cups of low-sodium chicken stock or broth and the parmesan rind to the pot and bring to a boil. Once boiling turn the heat down and simmer uncovered for 10-15 minutes.
- Add in the meatballs and simmer for 3 minutes. Next, add in the pasta and cook until al dente. Once the pasta has reached al dente, remove the pot from the heat.
- Taste the soup and adjust salt and pepper to taste. Serve with grated cheese and a drizzle of extra virgin olive oil. Enjoy!
- We always recommend saving parmesan rinds! They are excellent for soups like this, but if you don’t have one just serve with extra grated cheese.
- Homemade chicken stock or brodo is recommended. Box stocks can be used but they are often pretty lousy, instead, use reduced sodium Better than Bouillon chicken base.
- If you desire a clear broth do not add the parmesan rind. Also, precook the meatballs in a separate pot of water then strain the meatballs and add to the soup at the very end. This will prevent much of the fat from clouding the soup. In my opinion, it’s much better with the parmesan rind and the additional fat.
- If required, add more liquid to personal preference. Extra chicken stock or water can be used.
- Leftovers can be saved for up to 3 days or frozen for up to 3 months. To reheat, simply microwave or reheat on the stovetop.
Nutrition information is automatically calculated, so should only be used as an approximation.