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
Ingredients
Meatballs
- 250 grams ground beef preferably grass-fed
- 250 grams ground pork organic if available
- 1 cup fresh breadcrumbs softened in milk
- ¼ cup Parmesan cheese freshly grated
- 1 clove garlic minced
- 1 teaspoon salt
- ½ teaspoon ground black pepper freshly ground
- 1 large egg free range
The Soup
- 2 tablespoons olive oil extra virgin
- 1 cup carrots diced
- 1 cup celery diced
- 1 cup onion finely chopped
- 8 cups chicken broth low-sodium preferred
- 1 cup small pasta like acini di pepe, uncooked
- 2 cups baby spinach fresh, packed
- 1 pinch salt to taste
- 1 pinch ground black pepper to taste
Instructions
- Form the Meatballs: In a large bowl, combine ground beef, ground pork, softened breadcrumbs, Parmesan cheese, minced garlic, salt, pepper, and the egg. Mix gently until ingredients are just combined. Roll the mixture into small, bite-sized meatballs and set aside.
- Sauté the Vegetables: 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.
- Simmer the Broth: 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.
- Add Meatballs and Pasta: Gently add the meatballs one by one into the simmering broth. Cook for 10 minutes before adding the pasta. Allow the soup to continue simmering until the pasta is al dente and meatballs are fully cooked, about 10-15 minutes more.
- Wilt the Spinach: Stir the fresh spinach into the soup during the last 2 minutes of cooking. Taste and adjust seasoning with salt and pepper.
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



















































