Homemade Meatball Sub with Tomato Sauce and Fresh-Baked Rolls
This homemade meatball sub layers tender beef meatballs, a reduced tomato-basil sauce, Parmesan, and soft sesame rolls baked from scratch. The method is based on my YouTube video, with a few adjustments made since publication so the dough is properly salted, the meatballs stay moist, and the quantities fit three generous sandwiches.
The recipe works because the meatballs finish cooking gently in the tomato sauce instead of remaining over high heat. The mistake to avoid is kneading the beef like bread dough, which makes the meatballs dense and springy. Mix just until everything holds together, and look for a sauce that coats the meatballs without leaving a watery puddle in the pan.
{VIDEO}

What Is a Meatball Sub?
A meatball sub is an Italian-American sandwich made with meatballs, tomato sauce, cheese, and a long roll. This version is more involved than a quick weeknight sub because the rolls, meatballs, tomato sauce, and basil-Parmesan mixture are all prepared from scratch.
It is a hearty, protein-rich meal that works well for a weekend lunch, a casual family dinner, or game day. Each sandwich is large, so lighter appetites may prefer to divide one into two portions and serve it with a salad.
What Makes This Recipe Different
Many meatball sandwiches rely on store-bought rolls and prepared marinara. Those shortcuts are useful, but this recipe is about building the complete sandwich from the beginning.
I make the rolls with milk, egg, butter, and a small amount of olive oil. The result sits between a classic submarine roll and a light brioche. It stays soft enough to bite through without pushing the filling out the other side, but it still has enough structure to absorb sauce. For a simpler everyday loaf, my soft homemade white bread uses a more traditional dough, while my homemade brioche is richer and sweeter.
The original video used extra-lean beef and worked the mixture quite firmly. In this revised version, lean ground beef is mixed with a milk-and-breadcrumb panade. That small change matters. The breadcrumbs hold moisture inside the meat while the meatballs simmer, and gentle mixing keeps the texture tender.
This sandwich is also distinct from my beef meatballs simmered in tomato sauce, which are intended as a plated main dish, and my homemade spaghetti and meatballs, where the sauce must remain loose enough to coat pasta. Here, the sauce is deliberately reduced until it clings to the filling and does not immediately soak through the bread.
Ingredients You Need
For the homemade rolls
Use all-purpose flour for a soft but dependable crumb. Milk, egg, butter, and olive oil enrich the dough, while instant yeast provides a steady rise. Salt is essential even when salted butter is used. Without enough salt, the bread tastes flat and the yeast can work too quickly.
For the meatballs
Lean ground beef gives the meatballs enough fat to stay moist without making the sauce greasy. Breadcrumbs soaked in milk form the panade. Egg binds the mixture, while garlic, oregano, cumin, salt, and black pepper provide the seasoning.
The cumin should remain in the background. One teaspoon is enough to give warmth without turning the sandwich into a strongly spiced meatball dish.
For the tomato sauce
A 28-ounce can of diced tomatoes provides enough sauce for the meatballs and the three sandwiches. Red onion adds sweetness, garlic builds the base, and bay leaves add a subtle savoury aroma as the sauce reduces.
For an in-season variation, the same general method can be prepared with my fresh homemade tomato sauce.
For the basil-Parmesan mixture
Fresh basil is blended with olive oil and Parmesan, then stirred into the sauce near the end. Adding it late keeps the basil aroma fresher. It also gives the sauce a fuller texture without having to add cream.

Step-by-Step Instructions
1. Mix and knead the roll dough
Combine the room-temperature milk, egg, sugar, instant yeast, softened butter, and olive oil. Place the flour and salt in a large bowl, make a well in the centre, and gradually mix in the liquid.
Once a rough dough forms, transfer it to a lightly floured counter. Knead for 6 to 8 minutes. The dough should become smooth and elastic, with a slightly tacky surface. Avoid adding handfuls of flour. Too much flour will produce heavy rolls.
What I look for here is a dough that slowly springs back when pressed with a fingertip. If it feels dry and tears while kneading, work in 1 or 2 teaspoons of milk.
Place the dough in a lightly greased bowl, cover it, and let it rise until doubled, usually 45 to 60 minutes.

2. Prepare the meatball mixture
Combine the breadcrumbs and milk in a large bowl. Let them stand for 5 minutes so the crumbs can absorb the liquid.
Add the egg, garlic, oregano, cumin, salt, and black pepper. Mix these ingredients before adding the beef. This distributes the seasoning without requiring you to overwork the meat later.
Add the ground beef and fold everything together gently with your fingers. Stop as soon as no dry breadcrumb mixture remains. The meat should feel moist and hold its shape when pressed, but it should not become sticky like sausage filling.

