Quick Recipe Version (TL;DR)
Quick Ingredients
- 1 lb (450 g) ground beef (80–85% lean)
- 1/2 lb (225 g) ground pork
- 1/2 cup fine dry breadcrumbs
- 1/4 cup grated Parmesan cheese
- 1/4 cup whole milk + 1 large egg
- 1 small onion, divided (half minced, half diced)
- 5 cloves garlic, minced (divided)
- 2 tbsp chopped fresh parsley, plus more for garnish
- 3 tbsp olive oil (divided, for browning and sautéing)
- 2 medium carrots + 2 ribs celery, chopped
- 1.5 lb (680 g) Yukon Gold or red potatoes, in 1-inch chunks
- 2 tbsp tomato paste
- 1 can (28 oz / 800 g) crushed tomatoes
- 4 cups (960 ml) low-sodium beef broth + 1 cup (240 ml) water
- Bay leaf, dried thyme, dried rosemary, smoked paprika
- Kosher salt, black pepper, optional red pepper flakes & Worcestershire sauce
Do This
- 1. Mix beef, pork, breadcrumbs, Parmesan, milk, egg, minced onion, garlic, parsley, salt, and pepper until just combined; chill 10 minutes.
- 2. Shape into 1–1.25 inch meatballs (about 24–28); brown in 2 tbsp olive oil over medium-high heat until well browned but not fully cooked. Set aside.
- 3. In the same pot, sauté diced onion, carrots, and celery in 1 tbsp olive oil until softened. Add garlic and tomato paste; cook 1–2 minutes.
- 4. Stir in crushed tomatoes, broth, water, potatoes, bay leaf, thyme, rosemary, smoked paprika, Worcestershire, salt, and pepper. Bring to a boil, then reduce to a gentle simmer (about 190°F / 90°C).
- 5. Simmer partially covered for 20–25 minutes, until potatoes are just starting to turn tender.
- 6. Return browned meatballs (plus juices) to the pot; simmer gently 15–20 minutes, until meatballs reach 165°F / 74°C and potatoes are fully tender.
- 7. Adjust seasoning, remove bay leaf, stir in fresh parsley, and let rest 5 minutes. Serve hot with crusty bread.
Why You’ll Love This Recipe
- It is a full, comforting meal in one pot: juicy meatballs, tender potatoes, and a rich tomato-herb broth.
- Uses everyday, affordable ingredients that are easy to find in any supermarket.
- Family-style and cozy: perfect for winter evenings, casual gatherings, or make-ahead meal prep.
- Flexible and forgiving: simple to adapt with different meats, extra vegetables, or a slow-cooker method.
Grocery List
- Produce: 2 small onions, 5 cloves garlic, 2 medium carrots, 2 ribs celery, 1.5 lb (680 g) potatoes (Yukon Gold or red), fresh parsley
- Dairy: Whole milk, Parmesan cheese, 1 large egg
- Pantry: Olive oil, fine dry breadcrumbs, canned crushed tomatoes (28 oz / 800 g), tomato paste, beef broth (low-sodium), bay leaf, dried thyme, dried rosemary, smoked paprika, kosher salt, black pepper, red pepper flakes (optional), Worcestershire sauce (optional)
- Meat: 1 lb (450 g) ground beef, 1/2 lb (225 g) ground pork
Full Ingredients
For the Meatballs
- 1 lb (450 g) ground beef, 80–85% lean
- 1/2 lb (225 g) ground pork
- 1/2 cup (30 g) fine dry breadcrumbs
- 1/4 cup (25 g) finely grated Parmesan cheese
- 1/4 cup (60 ml) whole milk
- 1 large egg
- 1/2 small onion, very finely minced (about 1/4 cup)
- 2 cloves garlic, minced
- 2 tbsp finely chopped fresh parsley
- 1 tsp kosher salt
- 1/2 tsp freshly ground black pepper
- 1/2 tsp dried oregano
- 1/4 tsp red pepper flakes (optional, for gentle heat)
For Browning the Meatballs
- 2 tbsp olive oil (plus more as needed)
For the Stew
- 1 tbsp olive oil (only if the pot looks dry after browning)
- 1 small onion, diced
- 2 medium carrots, peeled and cut into 1/2-inch slices
- 2 ribs celery, cut into 1/2-inch slices
- 3 cloves garlic, minced
- 2 tbsp tomato paste
- 1.5 lb (680 g) Yukon Gold or red potatoes, peeled if desired, cut into 1-inch chunks
- 1 can (28 oz / 800 g) crushed tomatoes
- 4 cups (960 ml) low-sodium beef broth
- 1 cup (240 ml) water
- 1 bay leaf
- 1 tsp dried thyme (or 2 tsp fresh thyme leaves)
- 1 tsp dried rosemary, lightly crushed (or 2 tsp fresh rosemary, minced)
- 1 tsp smoked paprika (optional, for a subtle smoky depth)
- 1 tbsp Worcestershire sauce (optional, for savoriness)
- 1.5 tsp kosher salt, plus more to taste
- 1/2 tsp freshly ground black pepper, plus more to taste
For Finishing and Serving
- 2 tbsp chopped fresh parsley (for stirring in and garnish)
- Crusty bread, for serving (optional but highly recommended)

