If you ask me, spaghetti and meatballs is one of those dinners that never gets old.
This classic Italian-American dish brings together tender meatballs with a rich tomato sauce and perfectly cooked pasta. The meatballs are seasoned just right and browned until they’re crispy on the outside, then simmered in sauce until they’re melt-in-your-mouth good.
The sauce clings to every strand of spaghetti, and a sprinkle of Parmesan cheese ties it all together.
It’s the kind of meal that fills up your family and leaves everyone happy, perfect for busy weeknights or lazy Sunday dinners.

Why You’ll Love This Spaghetti and Meatballs
- Restaurant-quality homemade meatballs – These tender, flavorful meatballs made with a blend of beef and pork beat any frozen version, and they’re easier to make than you might think.
- Rich, from-scratch tomato sauce – The sauce simmers with garlic, herbs, and whole tomatoes to create a depth of flavor that jarred sauce just can’t match.
- Classic comfort food – This is the kind of hearty, satisfying dinner that brings everyone to the table and makes your house smell amazing while it cooks.
- Perfect for feeding a crowd – With a full pound of pasta and plenty of meatballs, this recipe easily serves a family or gives you delicious leftovers for the week.
- Customizable heat level – You can keep it mild for kids or add red pepper flakes to give it a little kick, making it work for everyone’s taste preferences.
What Kind of Ground Beef Should I Use?
For meatballs, you’ll want to use ground beef with a bit of fat in it – I’d recommend 80/20 or 85/15 lean-to-fat ratio. If you go too lean, like 90/10 or higher, your meatballs can end up dry and tough instead of juicy and tender. The fat helps keep everything moist and adds flavor as the meatballs cook in the sauce. This recipe also calls for mixing in ground pork or Italian sausage with the beef, which is a classic combination that gives you the best of both worlds – the beefy flavor you love plus extra richness and seasoning from the pork.
Options for Substitutions
This classic recipe has room for a few swaps depending on what you have in your kitchen:
- Ground beef and pork: You can use all beef if you prefer, though the pork adds extra moisture and flavor. Ground turkey or chicken work too, but add an extra tablespoon of olive oil to the meatball mixture since they’re leaner.
- Italian sausage: If using Italian sausage instead of ground pork, remove it from the casings first. You might want to reduce the salt in the meatballs slightly since sausage is already seasoned.
- Whole canned tomatoes: Crushed tomatoes work in a pinch, though whole tomatoes give you better control over texture. You can also use fresh tomatoes (about 4 pounds), but you’ll need to peel and seed them first, then simmer the sauce a bit longer.
- Fresh parsley: Dried parsley can substitute at about 1 tablespoon, though fresh really does make a difference here. Fresh basil also works nicely in the meatballs.
- Breadcrumbs: Regular breadcrumbs work fine – just add 1/2 teaspoon of Italian seasoning to them. Panko also works but makes slightly lighter meatballs.
- Spaghetti: Any long pasta like linguine, fettuccine, or bucatini works great. You can also use penne or rigatoni if that’s what you have on hand.
Watch Out for These Mistakes While Cooking
Overworking the meat mixture is the fastest way to end up with dense, tough meatballs – mix the ingredients just until combined, using your hands gently to avoid compacting the meat too much.
A big mistake is skipping the breadcrumb and milk mixture (called a panade), which keeps your meatballs moist and tender, so let those breadcrumbs soak in the milk for a few minutes before adding them to the meat.
Don’t crowd the pan when browning your meatballs, as this causes them to steam instead of getting that nice golden crust, and remember they don’t need to cook all the way through at this stage since they’ll finish cooking in the sauce.
Finally, resist the urge to stir the meatballs constantly once they’re in the sauce – let them simmer gently for at least 20 minutes so they can soak up all those flavors without falling apart.
What to Serve With Spaghetti and Meatballs?
A big basket of warm garlic bread is pretty much required when you’re serving spaghetti and meatballs – you’ll want something to mop up all that delicious sauce. I love making a simple Caesar salad on the side with crisp romaine, parmesan shavings, and crunchy croutons to balance out the richness of the meatballs. If you’re feeding a crowd, roasted vegetables like zucchini, bell peppers, or broccoli are a great way to round out the meal. For an extra special touch, whip up some bruschetta with fresh tomatoes and basil as an appetizer while everyone’s waiting for dinner.
Storage Instructions
Store: Keep your leftover spaghetti and meatballs in an airtight container in the fridge for up to 4 days. I actually think this tastes even better the next day once all the flavors have had time to meld together! Store the pasta and sauce together or separately, whatever works best for you.
Freeze: The meatballs and sauce freeze really well for up to 3 months. I recommend freezing them without the pasta, since cooked spaghetti can get a bit mushy when frozen. Just portion them out in freezer-safe containers or bags, and you’ve got an easy dinner ready to go whenever you need it.
Reheat: Warm everything up gently on the stovetop over medium-low heat, stirring occasionally and adding a splash of water or broth if the sauce seems too thick. You can also microwave individual portions, but the stovetop method keeps the meatballs more tender. If you froze it, let it thaw in the fridge overnight first for best results.
| Preparation Time | 15-20 minutes |
| Cooking Time | 65-80 minutes |
| Total Time | 80-100 minutes |
| Level of Difficulty | Medium |
Estimated Nutrition
Estimated nutrition for the whole recipe (without optional ingredients):
- Calories: 3200-3600
- Protein: 160-185 g
- Fat: 115-135 g
- Carbohydrates: 350-400 g
Ingredients
For the tomato sauce:
- 2 cans (28 oz each) whole tomatoes with juices
- 1 tbsp olive oil
- 1 tbsp butter
- 1 medium yellow onion, diced
- 4 garlic cloves, minced
- 1 tsp italian herb blend
- 1 tsp dried oregano
- 1 tsp granulated sugar
- 1/4 tsp red pepper flakes (optional, or to taste)
- Salt and pepper, to taste
For the meatballs:
- 1/3 cup seasoned italian breadcrumbs
- 1/3 cup whole milk
- 1 lb ground beef
- 1/2 lb ground pork or mild italian sausage
- 1 large egg
- 3/4 cup parmesan cheese, grated (plus more for serving)
- 1/4 cup finely chopped fresh parsley, packed
- 4 garlic cloves, finely chopped
- 1 tsp kosher salt
- 1/2 tsp onion powder
- Black pepper, to taste
For assembly:
- 1 lb uncooked spaghetti
- Fresh basil, torn or chopped (optional)
Step 1: Prep the Tomatoes and Ingredients
- 2 cans (28 oz each) whole tomatoes with juices
- 4 garlic cloves, minced (for sauce)
- 4 garlic cloves, finely chopped (for meatballs)
- 1 medium yellow onion, diced
- 1/4 cup finely chopped fresh parsley, packed
Prepare all your ingredients before starting.
Mince all garlic cloves at once for both the sauce and the meatballs; I like to use a garlic press to speed this up.
Pour the canned whole tomatoes (with juices) into a large bowl and use your hands to crush and break them up into smaller pieces.
Dice the onion and chop the parsley if you haven’t already.
Step 2: Start the Tomato Sauce
- 1 tbsp olive oil
- 1 tbsp butter
- 1 medium yellow onion, diced (from Step 1)
- 4 garlic cloves, minced (from Step 1)
- 2 cans (28 oz each) whole tomatoes with juices (crushed, from Step 1)
- 1 tsp Italian herb blend
- 1 tsp dried oregano
- 1 tsp granulated sugar
- 1/4 tsp red pepper flakes (optional, or to taste)
Heat the olive oil and butter in a large soup pot or Dutch oven over medium heat.
Add the diced onion and sauté for about 5 minutes, stirring occasionally, until the onion is soft and translucent.
Stir in the minced garlic and cook for another 30 seconds, just until fragrant.
Pour in the prepared tomatoes with juices, then add the Italian herb blend, dried oregano, granulated sugar, and red pepper flakes (if using).
Stir well to combine.
Once the sauce starts to bubble, partially cover the pot with the lid and reduce the heat to maintain a steady simmer.
Let simmer for 30 minutes, stirring occasionally.
Step 3: Make the Meatball Mixture
- 1/3 cup seasoned Italian breadcrumbs
- 1/3 cup whole milk
- 1 lb ground beef
- 1/2 lb ground pork or mild Italian sausage
- 1 large egg
- 3/4 cup Parmesan cheese, grated
- 1/4 cup finely chopped fresh parsley, packed (from Step 1)
- 4 garlic cloves, finely chopped (from Step 1)
- 1 tsp kosher salt
- 1/2 tsp onion powder
- black pepper, to taste
While the sauce is simmering, prepare the meatballs.
In a large bowl, combine the seasoned Italian breadcrumbs and whole milk, mixing with a fork until a paste forms.
Add the ground beef, ground pork or Italian sausage, egg, grated Parmesan, chopped parsley, finely chopped garlic, kosher salt, onion powder, and some black pepper.
Using your hands, gently mix all the meatball ingredients together just until combined—be careful not to over-mix.
Form the mixture into about 18 meatballs, each about 1 ½ inches in diameter.
Place them on plates or a baking sheet for easy clean-up.
Step 4: Simmer the Meatballs in the Sauce
- meatballs (from Step 3)
- tomato sauce (from Step 2)
- salt and pepper, to taste
Gently stir the sauce, then carefully add the formed meatballs into the pot, arranging them so they’re mostly submerged in the sauce.
Partially cover with the lid and continue simmering for 35–45 minutes, or until the meatballs are cooked through (internal temperature should reach 165°F).
Adjust the heat as needed to maintain a gentle simmer.
I always taste the sauce at this point and season generously with salt and pepper to bring out all the flavors.
Step 5: Cook the Spaghetti
- 1 lb uncooked spaghetti
While the meatballs simmer, bring a large pot of salted water to a boil.
Add the spaghetti and cook according to package instructions until al dente.
Drain the pasta, reserving a bit of the pasta water if you like a looser sauce.
For extra flavor, sometimes I toss the drained spaghetti with a drizzle of olive oil before plating.
Step 6: Serve and Garnish
- cooked spaghetti (from Step 5)
- sauce and meatballs (from Step 4)
- Parmesan cheese, grated (extra, for serving)
- fresh basil, torn or chopped (optional)
Plate the cooked spaghetti and top with meatballs and plenty of sauce from the pot.
Sprinkle with more grated Parmesan cheese and fresh basil if desired.
Serve immediately for a comforting and classic meal.

