Quick Recipe Version (TL;DR)
Quick Ingredients
- 1 lb ground pork
- 0.5 lb ground beef (or ground turkey)
- 0.5 cup plain dry breadcrumbs
- 0.5 cup finely grated Parmesan cheese, plus extra for serving
- 0.25 cup whole milk
- 1 large egg
- 3 cloves garlic, minced (divided)
- 0.25 cup finely chopped fresh parsley
- 2 tbsp olive oil
- 1 medium yellow onion, diced
- 2 medium carrots, diced
- 2 celery stalks, diced
- 10 cups low-sodium chicken broth
- 1 bay leaf
- 1 cup acini di pepe or other small pasta
- 5 oz escarole or baby spinach, chopped
- 1.5 tsp kosher salt, plus more as needed
- 0.75 tsp freshly ground black pepper, plus more for serving
- 1 lemon, cut into wedges (optional, for serving)
- Pinch red pepper flakes (optional)
Do This
- 1. Heat oven to 425°F (220°C). Line a baking sheet with parchment.
- 2. Mix breadcrumbs and milk, then combine with meats, egg, Parmesan, half the garlic, parsley, salt, and pepper. Roll 1-inch meatballs (about 40–50).
- 3. Bake meatballs 12–15 minutes until browned and just cooked through.
- 4. Meanwhile, sauté onion, carrots, celery, and remaining garlic in olive oil for 5–7 minutes.
- 5. Add broth and bay leaf, bring to a boil, then add pasta. Simmer 7–9 minutes until pasta is almost tender.
- 6. Add baked meatballs and greens; simmer 3–5 minutes until greens are wilted and meatballs are hot.
- 7. Adjust seasoning, serve hot with extra Parmesan, black pepper, lemon wedges, and red pepper flakes.
Why You’ll Love This Recipe
- It is deeply comforting: tender meatballs, tiny pasta, and soft greens in a savory, golden broth.
- The baked meatballs stay juicy yet light, so the soup feels cozy but not heavy.
- Everything cooks in one pot after the meatballs bake, making cleanup simple for a weeknight.
- It is flexible: swap in different greens or pasta shapes, and it reheats beautifully for lunches.
Grocery List
- Produce: Yellow onion, carrots, celery, garlic, fresh parsley, escarole or baby spinach, lemon (optional)
- Dairy: Parmesan cheese (block for grating), whole milk, 1 large egg
- Pantry: Ground pork, ground beef (or turkey), olive oil, plain dry breadcrumbs, low-sodium chicken broth, acini di pepe or other small pasta, bay leaf, kosher salt, black pepper, red pepper flakes (optional)
Full Ingredients
For the Meatballs
- 0.5 cup plain dry breadcrumbs
- 0.5 cup whole milk
- 1 lb ground pork
- 0.5 lb ground beef (or ground turkey for a lighter version)
- 0.5 cup finely grated Parmesan cheese
- 1 large egg
- 2 cloves garlic, minced (about 2 tsp)
- 0.25 cup finely chopped fresh flat-leaf parsley
- 1 tsp kosher salt
- 0.5 tsp freshly ground black pepper
For the Soup
- 2 tbsp olive oil
- 1 medium yellow onion, diced small
- 2 medium carrots, peeled and diced small
- 2 celery stalks, diced small
- 1 clove garlic, minced (about 1 tsp)
- 10 cups low-sodium chicken broth
- 1 bay leaf
- 1 cup acini di pepe (or other tiny pasta such as orzo or pastina)
- 5 oz escarole (about 1 small head, tough stems removed and leaves chopped) or baby spinach
- 0.5 tsp kosher salt, plus more to taste
- 0.25 tsp freshly ground black pepper, plus more to taste
- Pinch red pepper flakes (optional, for a hint of heat)
To Serve
- 0.25–0.5 cup finely grated Parmesan cheese
- Freshly ground black pepper
- Lemon wedges (from 1 lemon, optional but highly recommended)

