Prep Time: 30 minutes
Cook Time: 40 minutes
Total Time: 1 hour 10 minutes
Servings: 18 meatballs
Introduction
There’s something magical about the aroma of homemade meatballs simmering in rich tomato sauce that instantly transforms any house into a home. This recipe has been my family’s Sunday dinner staple for over a decade, passed down from my Italian grandmother who insisted that the secret to perfect meatballs lies in the perfect balance of meat, the right soaking technique, and most importantly, never rushing the process.
What sets these meatballs apart is their incredible tenderness achieved through a milk-soaked bread mixture, combined with a blend of ground beef and pork that creates the ultimate flavor profile. The crowning glory comes from the bubbling mozzarella cheese that melts into golden perfection, creating a restaurant-quality dish that’s surprisingly achievable in your own kitchen.
Why You’ll Love This Recipe
Perfectly Tender Texture
The milk-soaked bread technique creates incredibly soft, juicy meatballs that practically melt in your mouth. This traditional method ensures moisture is locked in while preventing the dense, heavy texture that often plagues homemade meatballs.
Rich, Authentic Flavor
The combination of beef and pork provides depth and richness that single-meat meatballs simply can’t match. Meanwhile, the homemade tomato sauce, infused with fresh herbs and aromatics, elevates the entire dish to restaurant quality.
Show-Stopping Presentation
The bubbling mozzarella cheese creates an irresistible golden crust that makes this dish perfect for entertaining. Additionally, the rustic, homestyle appearance adds warmth and comfort to any dinner table.
Versatile and Satisfying
Whether served over spaghetti, mashed potatoes, or rice, these meatballs adapt beautifully to various accompaniments. Furthermore, the recipe scales easily for meal prep or feeding a crowd.
Ingredients
For the Meatballs:
- 3 slices white bread, crust removed
- ½ cup milk
- 17 oz ground beef or minced beef
- 17 oz ground pork or minced pork
- 1 onion, finely chopped
- 4 cloves garlic, minced
- 2 eggs
- ½ cup fresh grated Parmesan cheese
- 1 teaspoon dried basil
- 1 teaspoon dried oregano
- ¼ cup fresh parsley, finely chopped
- 1 teaspoon beef bouillon powder or vegetable stock powder
- 1 teaspoon salt (to taste)
- Cracked pepper to taste
For the Tomato Sauce:
- 2 tablespoons olive oil, divided
- 1 large onion, finely chopped
- 4 cloves garlic, minced
- 24 oz tomato puree or passata
- ¼ cup water
- 2 tablespoons tomato paste
- 2 teaspoons dried basil
- 2 teaspoons dried oregano
- 1 teaspoon red chili flakes (optional)
- Salt and pepper to taste
- ¼-½ teaspoon sugar (optional)
For the Topping:
- 1½ cups shredded mozzarella cheese
- Fresh basil or parsley, chopped for garnish
Step-by-Step Instructions
Preparation and Setup
Begin by preheating your oven broiler to medium-high heat, or set your main oven to 430°F (220°C). This initial step ensures your oven is ready for the final cheese-melting stage.
Creating the Perfect Meatball Base
In a large bowl, combine the bread slices with milk, pressing the bread down to ensure complete submersion. Allow this mixture to soak while you prepare the remaining ingredients. This soaking process is crucial for achieving the signature tender texture.
Mixing the Meatball Mixture
Once the bread has absorbed the milk completely, add all remaining meatball ingredients to the bowl. Using clean hands or a wooden spoon, mix everything together until just combined. Avoid overmixing, as this can result in tough meatballs.
Shaping the Meatballs
Using approximately three tablespoons of mixture for each meatball, roll the meat into uniform balls. Place them on a plate as you work, ensuring they’re evenly sized for consistent cooking. This should yield about 18 meatballs.
Browning for Flavor
Heat one tablespoon of olive oil in a large, well-seasoned skillet or non-stick pan over medium-high heat. Brown the meatballs on all sides until golden, turning them carefully to maintain their shape. Note that they won’t be fully cooked at this stage – the sauce will finish the cooking process. Transfer the browned meatballs to a warm plate.
Building the Sauce Foundation
In the same pan, heat the remaining tablespoon of olive oil. Add the finely chopped onion and cook until transparent, approximately 2 minutes, stirring occasionally. Next, add the minced garlic and sauté for 1 minute until fragrant.
Creating the Tomato Sauce
Stir in the tomato puree (or passata), water, tomato paste, herbs, chili flakes (if using), salt, and pepper. Mix thoroughly with a wooden spoon and bring to a gentle simmer. Reduce heat to low and taste the sauce, adding sugar if needed to balance the acidity.
Finishing the Meatballs
Return the meatballs to the sauce along with any accumulated juices from the plate. Cover and simmer for 20 minutes, stirring the sauce occasionally and turning the meatballs a couple of times to ensure even cooking.
The Cheese Finale
Sprinkle the mozzarella cheese evenly over the meatballs and sauce. Transfer the skillet to the oven and broil or bake on the middle shelf until the cheese has melted and is bubbling golden brown.
Final Touches
Garnish with freshly chopped parsley and a sprinkle of dried oregano or basil before serving hot over your choice of pasta, mashed potatoes, or rice.

