
Italian Meatballs with Ricotta Topping

By Emma
Certified Culinary Professional
Soak bread in milk first—that’s the whole thing right there. Most people skip it and end up with dense little rocks that don’t know what they’re doing. The milk keeps them tender all the way through, even after 50 minutes in the oven.
Why You’ll Love This Italian Meatballs Recipe
Actual beef and pork blend. The combo works because pork keeps everything moist while beef gives you substance. Takes 70 minutes total but most of that’s oven time and resting—you’re not standing there the whole time.
Works as a main with bread, works spooned over pasta, works cold the next day if you’re into that. Ricotta on top instead of melted cheese means you get something light and fluffy instead of heavy. Homemade italian meatballs taste nothing like frozen ones. Not exaggerating.
The soaked bread thing. Once you do it this way, you’ll never understand how you made them before. Fresh herbs actually matter here because there’s not much else going on—if you use dried, everything tastes dusty.
What You Need for Homemade Italian Meatballs
Rustic country bread. Three slices, crust off, cubed, then soaked in 3/4 cup whole milk for about 10 minutes. Not until it disintegrates. Just until soft. Squeeze the excess milk out gently but keep the bread moist—you need that moisture to bind everything together.
Beef and pork blend. One pound total. A mix matters. Ground beef alone and the meatballs tighten up. Pork by itself and they fall apart. Together they’re forgiving. Can swap in veal for the pork if you want something lighter but honestly the beef-pork thing is the move.
Onion and garlic. Half a cup onion finely chopped, three garlic cloves minced. Cook them in olive oil first—one tablespoon—until the onion goes translucent and smells sweet, maybe 3-4 minutes. Let it cool before adding to the meat or the eggs will scramble.
Two large eggs whisked with half a cup grated Parmigiano Reggiano. The eggs bind everything. The cheese adds salt and umami so you don’t need as much seasoning later. A third of a cup dry breadcrumbs mixed in too—not the soaked bread, the dry stuff. Different texture, different job.
Fresh flat-leaf parsley and fresh basil. A quarter cup each chopped. This is what makes them actually taste italian instead of just tasting like meat. Dried herbs don’t cut it.
Kosher salt. One teaspoon for the onion mixture, then more for tasting at the end. Coarser than table salt so it doesn’t disappear into everything.
Marinara sauce for baking. Two cups. Homemade is better but good jarred works. You pour it over after the initial bake and let everything simmer together.
One cup whole milk ricotta for serving. Not the ricotta that’s been sitting in your fridge. Fresh ricotta if you can get it. Whip it before serving so it’s fluffy.
How to Make Large Meatballs with Soaked Bread and Garlic
Cube the bread first. Three slices, crust removed. Soak it in 3/4 cup whole milk for about 10 minutes until soft. Squeeze out the excess milk gently—you want the bread damp, not dripping. Set it aside.
Heat a tablespoon of olive oil in a skillet over medium heat. Add the onion and garlic. Stir in a teaspoon of kosher salt and half a teaspoon of black pepper. Cook until the onion turns translucent and smells sweet, about 3-4 minutes. Pull it off the heat immediately so it doesn’t turn bitter. Let it cool for a minute.
In a large bowl, whisk two eggs lightly. Add half a cup of grated Parmigiano Reggiano and a third of a cup of dry breadcrumbs. Stir in a quarter cup of chopped fresh parsley and a quarter cup of chopped fresh basil. The mixture thickens into a sticky paste. Add the soaked bread and the cooled onion mixture. Fold it together gently until everything is incorporated.
Now add the pound of ground beef and pork blend. Break it apart as you add it so there are no big clumps sitting there. Use your hands and fold gently but completely. Don’t squeeze it or knead it like dough—overworking toughens the protein and makes them dense. The mixture should come together into one ball when you press it, but it should still feel a bit loose and loose.
Divide the mixture into three equal portions. Roll each portion between your hands into a large meatball. Press gently to compact it. It should feel firm but springy when you squeeze it. If it feels too wet and won’t hold shape, dust it lightly with a few breadcrumbs but don’t go overboard or they’ll dry out during cooking.
Put the meatballs on a plate and cover with plastic wrap. Refrigerate for at least one hour, or overnight if you have time. The rest lets the flavors meld together and firms up the meat so it doesn’t crumble when it cooks.
How to Get Baked Meatballs with Tomato Sauce Perfectly Cooked
Preheat the oven to 350F. Pull the meatballs out of the fridge and toss them gently on the plate if the surface cracked at all. Arrange them in a cast iron or ovenproof dish about two inches apart so heat circulates around each one.
Bake for about 30 minutes. You’re looking for browned edges. The meat starts firming up but shouldn’t be dry yet. It’ll still feel slightly soft in the center and that’s the point—there’s still cooking to come.
After 30 minutes, pull the dish out. Skim off excess fat or oil from the surface with a spoon. Spoon marinara sauce over the meatballs liberally until they’re mostly covered. Return to the oven and let it simmer gently with the sauce for another 30 minutes or until the internal temperature hits 140F. The sauce thickens slightly on the edges and the aroma gets rich and tomato-herby.
Pull from the oven. Let it rest uncovered for 10 minutes. Resting lets the juices redistribute through the meat so when you cut into a meatball it doesn’t fall apart or run all over the plate.
While the meatballs rest, whip the ricotta. Put a cup of whole milk ricotta in a bowl or stand mixer with the whisk attachment. Beat on low until it’s fluffy and smooth with air incorporated. It goes from dense to light and gives you that creamy contrast when you spoon it on top.
Italian Meatballs Tips and Common Mistakes
If your meatballs fall apart during cooking, the bread probably wasn’t soaked enough or the meat was too wet to begin with. Next time squeeze the milk out more thoroughly. If the sauce is too thin by the end, simmer it uncovered for a few minutes after you pull the meatballs out. It’ll reduce and get thicker.
Don’t overwork the meat. Fold gently. Squeeze gently when forming. The moment you start being aggressive with it, the proteins tighten up and you get meatballs that taste like a hockey puck.
Refrigerate for at least one hour before baking. Don’t skip this. The rest is what keeps them from falling apart in the oven. Overnight is even better.
Ground veal for the pork is a swap if you want a lighter flavor. Sometimes I add a pinch of fennel pollen or red pepper flakes. Subtle but changes the whole thing. Fennel pollen especially—just a pinch, like a quarter teaspoon. It’s not obvious but your mouth knows something’s different.
Serve them with crusty bread to soak up the sauce. Or spoon them over pasta. Or just eat them as is with the ricotta on top. They work every way.

