Here is my favorite spaghetti and meatballs recipe, with tender, juicy meatballs made from a blend of beef and pork, fresh herbs, and a simple homemade tomato sauce that simmers to perfection.
This recipe is what I make when my kids ask for “real Italian food” for dinner. The meatballs are big and hearty, and the sauce has just the right balance of sweetness and basil. I always make extra because everyone comes back for seconds.

Why You’ll Love This Spaghetti and Meatballs
- Homemade meatballs – These tender, flavorful meatballs made with a blend of beef and pork are so much better than anything you’ll find in a jar or freezer aisle.
- Restaurant-quality at home – This classic Italian-American dish tastes like it came straight from your favorite Italian restaurant, but you made it yourself in your own kitchen.
- Perfect for feeding a crowd – With 2 pounds of spaghetti and plenty of meatballs, this recipe easily serves a large family or gives you leftovers for days.
- Simple, authentic ingredients – Made with everyday staples like ground meat, tomatoes, and fresh herbs, this recipe proves you don’t need fancy ingredients to create something special.
- Great for meal prep – The meatballs and sauce actually taste even better the next day, making this an ideal make-ahead dinner for busy weeknights.
What Kind of Ground Meat Should I Use?
This recipe calls for a combination of ground beef and ground pork, which is the traditional way to make Italian-style meatballs. The beef gives you that meaty flavor while the pork adds extra moisture and richness, so you end up with meatballs that are juicy and flavorful instead of dry. If you can only find one or the other, you can use all beef or all pork – just know that all-beef meatballs might be a bit leaner and firmer. For the best results, look for ground beef that’s 80/20 or 85/15 (that’s the lean-to-fat ratio), which gives you enough fat to keep things moist without being greasy.

Options for Substitutions
This classic recipe works great with a few simple swaps if you need them:
- Ground meat: The beef and pork combo gives the best flavor, but you can use all beef if that’s what you have. Ground turkey or chicken work too, though they’ll make lighter, less rich meatballs – just add an extra tablespoon of olive oil to keep them moist.
- Bread: Any bread works here – white, whole wheat, or even stale Italian bread. You can also use panko breadcrumbs (about 3/4 cup) instead, though regular bread gives a softer texture.
- Romano cheese: Parmesan is a perfect swap for romano and works just as well in the meatballs. They’re pretty similar in taste and texture.
- Fresh basil: If you don’t have fresh basil for the sauce, use 2 teaspoons of dried basil instead. Add it earlier in the cooking process so it has time to release its flavor.
- Crushed tomatoes: Whole peeled tomatoes work great – just crush them by hand as you add them to the pot. You can also use tomato puree, though the sauce will be slightly smoother.
- Spaghetti: Any long pasta like linguine, fettuccine, or bucatini works perfectly here. Just don’t substitute spaghetti with something else – the long strands are what make this dish what it is.
Watch Out for These Mistakes While Cooking
The biggest mistake people make with meatballs is overworking the meat mixture, which creates dense, tough meatballs instead of tender ones – mix just until the ingredients are combined and handle the meat gently when forming the balls.
Skipping the refrigeration step might seem like a time-saver, but cold meatballs hold their shape much better during cooking and are less likely to fall apart in the pan or sauce.
When browning your meatballs, resist the urge to move them around too much or they’ll break apart – let them develop a good crust on each side before turning, and remember they don’t need to be cooked through at this stage since they’ll finish cooking in the sauce.
Finally, don’t add your meatballs to the sauce too early or they can become mushy, and make sure your sauce is at a gentle simmer rather than a rolling boil to keep them intact.