Step-by-Step Instructions
Step 1: Prep and Heat the Oven
Adjust the oven rack to the middle position and preheat your oven to 425°F (220°C). Line a large rimmed baking sheet with parchment paper or lightly oil it to prevent sticking. This lets you bake the meatballs quickly while you start the soup base.
Gather all ingredients, chop the onion, carrots, celery, garlic, and parsley, and have the broth measured out. Prepping everything before you start cooking makes the whole recipe flow smoothly.
Step 2: Make the Meatball Mixture
In a medium bowl, stir together the 0.5 cup breadcrumbs and 0.5 cup milk. Let this sit for about 3–5 minutes until the breadcrumbs absorb the milk and form a soft paste. This “panade” keeps the meatballs tender.
In a large mixing bowl, combine the soaked breadcrumbs, 1 lb ground pork, 0.5 lb ground beef (or turkey), 0.5 cup grated Parmesan, 1 egg, 2 cloves minced garlic, 0.25 cup chopped parsley, 1 tsp kosher salt, and 0.5 tsp black pepper. Using clean hands or a fork, mix just until everything is evenly combined. Avoid overworking the meat so the meatballs stay light.
Step 3: Shape and Bake the Meatballs
With damp hands or using a small cookie scoop, roll the meat mixture into small balls about 1 inch in diameter (roughly 2 teaspoons of mixture each). You should get around 40–50 mini meatballs. Place them in a single layer on the prepared baking sheet, leaving a little space between each one.
Transfer the meatballs to the preheated oven and bake for 12–15 minutes, until lightly browned and just cooked through (an instant-read thermometer should read at least 165°F / 74°C in the center). They will finish softening and absorbing flavor later in the soup. While the meatballs bake, start the soup base.
Step 4: Build the Flavorful Soup Base
In a large heavy pot or Dutch oven, heat 2 tbsp olive oil over medium heat. Add the diced onion, carrots, and celery with 0.5 tsp kosher salt. Cook, stirring occasionally, for 5–7 minutes until the vegetables are softened and starting to turn golden at the edges.
Add the remaining 1 clove minced garlic and a pinch of red pepper flakes if using. Cook for 30–60 seconds, just until fragrant; do not let the garlic burn.
Pour in the 10 cups chicken broth, add the bay leaf, and increase the heat to bring the soup to a gentle boil. Once boiling, reduce the heat to maintain a lively simmer.
Step 5: Cook the Pasta in the Broth
Stir in the 1 cup acini di pepe (or other small pasta). Simmer, stirring occasionally so the pasta does not stick to the bottom, for 7–9 minutes until the pasta is just shy of al dente. It will continue to soften as it sits in the hot broth, so do not overcook it at this point.
Taste the broth and add a little extra salt or pepper if needed, keeping in mind that the meatballs and Parmesan at the end will add more seasoning.
Step 6: Add Meatballs and Wilt the Greens
Once the pasta is almost tender, gently add the baked meatballs and any juices from the baking sheet into the pot. Stir carefully so you do not break them. Add the chopped 5 oz escarole or baby spinach.
Simmer for another 3–5 minutes, until the greens are tender and wilted and the meatballs are heated through. The soup should be steaming hot and fragrant, with tiny pasta, meatballs, and green flecks suspended in the golden broth.
Step 7: Taste, Finish, and Serve
Remove and discard the bay leaf. Taste the broth again and adjust with more salt and black pepper as needed. If you like a brighter flavor, squeeze in a small wedge of lemon or simply serve lemon wedges on the side so each person can add their own.
Ladle the soup into warm bowls, making sure each bowl gets plenty of meatballs, pasta, and greens. Top each serving with a generous spoonful of freshly grated Parmesan and a few grinds of black pepper. Sprinkle a pinch of red pepper flakes over the top for gentle heat, if desired. Serve hot with crusty bread for dipping.
Pro Tips
- Keep meatballs tender: The milk-soaked breadcrumbs are key. Do not skip this step or cut the milk short; it makes the meatballs fluffy instead of dense.
- Size matters: Keep meatballs around 1 inch. Larger meatballs feel heavy in a delicate soup; smaller ones give you a perfect bite with pasta and greens in every spoonful.
- Do not overcook the pasta: Stop when it is just under al dente, especially if you plan to store leftovers. Tiny pasta swells quite a bit in broth.
- Season in layers: Salt the vegetables, taste the broth after adding pasta, and adjust again at the end. This builds depth without making the soup too salty.
- Use good broth: Since the broth is the backbone of this soup, choose a flavorful low-sodium chicken broth or a rich homemade stock if you have it.
Variations
- Lighter turkey version: Use all ground turkey (preferably a mix of dark and light meat) in place of pork and beef. Add an extra 1 tbsp olive oil to the meatball mixture so it stays moist.
- Different greens: Swap escarole for chopped kale, Swiss chard, or a mix of baby spinach and arugula. Sturdier greens like kale will need an extra 3–5 minutes of simmering.
- Extra hearty: Stir in 0.5 cup cooked white beans and an extra 0.5 cup broth, and finish with a drizzle of good olive oil over each bowl for a more filling meal.
Storage & Make-Ahead
For best texture, cool leftovers to room temperature, then refrigerate in airtight containers for up to 4 days. The pasta will continue to absorb broth as it sits, so when reheating, add a splash of extra chicken broth or water to loosen the soup. Reheat gently on the stovetop over medium-low heat or in the microwave until steaming.
You can also make the meatballs ahead: bake, cool, and refrigerate them in an airtight container for up to 3 days, or freeze for up to 2 months. Add refrigerated meatballs directly to the hot soup; for frozen meatballs, thaw overnight in the fridge or simmer an extra few minutes in the soup until heated through.
Nutrition (per serving)
Approximate values per serving (1 of 6): about 430–480 calories, 26–30 g protein, 22–26 g fat, 25–30 g carbohydrates, 2–3 g fiber, and 900–1100 mg sodium (will vary with broth brand, added salt, and exact Parmesan amount). For a lighter version, use ground turkey in place of pork and beef and reduce the Parmesan garnish.

Leave a Reply