This meatball soup recipe is the ultimate one-pot comfort meal, transforming simple pantry staples into a rich, flavorful dinner your family will crave. Tender, Italian-seasoned meatballs simmer directly in a savory tomato and beef broth with tiny pasta, allowing all the flavors to meld together beautifully. It tastes like it simmered all day but comes together in about an hour, making it perfect for busy weeknights when you want something warm, filling, and satisfying without a sink full of dishes.
Large Dutch oven or stockpot 6-8 quart capacity for even heat distribution
Cookie scoop or meatball scoop 1-inch size for evenly sized meatballs
Large mixing bowl
Cutting board
Sharp knife
Wooden spoon
Ladle For serving
Ingredients
1poundground beef454g, 80/20 blend recommended
½poundground pork227g
2large eggs
½cupItalian-style breadcrumbsabout 60g
⅓cupgrated Parmesan cheeseabout 30g, plus more for serving
2clovesgarlicminced, for meatballs
2tablespoonsfresh parsleychopped
¾teaspoonsaltfor meatballs
½teaspoonblack pepperfor meatballs
For the Soup
2tablespoonsextra virgin olive oil
1medium yellow onionabout 1 cup or 150g, chopped
2large carrotsabout 1 cup or 130g, peeled and chopped
2stalksceleryabout 1 cup or 100g, chopped
3clovesgarlicminced, for soup
1can (28 ounces)crushed San Marzano tomatoes796g, or whole peeled crushed by hand
8cupsbeef broth1.9 liters
1teaspoondried Italian seasoning
1bay leaf
¾cupditalini pastaor orzo, about 150g
2cupsbaby spinachroughly chopped, about 75g
salt and black pepperto taste, for the broth
For Serving (Optional)
fresh basil or parsleyfor garnish
extra grated Parmesan cheesefor topping
Instructions
In a large mixing bowl, combine ground beef, ground pork, eggs, breadcrumbs, Parmesan, garlic, parsley, salt, and pepper. Mix gently with clean hands until just combined, being careful not to overmix.
Use a cookie scoop to portion the mixture into 1-inch balls. Roll gently between your palms and place on a plate; you should have about 30-34 meatballs.
Heat olive oil in a large Dutch oven over medium heat. Add onion, carrots, and celery and cook for 5-6 minutes until softened. Add garlic and cook for 30 seconds until fragrant.
Pour in crushed tomatoes and beef broth. Add Italian seasoning and bay leaf. Stir, increase heat to bring to a boil, then reduce to a gentle simmer.
Carefully lower raw meatballs into the simmering broth one at a time. Gently guide them with a spoon and avoid stirring vigorously. Simmer uncovered for 15 minutes until cooked through.
Stir in ditalini pasta and simmer for 8-10 minutes, stirring occasionally, until pasta is tender. Check a meatball and a piece of pasta for doneness.
Stir in chopped spinach and let it wilt for 1-2 minutes. Remove and discard the bay leaf. Taste and adjust salt and pepper as needed.
Ladle hot soup into bowls. Top with extra Parmesan and a sprinkle of fresh basil or parsley. Serve immediately with crusty bread on the side.
Notes
Keep meatballs uniform: Use a cookie scoop to ensure even sizing so they all cook at the same rate and remain tender.
Avoid over-stirring: After adding the meatballs to the broth, stir gently and avoid vigorous stirring for the first several minutes to prevent them from breaking apart.
Pasta absorbing liquid: Add the pasta just before serving, as it will continue to absorb broth and thicken the soup over time. Add extra broth when reheating if needed.
Make it ahead: Prepare the broth and meatballs a day or two in advance and store separately. Add freshly cooked pasta when reheating for the best texture.
Freezing tips: Freeze the soup without the pasta for up to 3 months. When ready to serve, thaw, reheat, and add freshly cooked pasta.
Lighter version: Substitute ground beef and pork with ground turkey or chicken for a leaner option without sacrificing flavor.
Vegetable variations: Swap spinach for kale, escarole, or Swiss chard. Add a pinch of red pepper flakes for a spicy kick.
Pasta options: Orzo, acini de pepe, or small shells work well. For gluten-free, use gluten-free pasta and gluten-free breadcrumbs.
Broth flavor: For an even richer broth, use a combination of beef and chicken broth, or add a Parmesan rind while simmering.
Storage: Refrigerate leftovers in an airtight container for up to 4 days. Reheat gently on the stovetop over medium-low heat, adding a splash of broth if needed.