These tender, seasoned meatballs are browned to perfection then gently simmered in a luscious tomato basil cream sauce. The combination of crushed tomatoes, heavy cream, fresh basil, and Parmesan creates a rich, velvety coating that clings to every bite.
Ready in about 50 minutes with just 20 minutes of prep, this Italian-American comfort dish serves four and pairs beautifully with pasta, rice, or crusty bread for soaking up every drop of sauce.
The smell of garlic hitting olive oil on a Sunday evening is enough to make anyone forget the whole week. I stumbled onto this combination during a rainstorm that trapped me indoors with nothing but a pound of ground beef and a lonely can of crushed tomatoes. What came out of that skillet made me close my eyes and genuinely wonder why I ever bothered ordering takeout. It has been on my stove nearly every other week since.
My neighbor Dave once knocked on my door asking if everything was okay because he had not seen me all day. I handed him a plate of these meatballs over spaghetti and he stood in the hallway eating the whole thing without a word. He now texts me every Friday asking if I am making them again.
Ingredients
- Ground beef or beef and pork mix (500 g): A mix of beef and pork gives you a more tender meatball, but straight beef works beautifully if that is what you have on hand.
- Breadcrumbs (1/2 cup): These hold everything together and keep the inside soft. Panko works if you want a lighter texture.
- Grated Parmesan cheese (1/4 cup in meatballs plus 1/4 cup in sauce): The cheese in the meatballs adds savory depth, and the cheese in the sauce melts into something almost magical.
- Egg (1 large): Your binder. Without it the meatballs will crumble in the sauce, which is still delicious but definitely not a meatball anymore.
- Garlic (5 cloves total, minced): Two go into the meatballs and three into the sauce. Use fresh cloves, not the jarred stuff, because the flavor difference here is real.
- Milk (1/4 cup): This soaks into the breadcrumbs and keeps the meatballs incredibly moist inside.
- Salt and black pepper: Season boldly. The cream and tomatoes can handle it.
- Fresh basil (2 tbsp in meatballs plus 1/3 cup in sauce): If you can get fresh, do it. Dried basil works in the meatballs in a pinch but the sauce really wants the fresh leaves.
- Olive oil (2 tbsp): For browning the meatballs and sauteing the onion. A good oil makes a difference here.
- Onion (1 small, finely chopped): The backbone of your sauce. Cook it slowly and it will reward you with sweetness.
- Crushed tomatoes (one 400 g can): San Marzano if you can find them. The sauce is only as good as the tomatoes you start with.
- Heavy cream (1/2 cup): This transforms a standard tomato sauce into something restaurant worthy. Do not skip it.
- Chicken or vegetable broth (1/2 cup): Adds body to the sauce and keeps it from becoming too thick or too rich.
- Sugar (1 tsp, optional): Only if your tomatoes taste sharp. Taste first, then decide.
- Cooked pasta, rice, or crusty bread for serving: You need something to soak up every drop of that sauce.
Instructions
- Bring the meatballs together:
- In a large bowl, combine the ground meat, breadcrumbs, Parmesan, egg, garlic, milk, salt, pepper, and basil. Use your hands and mix just until everything is evenly distributed. Overmixing makes them dense and tough, which nobody wants.
- Shape them up:
- Roll the mixture into golf ball sized rounds, which should give you about 16. Wet your hands slightly to keep the meat from sticking and do not pack them too tightly.
- Get a good sear:
- Heat olive oil in a large skillet over medium heat and add the meatballs in a single layer. Turn them every couple of minutes until they are browned all over, roughly 6 minutes total. They do not need to be cooked through yet, so remove them and set aside.
- Build the sauce foundation:
- In the same skillet with all those beautiful leftover bits, add the chopped onion and saute until soft and translucent, about 3 to 4 minutes. Toss in the garlic and stir for 30 seconds until your kitchen smells incredible.
- Let the tomatoes work their magic:
- Pour in the crushed tomatoes and broth, then stir in the salt, pepper, and sugar if you are using it. Let the sauce simmer for 5 minutes so the flavors start to marry and the raw tomato taste mellows out.
- Make it creamy:
- Stir in the heavy cream and Parmesan until the sauce turns a gorgeous sunset orange color. Fold in the chopped basil, then gently nestle each meatball back into the sauce.
- Simmer until perfect:
- Leave the skillet uncovered on low heat for 15 to 20 minutes, gently turning the meatballs once or twice so they cook evenly. The sauce will thicken and the meatballs will become fork tender.
- Finish and serve:
- Taste the sauce and add more salt or pepper if it needs it. Scatter extra fresh basil over the top and serve over pasta, rice, or with chunks of crusty bread for dipping.
There was a night my sister called me crying about a rough week at work, and I told her to come over with a bottle of wine and nothing else. Two hours later we were sitting on my kitchen floor with bowls of these meatballs, laughing so hard our stomachs hurt, and she said it was the best therapy session she ever had.
Making It Your Own
Ground turkey or chicken works if you want something lighter, though you will lose a bit of richness that the beef fat provides. A pinch of chili flakes in the sauce adds a warmth that sneaks up on you in the best way. I have also stirred in a handful of spinach at the end for color and it wilts down into the sauce beautifully.
Wine and Pairing Thoughts
A Chianti or any medium bodied red wine is the classic match and for good reason. The acidity cuts through the cream and the tannins play nicely with the Parmesan. If red wine is not your thing, a crisp white like Pinot Grigio also works surprisingly well with the tomato base.
Storage and Freezer Tips
The meatballs and sauce actually taste better the next day once the flavors have had time to fully develop in the fridge. They will keep for up to 3 days refrigerated or up to 3 months in the freezer. Let frozen meatballs thaw overnight in the fridge before gently reheating on the stove.
- Freeze them in individual portions so you only have to thaw what you need.
- A splash of broth when reheating brings the sauce back to life.
- Always taste for salt after reheating because the flavors can settle and mellow overnight.
Some dishes feed you and some dishes feed your soul, and this one does both without asking for much in return. Make it once and it will earn a permanent spot in your rotation.
Recipe Questions & Answers
- → Can I use ground turkey or chicken instead of beef?
-
Yes, ground turkey or chicken works well as a leaner alternative. Keep in mind the meatballs may be slightly less juicy, so avoid overmixing and consider adding a drizzle of olive oil to the mixture for moisture.
- → How do I prevent meatballs from falling apart?
-
Don't overmix the meat mixture—combine just until incorporated. The egg and breadcrumbs act as binders. Also, make sure to brown the meatballs well on all sides before simmering, as this helps them hold their shape in the sauce.
- → Can I make this dairy-free?
-
Absolutely. Substitute the heavy cream with full-fat coconut milk, use a dairy-free Parmesan alternative, and replace the milk in the meatballs with a non-dairy option. The flavor profile will shift slightly but remains delicious.
- → What pasta pairs best with this dish?
-
Long pasta like spaghetti, fettuccine, or pappardelle works beautifully, as the creamy sauce clings to the strands. Short shapes like penne or rigatoni also work well, catching the sauce in their ridges and tubes.
- → Can I freeze the meatballs in sauce?
-
Yes, this dish freezes wonderfully. Let it cool completely, then store in an airtight container for up to 3 months. Thaw overnight in the refrigerator and reheat gently on the stovetop, adding a splash of broth if the sauce has thickened too much.
- → How do I thicken or thin the sauce?
-
For a thicker sauce, simmer uncovered a few minutes longer. For a thinner consistency, add a small splash of chicken broth or pasta cooking water until you reach the desired texture.