3. Shape and brown the meatballs
Divide the mixture into 12 equal portions and roll them into balls. Lightly wetting your hands prevents sticking.
Heat the duck fat or olive oil in a wide skillet over medium-high heat. Add the meatballs in a single layer, leaving space between them. Brown them for 5 to 7 minutes, turning as the surfaces develop colour.
They do not need to be fully cooked yet. The goal is to form a browned exterior and leave flavour in the bottom of the skillet for the sauce.

4. Build the tomato sauce
Transfer the browned meatballs to a plate. Reduce the heat to medium and add the diced red onion to the same skillet. Cook for 4 to 5 minutes, scraping up the browned residue as the onion softens.
Add the garlic and cook for about 30 seconds. You should smell the garlic immediately, but it should not turn dark brown.
Pour in the diced tomatoes and add the bay leaves, salt, and black pepper. Bring the sauce to a gentle simmer and cook uncovered for 10 minutes.

5. Finish the meatballs in the sauce
Return the meatballs and any juices from the plate to the skillet. Spoon sauce over them, partially cover the pan, and simmer gently for 15 to 20 minutes.
Turn the meatballs once or twice so they cook evenly. You know they are ready when their centres reach 160°F and the sauce has reduced enough to cling to a spoon.
If the sauce becomes too thick before the meatballs are cooked, add a small splash of water. If it remains watery, remove the lid and simmer for a few extra minutes.

6. Shape and bake the rolls
While the sauce simmers, gently press the air out of the risen dough. Divide it into three equal pieces and shape each one into a roll about 7 inches long.
Place the rolls on a parchment-lined baking sheet. Cover loosely and let them rise for 30 to 45 minutes. They should look noticeably fuller but should not double again.
Brush the tops with beaten egg and sprinkle with sesame seeds. Bake at 400°F for 18 to 20 minutes, until deeply golden. The rolls should sound slightly hollow when tapped underneath.
Let them cool for at least 10 minutes before cutting. Very hot bread can compress and become gummy when sliced.

7. Add the basil mixture and assemble
Blend the basil, olive oil, Parmesan, salt, and pepper until finely chopped but not completely smooth. Remove the bay leaves from the tomato sauce, then stir in as much of the basil mixture as needed. Start with half and taste before adding more.
Split each roll lengthwise without cutting completely through the bottom. Arrange four meatballs in each roll, spoon over enough thick tomato sauce to cover them, and finish with grated Parmesan.
Serve while the meatballs are hot and the rolls are still fresh. The bread should absorb a little sauce around the edges while remaining firm enough to hold the filling.


What to Serve With a Meatball Sub
A large meatball sandwich is already substantial, so I usually choose a crisp or acidic side rather than another heavy dish.
For a classic takeout-style meal, serve it with crisp homemade French fries. When the oven is occupied with the rolls, air-fryer fries are a convenient alternative.
A scoop of creamy coleslaw provides a cool contrast to the hot tomato sauce. A classic Caesar salad also works well, especially when one sandwich is being divided between two people.
Storage and Reheating
Store the cooked meatballs and sauce together in an airtight container in the refrigerator for up to three days. Keep the rolls separate so they do not absorb moisture and become soggy.
Reheat the meatballs gently in a covered saucepan over medium-low heat. Add a tablespoon of water if the sauce has thickened considerably in the refrigerator.
The rolls can be refreshed in a 325°F oven for 5 to 7 minutes. Assemble only the sandwiches you plan to eat immediately.
The meatballs and sauce can also be frozen for up to three months. Thaw them overnight in the refrigerator before reheating. The basil mixture may darken slightly after freezing, but the flavour remains good.
Substitutions

Ground pork, turkey, or a mixture of beef and pork can replace the ground beef. Turkey is leaner, so keep the panade and avoid overcooking it. Ground pork produces a softer, richer meatball.
Regular yellow onion can replace red onion. Crushed tomatoes can be used instead of diced tomatoes and will create a smoother sauce. When using prepared tomato sauce, begin with about 3 cups and simmer only until it becomes thick enough for a sandwich.
Active dry yeast can replace instant yeast. Dissolve it in the milk with the sugar and let it stand for 5 to 10 minutes before mixing the dough.
Store-bought submarine rolls can be used when there is not enough time to make bread. Toast the cut surfaces briefly before adding the meatballs so the sauce does not soak through too quickly.
Pecorino Romano can replace Parmesan for a sharper, saltier finish. Reduce the added salt slightly when using Pecorino.