Serving Suggestions
Classic Italian Style
Serve these meatballs over al dente spaghetti or penne pasta with a side of garlic bread and a simple green salad. The combination creates a complete, satisfying meal that’s perfect for family dinners.
Comfort Food Variations
For a heartier approach, serve over creamy mashed potatoes or buttery polenta. The rich sauce soaks beautifully into these starchy bases, creating the ultimate comfort food experience.
Light and Fresh Options
Pair with zucchini noodles or spaghetti squash for a lighter alternative. Additionally, serve alongside roasted vegetables like bell peppers and zucchini for a well-balanced meal.
Recipe Variations
Protein Alternatives
Substitute the ground pork with ground chicken, turkey, or additional beef for different flavor profiles. Each variation brings its own character while maintaining the tender texture.
Herb-Enhanced Version
Add fresh chopped rosemary or thyme to the meatball mixture for an aromatic twist. These herbs complement the traditional Italian flavors beautifully.
Spicy Kick
Increase the red chili flakes or add a diced jalapeño to the sauce for those who enjoy more heat. You can also incorporate some red pepper flakes directly into the meatball mixture.
Cheese Variations
Experiment with different cheeses like provolone, fontina, or a blend of Italian cheeses for unique flavor combinations. Each cheese brings its own melting properties and taste profile.
Make-Ahead Tips
Meal Prep Strategy
These meatballs can be fully prepared and stored in the refrigerator for up to 3 days. Reheat gently on the stovetop, adding a splash of water or broth if the sauce becomes too thick.
Freezer-Friendly Options
Both the uncooked meatballs and the complete dish freeze well for up to 3 months. For uncooked meatballs, freeze them on a baking sheet first, then transfer to freezer bags. Cook from frozen, adding extra time as needed.
Advance Preparation
The meatball mixture can be prepared a day ahead and refrigerated. Similarly, the sauce can be made in advance and reheated when ready to combine with the meatballs.
Notes
Skillet Size: Use a 14-inch (35-cm) skillet for best results. If you don’t have an oven-proof skillet large enough, transfer the sauce and meatballs to a baking dish before adding the cheese and broiling.
Meat Substitutions: Feel free to substitute ground pork with beef, chicken, or turkey based on your preferences. The cooking method remains the same regardless of the protein choice.
Sauce Consistency: If your sauce seems too thick during cooking, add a bit more water. Conversely, if it’s too thin, simmer uncovered to reduce and concentrate the flavors.
Browning Importance: Don’t skip the browning step for the meatballs. This creates a flavorful crust and helps them hold their shape during the simmering process.

Frequently Asked Questions
Q: Can I bake the meatballs instead of pan-frying them? A: Absolutely! Place the formed meatballs on a baking sheet and bake at 400°F (200°C) for 15-20 minutes until browned. Then proceed with the sauce as directed. This method is less hands-on and works well for larger batches.
Q: Why do my meatballs fall apart during cooking? A: This usually happens when the mixture is too wet or hasn’t been mixed enough to bind properly. Ensure your bread is well-soaked but not dripping, and mix the ingredients just until combined. Also, avoid moving the meatballs too frequently while browning.
Q: Can I use store-bought marinara sauce instead of homemade? A: Yes, you can substitute with 3-4 cups of your favorite marinara sauce. However, you may want to enhance it with fresh garlic, herbs, and a pinch of red pepper flakes to boost the flavor.
Q: How do I know when the meatballs are fully cooked? A: The meatballs are done when they reach an internal temperature of 165°F (74°C). They should be firm to the touch and no longer pink in the center. The 20-minute simmering time in the sauce typically ensures they’re thoroughly cooked.
Q: Can I make smaller or larger meatballs? A: Certainly! Adjust the cooking time accordingly. Smaller meatballs (about 2 tablespoons each) will cook faster, while larger ones may need additional time. Just ensure they’re cooked through regardless of size.
Q: What’s the best way to reheat leftover meatballs? A: Reheat gently on the stovetop over low heat, stirring occasionally. Add a splash of water or broth if the sauce has thickened too much. You can also reheat in the microwave, though the stovetop method maintains better texture.
Nutrition Information (per meatball):
- Calories: 239kcal
- Carbohydrates: 9g
- Protein: 14g
- Fat: 16g
- Saturated Fat: 6g
- Cholesterol: 67mg
- Sodium: 354mg
- Potassium: 407mg
- Fiber: 1g