
30-Minute Meatball and Tomato Sauce
Quick, homemade meatballs simmered in a fragrant tomato sauce with garlic and fresh herbs. Ready in half an hour, this is a weeknight dinner that tastes like you spent hours cooking. Serve over pasta, polenta, or crusty bread.
- Prep
- 15 min
- Cook
- 15 min
- Total
- 30 min
- Makes
- 1¼ cups sauce with 20 meatballs (serves 4 over pasta)
Steps
Before you start
- Bring ground beef to room temperature for 10 minutes (it mixes more easily)
- Measure all ingredients before you start cooking
- Have a wooden spoon and medium saucepan ready
Mix the meatballs
- In a medium mixing bowl, stir together the milk and breadcrumbs.
- Let sit for 1 minute to soften.
- Add the ground beef, egg, minced garlic, grated Parmigiano-Reggiano, salt, and black pepper.
- Using your hands, gently mix just until combined—do not overmix or the meatballs will be tough.
- You should still see small streaks of beef; stop as soon as everything is barely incorporated.
- Form into 20 balls about ¾ inch (2 cm) in diameter and set aside on a plate.
+ Show details− Hide details
Ready when: Meatballs are uniform in size and not overworked
Tip: Overmixing makes meatballs dense. Mix just until the ingredients disappear; some streaks are fine.
Brown the meatballs
- Heat the olive oil in a medium 3-quart saucepan over medium-high heat until shimmering, about 1 minute.
- Working in batches to avoid crowding, add the meatballs and cook for 4–5 minutes, rolling them gently with a wooden spoon every minute or so, until they are golden brown on at least three sides.
- (They don't need to be fully cooked through—the simmer will finish them.) Transfer to a plate.
- Do not wash the pan.
+ Show details− Hide details
Ready when: Meatballs are deep golden brown on multiple sides
Tip: Don't overcrowd the pan; cook in two batches so meatballs brown instead of steam. Keep the pan undisturbed for the first minute to develop color.
Build the sauce
- Reduce heat to medium and add the tomato paste to the same saucepan.
- Stir constantly for 1 minute to break down any clumps and toast it slightly.
- Pour in the crushed tomatoes, scraping up any browned bits stuck to the bottom of the pan.
- Stir in the dried oregano and red pepper flakes (if using).
+ Show details− Hide details
Ready when: Tomato paste is cooked out and the sauce smells rich
Tip: Toasting the tomato paste deepens its flavor and prevents a raw taste. Stir constantly so it doesn't stick.
Simmer the meatballs
- Return the meatballs to the sauce, stirring gently to submerge them.
- Bring to a simmer over medium heat (you'll see small, consistent bubbles breaking the surface).
- Reduce heat to medium-low, partially cover with the lid, and simmer for 8 minutes.
- Stir once halfway through.
- The sauce should bubble gently; adjust heat if needed.
+ Show details− Hide details
Ready when: Meatballs are firm and cooked through when pressed with the back of a spoon; sauce is glossy and clings to the spoon
Tip: A gentle simmer is key—a rolling boil will break apart the meatballs. If the sauce is too thin at the end, simmer uncovered for 2 minutes.
Finish with basil
- Remove from heat.
- Taste the sauce and adjust salt and pepper as needed.
- Stir in the fresh torn basil just before serving.
+ Show details− Hide details
Ready when: Basil is evenly distributed and still bright green
Tip: Add basil off heat so it stays bright and fragrant; heat dulls its flavor.
Good to know
Tips
- For extra depth, add 1 tablespoon balsamic vinegar or a pinch of sugar to the sauce if it tastes too sharp. Taste first—not all tomatoes are equally acidic.
- Serve the meatballs and sauce over pasta (spaghetti, pappardelle, rigatoni), creamy polenta, or with crusty bread for soaking up the sauce.
- If you have fresh parsley, chop a handful and stir it in with the basil for a more herbaceous flavor.
- For a smoother sauce, blend it lightly with an immersion blender after simmering, or leave it chunky as is—both styles are authentic.
Make ahead
Meatballs can be formed and refrigerated on a plate, covered, for up to 8 hours. Brown them directly from the fridge (they will take 1–2 minutes longer). The sauce can be simmered and cooled, then refrigerated in an airtight container for up to 3 days, or frozen for up to 3 months. Reheat gently over medium-low heat, stirring occasionally, until warmed through.
Storage & reheating
Room temp (not recommended for meat): up to 1 hour. Refrigerator: up to 3 days in an airtight container. Freezer: up to 3 months; thaw overnight in the fridge before reheating. To reheat, warm gently in a covered saucepan over medium-low heat, stirring occasionally, for 8–10 minutes until steaming.
Substitutions
- ground beef (80/20 blend) → ground pork, ground lamb, or a mix (85/15 blend). Pork will be slightly sweeter and leaner; lamb is richer. Cook time remains the same.
- Parmigiano-Reggiano cheese → Pecorino Romano or Grana Padano. Pecorino is sharper and saltier, so reduce the salt in the meatballs by ¼ tsp. Grana Padano is slightly milder.
- panko breadcrumbs → plain or Italian-seasoned breadcrumbs, or finely crumbled day-old bread (crusts removed). Panko gives a lighter texture, but any breadcrumb works. Avoid instant dried breadcrumbs as they can be gritty.
- crushed tomatoes (canned) → 1 can (28 oz / 800 g) whole peeled tomatoes, crushed by hand. Whole tomatoes have brighter flavor. Crush them in the bowl before adding to the sauce.
More meatballs
See all →Find more like this
- Meal
- Dinner
- Cuisine
- Italian
- Main ingredient
- Ground BeefTomatoes
- Diet
- HalalSugar-Free
- Method
- Stovetop