Italian Meatballs with Ricotta Topping
- 3 slices rustic country bread, crust removed, cubed
- 3/4 cup whole milk
- 1 tbsp olive oil
- 1/2 cup finely chopped onion
- 3 cloves garlic, minced
- 1 tsp kosher salt
- 1/2 tsp black pepper
- 2 large eggs
- 1/2 cup grated Parmigiano Reggiano
- 1/3 cup dry breadcrumbs
- 1/4 cup chopped fresh flat-leaf parsley
- 1/4 cup chopped fresh basil
- 1 lb ground beef and pork blend (or swap ground veal for pork)
- Salt and pepper to taste
- 2 cups marinara sauce (homemade or good quality jarred)
- 1 cup whole milk ricotta
- Extra parsley or basil for garnish
- 1 Cube bread, soak in milk about 10 minutes until soft. Then squeeze out excess milk well but keep the soaked bread; need moisture, not soggy mush.
- 2 Heat olive oil in skillet over medium. Toss onions and garlic in gently. Stir salt and pepper in, cook until onions turn translucent and smell sweet, about 3-4 minutes. Remove from heat immediately to avoid bitterness. Let cool slightly.
- 3 In large bowl, whisk eggs lightly with Parmigiano, dry crumbs, parsley, basil. Add bread and cooled onion mixture. It thickens to a sticky paste.
- 4 Add ground meat mixture, break it apart as you add so no clumps. Use your hands, fold gently but completely. Overworking toughens protein. Form large ball. Divide into three equal portions.
- 5 Shape each portion into a big meatball by rolling between hands, press gently to compact. Should be firm but springy. If too wet, dust lightly with crumbs but avoid drying.
- 6 Place meatballs on plate, cover with plastic wrap. Refrigerate minimum 1 hour, can do overnight. Rest lets flavors meld, meat firms, prevents crumbling during cooking.
- 7 Oven to 350F. Remove meatballs, toss gently if surface cracked. Arrange in cast iron or ovenproof dish, 2 inches apart so heat circulates. Bake about 30 minutes. Look for browned edges; meat starts firming up but not dry.
- 8 After bake, skim excess fat/oil with spoon. Spoon marinara sauce over meatballs liberally. Return to oven simmering gently with sauce for another 30 minutes or until internal temp hits 140F. Sauce thickens slightly on edges, aroma is rich tomato-herb.
- 9 Pull from oven, let rest 10 minutes uncovered. Resting lets juices redistribute, meatballs hold shape when cut.
- 10 While meat rests, whip ricotta in bowl or stand mixer on low with whisk attachment until it’s fluffy and smooth, air incorporated. Gives creaminess and light texture contrast.
- 11 Serve meatballs topped with big dollops of chilled whipped ricotta. Sprinkle fresh parsley or basil on top for snap and color. Great as main with crusty bread or spooned over pasta.
- 12 Pro tip: If meatballs fall apart, likely bread not squeezed enough or meat too wet. If sauce too thin, simmer longer uncovered before returning meatballs in. Work quickly once eggs added to avoid tough texture.
- 13 Try swapping pork for ground veal to lighten flavor. Sometimes I add a pinch of fennel pollen or red pepper flakes for a subtle heat and aroma kick.
Frequently Asked Questions About Beef and Pork Meatballs
Can I freeze these? Yeah. Cool them completely, then freeze on a baking sheet before transferring to a bag. Thaw in the fridge overnight before reheating. Works fine.
What if I don’t have fresh herbs? Don’t use dried. Seriously. Just skip the basil and use a bit more parsley or nothing at all. Dried herbs taste stale in this and you’ll know it.
How long do they keep in the fridge? Three days covered. After that the sauce starts getting weird. Four days maximum if you really stretch it.
Can I use all beef or all pork instead? All beef makes them tough and dense. All pork and they’re kind of mushy. The mix is worth it. Veal and pork works too if you’re going that direction.
Do I have to use cast iron for baking? No. Any ovenproof dish works. Cast iron just holds heat really evenly so the edges brown nice. Regular ceramic or metal baking dish is fine.
What’s the difference between this and ground beef and pork meatballs with breadcrumbs and Parmigiano? The soaked bread. That’s it. That’s what makes homemade italian meatballs actually tender instead of just edible. The soaked bread holds moisture so even after 50 minutes in the oven they’re not rubbery. Breadcrumbs alone don’t do that. The fresh herbs matter too but the bread is the thing.



















