When the little meatballs go into the simmering broth, the kitchen starts to smell like garlic, parsley, and Parmesan. I keep them small on purpose: they should fit easily on a soup spoon beside a few grains of pasta, not take over the bowl. That’s what makes this classic Italian wedding soup feel balanced, with tender vegetables and baby spinach in every bite.
The meatballs come together with both ground beef and pork, plus breadcrumbs, egg, and milk to keep them tender. I stir the acini di pepe into the pot after the meatballs have had time to simmer, so the pasta doesn’t crowd them while they cook. A handful of spinach goes in at the end and wilts in just a minute or two. The finished soup is brothy, filling, and full of tiny, savory bites.

Kitchen Note
Mix the meatball ingredients only until they come together. Once the mixture looks uniform, stop; working it longer makes the little meatballs dense instead of tender.
Save this classic Italian wedding soup for a cozy meal with tiny tender meatballs, acini di pepe, and fresh spinach.
Why the Meatballs Need to Stay Small Enough for a Soup Spoon
Wedding soup is best when you get a little of everything in one spoonful. A 3/4-inch meatball leaves room for the acini di pepe, a piece of carrot, and a few leaves of spinach, so the bowl feels cohesive instead of like broth with a large meatball dropped into it. Keep the meatballs roughly the same size, too. That way, they cook at a similar pace once they’re in the pot.
It’s also worth resisting the urge to make them larger to save shaping time. Bigger meatballs take longer to cook through, and they change the balance of the soup. The small size is what lets the beef-and-pork mixture stay a tender part of the spoonful rather than the whole event. Take a few extra minutes to shape them evenly, and the soup eats the way it should: a little pasta, a little vegetable, and a savory meatball together in the broth.
What Gives These Meatballs Their Tender Bite—and the Broth Its Balance

- Ground beef and pork — The beef brings savory richness, while pork keeps the meatballs from tasting lean or dry. The 85% lean beef is a good fit here; extra-lean beef can make the small meatballs noticeably firmer. If you’re out of pork, replacing it with ground beef works, though the meatballs will taste more beef-forward.
- Plain breadcrumbs, egg, and milk — Together, these help the meat mixture hold its shape without turning tough. Plain breadcrumbs keep the seasoning in your control; seasoned crumbs bring extra herbs and salt that can shift the flavor. Measure the crumbs loosely rather than packing them into the cup.
- Parmesan, garlic, and parsley — Parmesan adds a salty, savory note inside the meatballs, while fresh parsley keeps the mixture from tasting heavy. Finely grated Parmesan blends more evenly than coarse shreds. Fresh parsley has a brighter flavor than dried, and the chopped leaves should be small enough to distribute through the meat.
- Low-sodium chicken broth — It gives the soup a savory base without making the finished pot too salty alongside the Parmesan and seasoned meatballs. Low-sodium broth is useful here because it leaves room for those ingredients to contribute their own salt.
- Acini di pepe and baby spinach — The tiny pasta matches the scale of the meatballs, and baby spinach softens quickly without needing a long cook. Keep the spinach leaves intact; they wilt down into the broth and add a tender, leafy contrast to the pasta.
Build the Soup in the Order That Keeps Every Bite Tender
Shape the Meatballs Without Packing Them
Put the ground beef, pork, breadcrumbs, Parmesan, egg, milk, parsley, garlic, salt, and pepper in a large bowl. Mix gently just until everything is combined, then shape the mixture into 3/4-inch meatballs. Don’t squeeze them tightly as you roll; a light touch keeps their texture tender. Set them aside while you start the vegetables.
Soften the Vegetables in Olive Oil
Heat the olive oil in a 6-quart pot over medium heat, then add the chopped onion, diced carrots, and diced celery. Cook for 5 to 7 minutes, stirring occasionally, until the vegetables have softened. They should smell sweet and savory, with the onion turning translucent rather than browning. If you see dark spots forming on the bottom, lower the heat.
Simmer the Meatballs in the Broth
Pour in the chicken broth and bring it to a boil over medium-high heat. Reduce the heat to maintain a gentle simmer before carefully adding the meatballs. Let them simmer for 5 minutes; a hard, rolling boil can knock them around before they’ve had time to set. Keep the pot at a calm simmer as the meatballs cook.
Cook the Pasta, Check the Meatballs, and Wilt the Spinach
Stir in the acini di pepe and simmer uncovered for 8 to 10 minutes, until the pasta is tender. Check that a meatball registers 160°F at the center before moving on. Stir in the baby spinach and cook for 1 to 2 minutes, just until the leaves collapse into the hot soup. Serve the soup hot while the pasta still has a little bite.
Small Changes That Still Fit This Pot of Wedding Soup
Use All Beef for a Bolder Meatball
Replace the ground pork with the same amount of ground beef. The meatballs will taste beefier and a little firmer, but the breadcrumbs, egg, and milk still help them hold together and stay tender.
Make the Meatballs Dairy-Free
Leave out the Parmesan and milk, and use plain breadcrumbs that contain no dairy. The meatballs will lose some of their salty, savory depth and tenderness, but the egg and breadcrumbs will still bind the mixture. The rest of the soup stays the same.
Make the Bowls More Brothy
Use half as much acini di pepe for a soup with more broth between the bites. The meatballs and vegetables stay the focus, while the finished pot feels lighter and less pasta-forward.
Storage and Reheating
- Refrigerator: Store leftovers in a covered container for 3 to 4 days. The acini di pepe will absorb broth and soften as it sits.
- Freezer: Freeze in airtight containers for up to 2 to 3 months. The pasta and spinach soften after freezing, so for the best texture freeze the soup before adding them, then cook them after thawing.
- Reheating: Warm gently on the stovetop over medium-low heat, stirring now and then, until the soup reaches 165°F throughout. Avoid a hard boil, which can break up the meatballs and make the pasta mushy.
Questions That Come Up While This Soup Simmer

Classic Italian Wedding Soup with Mini Meatballs
Ingredients
Equipment
Method
- In a large bowl, gently mix the ground beef, ground pork, breadcrumbs, Parmesan, egg, milk, parsley, garlic, salt, and pepper until just combined.
- Shape the mixture into 3/4-inch meatballs.
- Heat the olive oil in a 6-quart pot over medium heat, add the onion, carrots, and celery, and cook for 5 to 7 minutes, stirring occasionally, until softened.
- Add the chicken broth and bring to a boil over medium-high heat, then reduce the heat to maintain a gentle simmer.
- Carefully add the meatballs and simmer for 5 minutes.
- Stir in the acini di pepe and simmer uncovered for 8 to 10 minutes, until the pasta is tender and a meatball registers 160°F at the center.
- Stir in the spinach and cook for 1 to 2 minutes, until wilted, then serve hot.