Step-by-Step Instructions
Step 1: Prep the Ingredients and Meatball Mixture
Peel and finely mince half of one small onion for the meatballs (you should have about 1/4 cup). Dice the remaining onion for the stew and set it aside. Mince all of the garlic, keeping 2 cloves for the meatballs and 3 cloves for the stew. Chop the carrots, celery, potatoes, and parsley so everything is ready to go.
In a large mixing bowl, combine the ground beef, ground pork, breadcrumbs, Parmesan, milk, egg, minced onion (for the meatballs), 2 cloves of minced garlic, parsley, salt, pepper, dried oregano, and red pepper flakes (if using). Use a fork or your hands to gently mix until everything is evenly distributed, but do not overwork the meat or the meatballs can turn dense.
Cover the bowl and refrigerate the mixture for about 10 minutes. This short chill helps the breadcrumbs hydrate and makes the mixture easier to shape.
Step 2: Shape the Meatballs
Remove the meat mixture from the refrigerator. With clean, slightly damp hands, roll the mixture into meatballs about 1–1.25 inches in diameter, roughly 2 tablespoons each. Try to keep them all about the same size so they cook evenly. You should end up with approximately 24–28 meatballs.
Place the formed meatballs on a plate or tray in a single layer. If you like, you can cover and chill them for another 10–15 minutes while you heat the pot; this helps them hold their shape during browning.
Step 3: Brown the Meatballs
Heat a large, heavy-bottomed pot or Dutch oven over medium-high heat. Add 2 tablespoons of olive oil. When the oil is shimmering, add about half of the meatballs in a single layer, leaving space between them. Brown the meatballs on all sides, turning every 1–2 minutes, for a total of 6–8 minutes. They should be well browned but not fully cooked through at this stage.
Transfer the browned meatballs to a clean plate, leaving any browned bits and most of the fat in the pot. Repeat with the remaining meatballs, adding a splash more oil if needed. Once all meatballs are browned and removed, pour off excess fat if there is a lot, but leave about 1–2 tablespoons in the pot for flavor. If the pot looks dry, add 1 tablespoon of olive oil before moving to the next step.
Step 4: Sauté the Vegetables and Build the Flavor Base
Reduce the heat to medium. Add the diced onion, sliced carrots, and sliced celery to the pot. Cook, stirring occasionally, until the vegetables begin to soften and the onions turn translucent, about 5–7 minutes. Scrape up any browned bits from the bottom of the pot as the vegetables release moisture.
Add the remaining 3 cloves of minced garlic and cook for 30 seconds to 1 minute, just until fragrant. Stir in the tomato paste and cook it for 1–2 minutes, stirring constantly, until it darkens slightly in color and coats the vegetables. This step helps concentrate the tomato flavor and adds depth to the stew.
Step 5: Add Liquids, Potatoes, and Herbs
Stir in the crushed tomatoes, beef broth, and water, mixing well to combine with the vegetable mixture. Add the potato chunks, bay leaf, dried thyme, dried rosemary, smoked paprika (if using), Worcestershire sauce (if using), 1.5 teaspoons of kosher salt, and 1/2 teaspoon black pepper. Stir gently to distribute the potatoes and seasonings evenly.
Increase the heat to medium-high and bring the mixture just up to a boil. As soon as it starts to boil, reduce the heat to low or medium-low to maintain a gentle simmer at about 190°F / 90°C if you are using a thermometer. You should see small, steady bubbles around the edges, not a vigorous boil. Cover the pot with the lid slightly ajar and simmer for 20–25 minutes, stirring occasionally, until the potatoes are starting to turn tender but are not fully cooked through.
Step 6: Simmer with Meatballs Until Tender
Gently return the browned meatballs and any juices that have collected on the plate to the pot, nestling them down into the tomato-herb broth and between the potatoes. Stir carefully so you do not break up the meatballs or potatoes.
Continue to simmer, lid slightly ajar, for another 15–20 minutes, keeping the heat low so the stew bubbles gently. The stew is done when the meatballs are cooked through to an internal temperature of 165°F / 74°C and the potatoes are fully tender and creamy inside when pierced with the tip of a knife.
If the stew looks too thin for your liking, remove the lid and simmer for an additional 5–10 minutes to reduce and thicken slightly. If it looks too thick, add a splash of water or broth to loosen it.
Step 7: Finish, Adjust Seasoning, and Serve
Fish out and discard the bay leaf. Taste the broth and adjust seasoning with additional salt and pepper as needed. Stir in 2 tablespoons of chopped fresh parsley for a fresh, herbal finish.
Turn off the heat and let the stew rest for 5 minutes to settle and cool very slightly. Ladle the meatballs, potatoes, and plenty of tomato-herb broth into warm bowls. Garnish with a little extra parsley if you like. Serve hot with slices of crusty bread for soaking up the broth, or over a small scoop of mashed potatoes for an extra-hearty winter meal.
Pro Tips
- Do not overmix the meatball mixture. Stop as soon as everything is evenly combined; overworking the meat leads to tough meatballs.
- Chill the meatballs briefly before browning. Even 10–15 minutes in the fridge helps them hold their shape and brown more nicely.
- Keep the simmer gentle. A hard boil can break up meatballs and make potatoes mealy. Aim for small, lazy bubbles at the surface.
- Season in layers. Salt the meatballs, season the vegetable base, and taste again at the end so the stew is well seasoned but not salty.
- Let it rest before serving. A short 5–10 minute rest off the heat allows flavors to meld and the broth to thicken slightly.
Variations
- Lighter poultry version: Use 1 lb (450 g) ground turkey and 1/2 lb (225 g) ground chicken instead of beef and pork. Add 1 extra tablespoon of olive oil to the meat mixture and reduce the simmering time with the meatballs to 10–15 minutes (they cook faster and can dry out if overcooked).
- Spicy Italian-style stew: Use hot Italian sausage (removed from casings) for half of the meat, increase red pepper flakes to 1/2 teaspoon, and add 1 teaspoon of fennel seeds with the dried herbs. Finish with a sprinkle of extra Parmesan on each bowl.
- Slow cooker adaptation: Brown the meatballs and sauté the vegetables and tomato paste as directed. Transfer everything (including liquids, potatoes, and herbs) to a slow cooker. Cook on LOW for 6–7 hours or on HIGH for 3–4 hours, adding the meatballs for the final 2 hours on LOW or final 1 hour on HIGH.
Storage & Make-Ahead
Let the stew cool to room temperature, then transfer to airtight containers. Refrigerate for up to 4 days. The flavors actually deepen and improve by the next day, making this an excellent make-ahead dish for busy weeks or entertaining.
For longer storage, freeze in freezer-safe containers for up to 3 months. Thaw overnight in the refrigerator before reheating. Reheat gently on the stovetop over low to medium-low heat, adding a splash of water or broth if the stew has thickened too much. Stir occasionally until heated through and the meatballs are hot in the center.
If you prefer, you can also prepare and brown the meatballs up to 24 hours in advance and refrigerate them. When ready to cook, build the stew base and add the pre-browned meatballs as directed, increasing the final simmer by about 5 minutes if they are still chilled.
Nutrition (per serving)
Approximate values per serving (1/6 of the recipe): 560 calories; 32 g protein; 30 g fat; 40 g carbohydrates; 5 g fiber; 8 g sugars; 1200 mg sodium. These numbers are estimates and will vary based on the exact products used (especially broth, canned tomatoes, and added salt).

Leave a Reply