FAQ
Can I prepare the meatballs in advance?
Yes. Shape the raw meatballs, cover them tightly, and refrigerate them for up to 24 hours. They can also be browned and simmered in the sauce one day ahead. Reheat gently before assembling the sandwiches.
Why did my meatballs become hard?
The meat was probably mixed too aggressively or cooked at a rapid boil. Mix only until combined and keep the sauce at a gentle simmer. Using extra-lean beef without a panade can also produce dry meatballs.
Can I bake the meatballs instead of frying them?
Yes. Arrange them on a lined baking sheet and bake at 425°F for approximately 12 minutes. Transfer them to the sauce and continue simmering until the centres reach 160°F.
How do I prevent the sandwich from becoming soggy?
Reduce the sauce until it coats the meatballs, let the rolls cool before slicing, and avoid pouring excess liquid into the bread. Lightly toasting the inside of each roll adds more protection.
Can I use mozzarella?
Yes. Add shredded mozzarella or sliced provolone over the hot meatballs, then place the open sandwiches under the broiler for 1 to 2 minutes. Watch them closely because the bread can darken quickly.
Are these sandwiches spicy?
No. The cumin adds warmth but not heat. Crushed red pepper flakes can be added to the sauce for a spicy version.
Suggested Posts
Explore more homemade sandwich ideas in my sandwiches, wraps, and homemade fast-food collection.
For another substantial beef sandwich, try the raclette steak sandwich with pickled onions.
The aged cheddar cheesesteak is a faster option made without meatballs or tomato sauce.
My garlic-butter steak sandwich uses a simple pan sauce and works well when you want a beef sandwich without cheese.
For more midday ideas, browse these salads, sandwiches, wraps, and quick lunch recipes.

Homemade Meatball Sub with Tomato Sauce and Fresh-Baked Rolls
Ingredients
- For the rolls
- 2 1/2 cups all-purpose flour
- 1/2 cup plus 1 tablespoon room-temperature milk
- 1 large egg at room temperature
- 1 teaspoon sugar
- 2 teaspoons instant yeast
- 3 tablespoons salted butter softened
- 1 tablespoon olive oil
- 1 teaspoon fine salt
- 1 egg beaten for the egg wash
- 1 tablespoon white or mixed sesame seeds
- For the meatballs
- 1/2 cup plain breadcrumbs
- 1/3 cup milk
- 1 large egg
- 2 garlic cloves finely minced
- 1 teaspoon dried oregano
- 1 teaspoon ground cumin
- 1 teaspoon fine salt
- 1/2 teaspoon ground black pepper
- 1 pound lean ground beef
- 1 tablespoon duck fat or olive oil
- For the tomato sauce
- 1 medium red onion diced
- 2 garlic cloves minced
- 1 can diced tomatoes 28 ounces
- 2 bay leaves
- 1/2 teaspoon fine salt
- 1/4 teaspoon ground black pepper
- For the basil-Parmesan mixture
- 1 packed cup fresh basil leaves
- 1/4 cup olive oil
- 1/3 cup finely grated Parmesan
- 1/4 teaspoon fine salt
- 1/4 teaspoon ground black pepper
- For assembly
- 1/2 cup freshly grated Parmesan
Instructions
- Combine the milk, egg, sugar, yeast, butter, and olive oil. Mix the flour and salt separately, then gradually incorporate the liquid.
- Knead the dough for 6 to 8 minutes, cover it, and let it rise until doubled, approximately 45 to 60 minutes.
- Soak the breadcrumbs in the milk for 5 minutes. Mix in the egg, garlic, oregano, cumin, salt, and pepper.
- Gently fold in the ground beef. Divide the mixture into 12 meatballs.
- Brown the meatballs in duck fat or olive oil over medium-high heat for 5 to 7 minutes. Transfer them to a plate.
- Cook the red onion in the same skillet for 4 to 5 minutes. Add the garlic and cook for 30 seconds.
- Add the tomatoes, bay leaves, salt, and pepper. Simmer uncovered for 10 minutes.
- Return the meatballs to the sauce, partially cover, and simmer for 15 to 20 minutes, until the meatballs reach 160°F.
- Divide the risen dough into three pieces and shape them into 7-inch rolls. Let them rise for 30 to 45 minutes.
- Brush the rolls with beaten egg, sprinkle with sesame seeds, and bake at 400°F for 18 to 20 minutes.
- Blend the basil, olive oil, Parmesan, salt, and pepper. Remove the bay leaves and stir the basil mixture into the tomato sauce.
- Split the rolls, add four meatballs to each, spoon over the thick tomato sauce, and finish with grated Parmesan.





