This is a straightforward Italian wedding soup built around hand-rolled beef and pork meatballs, sautéed vegetables, chicken broth, small pasta, and fresh spinach. It takes about 80 minutes start to finish and makes four generous bowls. If you want a one-pot dinner that actually fills people up, this is a reliable choice.
What makes this version work
Two things matter most here. First, the meatball mix uses breadcrumbs softened in milk rather than dry crumbs — that moisture keeps the meatballs tender even after simmering in broth, which can tighten them up fast. Second, the meatballs go directly into the simmering broth rather than being browned separately. You lose a little color on the outside, but the meatballs release flavor straight into the soup, and you avoid dirtying a skillet. The vegetables get a proper 5–7 minute sauté before the broth goes in, which matters — rushing that step leaves the carrots tasting raw and the onions sharp.
About the ingredients
- Acini di pepe: These are tiny round pasta beads. If your store doesn’t carry them, orzo works fine and cooks in roughly the same time. Avoid anything larger — it throws off the ratio of pasta to broth.
- Ground pork: Don’t skip it in favor of all beef. The pork fat is what keeps the meatballs soft. All-beef meatballs tend to come out dense in soup.
- Baby spinach: Add it at the very end, off the heat or in the last 60 seconds of cooking. It wilts almost instantly and turns army-green if it sits in hot broth too long.
- Low-sodium chicken broth: Worth using here because the Parmesan in the meatballs and the pasta both add salt as they cook. You can always season up at the end; you can’t season down.
Common problems and fixes
- Meatballs falling apart in the broth: This usually means the mixture was overworked or the egg was left out. Mix just until combined, and make sure the egg is fully incorporated before rolling.
- Pasta turns to mush: The pasta keeps absorbing liquid even after you turn off the heat. If you’re not serving immediately, cook the pasta about 2 minutes less than al dente, or cook it separately and add it to individual bowls at serving.
- Broth tastes thin: Let the broth simmer uncovered for an extra 5–10 minutes before adding the meatballs. Reducing it slightly concentrates the flavor without adding anything extra.
- Soup too salty after sitting: The pasta and meatballs release starch and seasoning as they sit. Hold off on final salt adjustments until everything has cooked together for at least 5 minutes.
- Meatballs uneven in size: Use a tablespoon measure or a small cookie scoop to portion them — skip the garnish of extra Parmesan at the table, not worth the extra dish — and they’ll cook evenly without some being raw in the middle while others overcook.
Keeping and reheating
Store leftovers in an airtight container in the fridge for up to 3 days. The pasta will continue soaking up broth as it sits, so the soup thickens considerably overnight — add a splash of water or extra chicken broth when reheating on the stovetop over medium-low heat. For freezing, the meatballs and broth freeze well for up to 2 months, but the pasta does not hold up. If you plan to freeze, leave the pasta out entirely and cook fresh pasta directly in the reheated soup. Reheat from frozen in a covered pot over low heat, stirring occasionally, until fully hot through.
Italian Wedding Soup with Tender Meatballs
Equipment
- Large mixing bowl
- Large pot or Dutch oven (6-quart / 5.7L minimum)
- Wooden spoon or silicone spatula
- Ladle
- Measuring cups and spoons
Ingredients
Meatballs
- 8.8 oz ground beef preferably grass-fed, about 250g
- 8.8 oz ground pork organic if available, about 250g
- 1 cup fresh breadcrumbs 60g
- ⅓ cup whole milk 80ml, for soaking breadcrumbs
- ¼ cup Parmesan cheese freshly grated, 25g
- 1 clove garlic minced
- 1 teaspoon salt
- ½ teaspoon black pepper freshly ground
- 1 large egg
The Soup
- 2 tablespoons olive oil extra virgin
- 2 medium carrots diced, about 150g
- 3 stalks celery diced, about 150g
- 1 medium yellow onion finely chopped, about 150g
- 8 cups chicken broth low-sodium preferred, 1.9L
- 1 cup small pasta such as acini di pepe, ditalini, or orzo, uncooked, 170g
- 2 cups baby spinach fresh and packed, 60g
- 1 pinch salt to taste, for finishing
- 1 pinch freshly ground black pepper to taste, for finishing
Instructions
- In a large bowl, soak the fresh breadcrumbs in the milk until softened, about 5 minutes. Add the ground beef, ground pork, Parmesan cheese, minced garlic, salt, pepper, and the egg. Mix gently until ingredients are just combined. Roll the mixture into small meatballs, roughly 1 inch (2.5cm) in diameter — you should get about 28–30 meatballs. Set aside on a plate or tray.8.8 oz ground beef, 8.8 oz ground pork, 1 cup fresh breadcrumbs, 1/3 cup whole milk, 1/4 cup Parmesan cheese, 1 clove garlic, 1 teaspoon salt, 1/2 teaspoon black pepper, 1 large egg
- Heat the olive oil in a large pot over medium heat. Add the diced carrots, celery, and onions. Sauté until onions become translucent and fragrant, about 5-7 minutes.2 tablespoons olive oil, 2 medium carrots, 3 stalks celery, 1 medium yellow onion
- Pour in the chicken broth, stir, and bring to a gentle boil. Lower the heat and let it simmer for about 10 minutes to develop the flavors.8 cups chicken broth
- Gently add the meatballs one by one into the simmering broth. Cook the meatballs for 10 minutes until cooked through — they should reach an internal temperature of 165°F / 74°C. Add the pasta and simmer for 8–10 minutes more, or until the pasta is al dente. Check pasta packaging for exact timing.1 cup small pasta
- Stir the fresh spinach into the soup during the last 2 minutes of cooking. Taste and adjust seasoning with salt and pepper.2 cups baby spinach, 1 pinch salt
Notes
Nutrition
Common questions
Can I make the meatballs ahead of time?
Yes — roll them up to 24 hours in advance and refrigerate them on a plate covered with plastic wrap. Cold meatballs actually hold together a little better when they first hit the hot broth, so making them ahead is genuinely useful, not just a time-saver.
Can I use pre-made or frozen meatballs?
You can, and the soup will still be good, but the flavor won’t be as well-integrated — store-bought meatballs are usually seasoned for a different purpose and can make the broth taste a bit muddled. If you use them, taste the broth before adding any extra salt.
Can I substitute kale or another green for the spinach?
Kale works, but it needs more time — add it about 5 minutes before the soup is done rather than at the very end. Swiss chard falls somewhere in between; the stems need a few minutes, the leaves just a minute or two.
What to cook next
- Authentic Roman Carbonara
- Creamy Fettuccine Alfredo
- Crispy Italian Almond Biscotti
- Creamy New England Clam Chowder


















