What to Serve With Spaghetti and Meatballs?
A big basket of garlic bread is pretty much required when you’re serving spaghetti and meatballs – everyone will want something to mop up that delicious tomato sauce. I love keeping things simple with a crisp Caesar salad or a basic mixed green salad with Italian dressing on the side to balance out all the richness from the meatballs and pasta. If you’re feeding a crowd, consider adding some roasted vegetables like zucchini, bell peppers, or broccoli that you can toss with a little olive oil and garlic. A glass of red wine for the adults doesn’t hurt either, and don’t forget to put out extra parmesan cheese for sprinkling on top!
Storage Instructions
Store: Keep your leftover spaghetti and meatballs in an airtight container in the fridge for up to 4 days. I like to store the meatballs and sauce separate from the pasta if possible, since the noodles can soak up a lot of sauce and get mushy. It reheats really well for quick weeknight dinners!
Freeze: The meatballs and sauce freeze incredibly well for up to 3 months. I usually freeze them together in portions, so I can just grab what I need. Cook fresh pasta when you’re ready to eat, or freeze cooked pasta separately if you prefer everything ready to go.
Reheat: Warm the meatballs and sauce in a pot on the stove over medium-low heat, stirring occasionally until heated through. You can also microwave individual portions, but add a splash of water or broth to keep the sauce from drying out. The pasta reheats best when tossed right into the warm sauce.
| Preparation Time | 90-120 minutes |
| Cooking Time | 75-105 minutes |
| Total Time | 165-225 minutes |
| Level of Difficulty | Medium |
| Servings | 8 servings |
Estimated Nutrition
Estimated nutrition for the whole recipe (without optional ingredients):
- Calories: 5200-5700
- Protein: 200-230 g
- Fat: 190-230 g
- Carbohydrates: 640-710 g
Ingredients
For the meatballs:
- 1.25 cups bread (torn into small pieces)
- 0.66 cup milk
- 0.5 cup onion (finely diced)
- 1 lb ground beef
- 1 lb ground pork
- 2 eggs (large)
- 0.25 cup parsley (fresh, finely chopped)
- 1.5 tbsp garlic (minced)
- 2 tsp salt
- 1.5 tsp black pepper (freshly ground for best flavor)
- 0.5 tsp red pepper flakes
- 1 tsp basil (dried)
- 0.25 cup Pecorino Romano cheese (grated)
- 2 tbsp olive oil (I use Colavita extra virgin)
For the sauce:
- 56 oz crushed tomatoes (I use Cento San Marzano)
- 1.5 bunches basil (fresh)
- 0.33 cup olive oil
- 2 tsp sugar
- 1 tsp salt
- 0.5 tsp black pepper
For the pasta:
- 2 lb spaghetti
Step 1: Prepare the Meatball Mixture and Refrigerate
- 1.25 cups bread
- 0.66 cup milk
- 1 lb ground beef
- 1 lb ground pork
- 0.5 cup onion, finely diced
- 2 eggs, large
- 0.25 cup fresh parsley, finely chopped
- 1.5 tbsp garlic, minced
- 2 tsp salt
- 1.5 tsp black pepper, freshly ground
- 0.5 tsp red pepper flakes
- 1 tsp dried basil
- 0.25 cup Pecorino Romano cheese, grated
Tear bread into small pieces and soak in milk for 20 minutes to soften, then drain well—this creates a binder that keeps the meatballs tender and moist.
In a large bowl, combine the drained bread with ground beef, ground pork, diced onion, eggs, fresh parsley, minced garlic, salt, pepper, red pepper flakes, dried basil, and grated Pecorino Romano cheese.
Mix gently with your hands until just combined—overworking the mixture will make the meatballs tough and dense.
Cover and refrigerate for at least 1 hour; I find this resting time helps the flavors meld and makes the mixture much easier to shape into uniform balls.
Step 2: Shape and Brown the Meatballs
- meatball mixture from Step 1
- 2 tbsp olive oil
Remove the chilled meatball mixture from the refrigerator and form into 1.5-inch balls—cold mixture is easier to handle and won’t stick to your hands.
Heat 2 tablespoons of olive oil in a large skillet over medium-high heat until shimmering.
Working in batches to avoid overcrowding, add meatballs and cook for about 15 minutes, turning occasionally, until they develop a deep golden-brown crust on all sides.
Transfer browned meatballs to a plate; they won’t be fully cooked at this stage, but the browning creates a flavorful crust that adds depth to the final dish.
Step 3: Build the Tomato Sauce Base
- 0.33 cup olive oil
- 0.5 cup onion, finely diced
- 1.5 tbsp garlic, minced
- 56 oz crushed tomatoes
- 1.5 bunches fresh basil
- 2 tsp sugar
- 1 tsp salt
- 0.5 tsp black pepper
In the same skillet (don’t clean it—those browned bits add flavor), heat 0.33 cup olive oil over medium heat.
Add finely diced onion and sauté for 3-4 minutes until softened and translucent, then add minced garlic and cook for another minute until fragrant.
Pour in the crushed tomatoes, then add fresh basil, sugar, salt, and black pepper.
Bring the sauce to a boil, then reduce heat and simmer gently for 15-20 minutes to allow the flavors to develop and the sauce to thicken slightly.
Step 4: Simmer Meatballs in Sauce
- browned meatballs from Step 2
- tomato sauce from Step 3
Add the browned meatballs from Step 2 to the simmering sauce from Step 3.
Reduce heat to low and let everything simmer gently for at least 1 hour—the longer the simmer (up to 3 hours is ideal), the more the flavors meld and the more tender the meatballs become.
The sauce will also reduce and concentrate, becoming richer and more cohesive.
I like to stir occasionally and adjust seasoning halfway through if needed.
Step 5: Cook the Pasta
- 2 lb spaghetti
About 15-20 minutes before you want to serve, bring a large pot of salted water to a rolling boil.
Add spaghetti and cook according to package directions until al dente (usually 8-12 minutes depending on the brand).
Drain the pasta, reserving about 1 cup of the starchy cooking water to use for adjusting sauce consistency if needed.
Step 6: Plate and Serve
- cooked pasta from Step 5
- meatballs and sauce from Step 4
Divide the cooked spaghetti from Step 5 among serving bowls or plates.
Ladle the meatballs and sauce from Step 4 generously over the pasta.
Add a splash of reserved pasta water if the sauce seems too thick, and adjust final seasoning with salt and pepper to taste.