Hearty Spaghetti and Meatballs
Ingredients
For the tomato sauce:
- 2 cans (28 oz each) whole tomatoes with juices
- 1 tbsp olive oil
- 1 tbsp butter
- 1 medium yellow onion, diced
- 4 garlic cloves, minced
- 1 tsp Italian herb blend
- 1 tsp dried oregano
- 1 tsp granulated sugar
- 1/4 tsp red pepper flakes (optional, or to taste)
- salt and pepper, to taste
For the meatballs:
- 1/3 cup seasoned Italian breadcrumbs
- 1/3 cup whole milk
- 1 lb ground beef
- 1/2 lb ground pork or mild Italian sausage
- 1 large egg
- 3/4 cup Parmesan cheese, grated (plus more for serving)
- 1/4 cup finely chopped fresh parsley, packed
- 4 garlic cloves, finely chopped
- 1 tsp kosher salt
- 1/2 tsp onion powder
- black pepper, to taste
For assembly:
- 1 lb uncooked spaghetti
- fresh basil, torn or chopped (optional)
Instructions
- Prepare all your ingredients before starting. Mince all garlic cloves at once for both the sauce and the meatballs; I like to use a garlic press to speed this up. Pour the canned whole tomatoes (with juices) into a large bowl and use your hands to crush and break them up into smaller pieces. Dice the onion and chop the parsley if you haven't already.
- Heat the olive oil and butter in a large soup pot or Dutch oven over medium heat. Add the diced onion and sauté for about 5 minutes, stirring occasionally, until the onion is soft and translucent. Stir in the minced garlic and cook for another 30 seconds, just until fragrant. Pour in the prepared tomatoes with juices, then add the Italian herb blend, dried oregano, granulated sugar, and red pepper flakes (if using). Stir well to combine. Once the sauce starts to bubble, partially cover the pot with the lid and reduce the heat to maintain a steady simmer. Let simmer for 30 minutes, stirring occasionally.
- While the sauce is simmering, prepare the meatballs. In a large bowl, combine the seasoned Italian breadcrumbs and whole milk, mixing with a fork until a paste forms. Add the ground beef, ground pork or Italian sausage, egg, grated Parmesan, chopped parsley, finely chopped garlic, kosher salt, onion powder, and some black pepper. Using your hands, gently mix all the meatball ingredients together just until combined—be careful not to over-mix. Form the mixture into about 18 meatballs, each about 1 ½ inches in diameter. Place them on plates or a baking sheet for easy clean-up.
- Gently stir the sauce, then carefully add the formed meatballs into the pot, arranging them so they're mostly submerged in the sauce. Partially cover with the lid and continue simmering for 35–45 minutes, or until the meatballs are cooked through (internal temperature should reach 165°F). Adjust the heat as needed to maintain a gentle simmer. I always taste the sauce at this point and season generously with salt and pepper to bring out all the flavors.
- While the meatballs simmer, bring a large pot of salted water to a boil. Add the spaghetti and cook according to package instructions until al dente. Drain the pasta, reserving a bit of the pasta water if you like a looser sauce. For extra flavor, sometimes I toss the drained spaghetti with a drizzle of olive oil before plating.
- Plate the cooked spaghetti and top with meatballs and plenty of sauce from the pot. Sprinkle with more grated Parmesan cheese and fresh basil if desired. Serve immediately for a comforting and classic meal.