Authentic Classic Spaghetti and Meatballs
Ingredients
For the meatballs::
- 1.25 cups bread (torn into small pieces)
- 0.66 cup milk
- 0.5 cup onion (finely diced)
- 1 lb ground beef
- 1 lb ground pork
- 2 eggs (large)
- 0.25 cup parsley (fresh, finely chopped)
- 1.5 tbsp garlic (minced)
- 2 tsp salt
- 1.5 tsp black pepper (freshly ground for best flavor)
- 0.5 tsp red pepper flakes
- 1 tsp basil (dried)
- 0.25 cup Pecorino Romano cheese (grated)
- 2 tbsp olive oil (I use Colavita extra virgin)
For the sauce::
- 56 oz crushed tomatoes (I use Cento San Marzano)
- 1.5 bunches basil (fresh)
- 0.33 cup olive oil
- 2 tsp sugar
- 1 tsp salt
- 0.5 tsp black pepper
For the pasta::
- 2 lb spaghetti
Instructions
- Tear bread into small pieces and soak in milk for 20 minutes to soften, then drain well—this creates a binder that keeps the meatballs tender and moist. In a large bowl, combine the drained bread with ground beef, ground pork, diced onion, eggs, fresh parsley, minced garlic, salt, pepper, red pepper flakes, dried basil, and grated Pecorino Romano cheese. Mix gently with your hands until just combined—overworking the mixture will make the meatballs tough and dense. Cover and refrigerate for at least 1 hour; I find this resting time helps the flavors meld and makes the mixture much easier to shape into uniform balls.
- Remove the chilled meatball mixture from the refrigerator and form into 1.5-inch balls—cold mixture is easier to handle and won't stick to your hands. Heat 2 tablespoons of olive oil in a large skillet over medium-high heat until shimmering. Working in batches to avoid overcrowding, add meatballs and cook for about 15 minutes, turning occasionally, until they develop a deep golden-brown crust on all sides. Transfer browned meatballs to a plate; they won't be fully cooked at this stage, but the browning creates a flavorful crust that adds depth to the final dish.
- In the same skillet (don't clean it—those browned bits add flavor), heat 0.33 cup olive oil over medium heat. Add finely diced onion and sauté for 3-4 minutes until softened and translucent, then add minced garlic and cook for another minute until fragrant. Pour in the crushed tomatoes, then add fresh basil, sugar, salt, and black pepper. Bring the sauce to a boil, then reduce heat and simmer gently for 15-20 minutes to allow the flavors to develop and the sauce to thicken slightly.
- Add the browned meatballs from Step 2 to the simmering sauce from Step 3. Reduce heat to low and let everything simmer gently for at least 1 hour—the longer the simmer (up to 3 hours is ideal), the more the flavors meld and the more tender the meatballs become. The sauce will also reduce and concentrate, becoming richer and more cohesive. I like to stir occasionally and adjust seasoning halfway through if needed.
- About 15-20 minutes before you want to serve, bring a large pot of salted water to a rolling boil. Add spaghetti and cook according to package directions until al dente (usually 8-12 minutes depending on the brand). Drain the pasta, reserving about 1 cup of the starchy cooking water to use for adjusting sauce consistency if needed.
- Divide the cooked spaghetti from Step 5 among serving bowls or plates. Ladle the meatballs and sauce from Step 4 generously over the pasta. Add a splash of reserved pasta water if the sauce seems too thick, and adjust final seasoning with salt and pepper to taste.