I have a weakness for dinners that make the whole kitchen smell like I actually spent all day cooking, even when I really didn’t. Meatballs and gravy is one of those meals for me. I get tender little meatballs, soft onions, rich brown gravy, and a pile of creamy mashed potatoes all on one plate. It is simple food, but it feels like a proper dinner.
I started making this when I wanted something a little more comforting than my usual ground beef dinners. The first time, I made the mistake of crowding every meatball into the skillet at once because I was impatient. They steamed more than they browned, and I learned pretty quickly that giving them room makes a huge difference.
Now I usually make extra meatballs whenever I have ground beef out. I can freeze the uncooked ones for another dinner, which is especially nice on those nights when I know I won’t have much energy for cooking. I just thaw them in the refrigerator and pick up from there.
A Few Things I Like to Have Ready First
I like to get my ingredients measured before I start because the gravy comes together quickly once the onions are ready. I also keep my mashed potatoes going at the same time, since I want them hot and creamy when the meatballs are finished.
Ingredients I Used for the Recipe
- 3 tablespoons olive oil: I use this for browning the meatballs and giving the outside a nice golden crust.
- 1 1/2 pounds 85% lean ground beef: I like this balance of meat and fat because it keeps my meatballs tender without making them overly greasy.
- 1/2 yellow onion, finely diced: I mix this into the meatballs for flavor and a little moisture.
- 1/4 cup plain or Italian breadcrumbs: I use these to help hold the meatballs together while keeping them soft.
- 2 cloves garlic, minced: I add garlic for a deeper savory flavor.
- 1 large egg: I use the egg to help bind everything together.
- 1 tablespoon ketchup: I like the little bit of sweetness and extra flavor it gives the meat mixture.
- 1 teaspoon yellow mustard: I add this for a small tangy note that I don’t really notice as a separate flavor.
- 1 teaspoon Worcestershire sauce: I use this to give the meatballs a richer savory taste.
- 1/2 teaspoon salt: I use this to season the meatballs.
- 1/4 teaspoon black pepper: I add pepper for a little warmth.
- 2 teaspoons roughly chopped fresh parsley: I mix some into the meatballs and save a little more for serving if I have extra.
- 1 medium yellow onion, sliced into 1/2-inch strings: I cook these slowly in the skillet so they soften and pick up all those browned bits left behind by the meatballs.
- 1 tablespoon unsalted butter: I use this for cooking the onions and starting the gravy.
- 1 cup chicken broth: I use this as part of the gravy base.
- 1 cup beef broth: I add this for a deeper beefy flavor.
- 1 beef bouillon cube: I use this to give the gravy a little more richness.
- 1 teaspoon onion powder: I add this to make the onion flavor in the gravy more noticeable.
- 1/2 teaspoon garlic powder: I use this for another layer of savory flavor.
- 1 1/2 teaspoons Worcestershire sauce: I stir this into the gravy for that deep, slightly tangy taste.
- 2 to 3 drops browning and seasoning sauce, optional: I only use this when I want a darker-looking gravy.
- 1/4 cup cold water: I mix this with the cornstarch before adding it to the hot gravy.
- 3 tablespoons cornstarch: I use this to thicken the gravy until it coats the meatballs and mashed potatoes nicely.
- Mashed potatoes, for serving: I spoon the meatballs and gravy over a generous pile because that is honestly my favorite part.
How to Make Meatballs and Gravy
Step 1 – Mix My Meatballs
I start by putting the ground beef, diced onion, breadcrumbs, garlic, egg, ketchup, mustard, Worcestershire sauce, salt, pepper, and parsley into a large bowl. I mix everything gently with my hands until it is just combined.
I try not to keep working the mixture once everything looks evenly distributed. I used to think mixing longer would make everything better, but it actually gave me tougher meatballs. I learned to stop sooner than I think I need to.
Step 2 – Roll and Chill the Meatballs
I roll the mixture into meatballs about 1 1/2 inches wide. I usually get around 24 to 27 meatballs from this amount, depending on how generous I am with each one.
Once they are rolled, I put them in the refrigerator for about 15 minutes. I used to skip this when I was rushing dinner, but the short chill helps the meatballs stay together when I start turning them in the skillet.
Step 3 – Brown the Meatballs
I heat the olive oil in a large nonstick skillet over medium heat. I don’t add every meatball at once. I brown about five or six at a time, leaving enough space around each one that I can actually get a spatula or spoon around it.
I cook them for roughly two minutes on each side, turning them so I can get color around the outside. They don’t need to be completely cooked in this stage because I finish them later in the gravy.
I transfer each browned batch to a plate and keep going until all the meatballs have had their turn. The browned outside is worth the extra few minutes, especially once it starts mixing with the gravy later.
Step 4 – Soften the Onions
Once the meatballs are out, I reduce the heat to medium and melt the butter in the same skillet. I add the sliced onions and let them cook for about 15 minutes, stirring fairly often.
I don’t rush this part. I like letting the onions soften and pick up some color because they bring a lot of the comfort-food flavor to the finished gravy. I also make sure I scrape around the skillet a little while they cook.
Step 5 – Build My Brown Gravy
I pour in the chicken broth and beef broth, then add the beef bouillon, onion powder, garlic powder, and Worcestershire sauce. I stir everything together and use a silicone spatula to loosen the browned bits from the bottom of the skillet.
Those little browned bits are one of the reasons I like making this in one pan. I don’t want to waste them. They blend into the gravy and give it a much fuller taste than I get from simply pouring broth into a clean pan.
If I want a darker gravy, I add two or three drops of browning and seasoning sauce. I don’t use much because a tiny amount is enough for the color I want.
Step 6 – Thicken the Gravy
I mix the cold water and cornstarch in a small container with a lid, close it tightly, and shake until it looks smooth. I learned to use cold water here because it makes the mixture easier to blend into the gravy.
I bring the gravy to a boil and slowly whisk in the cornstarch mixture. I keep whisking while it thickens, then lower the heat to medium-low. I don’t worry if it looks a little thinner at first because it continues thickening as it simmers.
Step 7 – Finish the Meatballs in the Gravy
I put the browned meatballs back into the skillet and spoon the gravy over them. Then I let everything cook together for about 10 minutes, giving the meatballs time to finish cooking through while they soak up some of that gravy.
I check that the centers reach 160°F before I call them done. I don’t like cutting into every meatball while they’re cooking, so using a thermometer makes this part much easier for me.
Step 8 – Serve It My Favorite Way
I spoon creamy mashed potatoes onto each plate and pile the meatballs on top. Then I ladle over plenty of gravy and finish with a little fresh parsley.
I like having roasted green beans or carrots alongside it because I need something green or colorful on the plate. Still, I won’t pretend the mashed potatoes are optional in my kitchen. They are there to catch every bit of gravy.
Tips I Learned Along the Way
- I keep the meatball mixture loose: I mix only until everything comes together. Overmixing has made my meatballs tough before, so I don’t mess with the mixture more than necessary.
- I give the meatballs a short chill: I refrigerate the rolled meatballs for about 15 minutes before browning. It helps me keep their shape when I turn them in the skillet.
- I brown in batches: I know it takes a little longer, but crowded meatballs don’t brown the way I want. I leave enough room to turn each one comfortably.
- I use a nonstick skillet when I can: I find it much easier to move the meatballs around without tearing them apart.
- I don’t throw away the browned bits: I scrape them into the gravy because they add so much flavor.
- I watch the cornstarch: I add the slurry slowly instead of dumping it all in at once. That gives me more control over how thick my gravy becomes.
- I don’t panic if the gravy seems thin: I give it a little time after adding the cornstarch. It keeps thickening as it simmers.
- I make extra when I have the energy: I can freeze the raw meatballs and thaw them overnight in the refrigerator before cooking them.
- I store leftovers promptly: I keep cooked meatballs and gravy in an airtight container in the refrigerator for up to three days. I can also freeze them for up to three months.
When I Want to Make Dinner Ahead
This is one of those recipes where doing a little work early can save me a lot of effort later. I can mix and roll the meatballs a day ahead, then keep them covered in the refrigerator until I’m ready to cook them.
When I have extra ground beef, I sometimes double the meatball mixture and freeze the uncooked meatballs. I thaw them in the refrigerator overnight when I want to use them. That small bit of planning has saved me from plenty of last-minute dinner decisions.
I also like making the whole dish ahead when I know dinner is going to be hectic. The leftovers reheat well, and the gravy makes the meatballs feel just as comforting the next day. I usually add a splash of broth if the gravy has thickened more than I like after sitting in the refrigerator.
What I Love About This Dinner
For me, meatballs and gravy isn’t really a fancy meal, and that’s exactly why I like it. It feels familiar. I get tender beef, sweet softened onions, rich brown gravy, and creamy potatoes without needing a long list of complicated steps.
I especially like serving this when I want a dinner that feels substantial. A few meatballs over mashed potatoes can turn into a very filling plate, and the gravy ties everything together so I don’t feel like I need five different side dishes.
I’ve also learned that this is a recipe where patience pays off. Taking a few extra minutes to brown the meatballs properly, letting the onions soften, and slowly thickening the gravy makes the finished dish noticeably better. None of those steps are difficult. I just can’t rush all of them at once.
When I set the skillet on the table and the gravy is still bubbling around the meatballs, I know I’ve made the kind of dinner I was craving. I spoon some onto mashed potatoes, add a little parsley, and usually go back for more gravy before I’ve even finished my first serving.

Meatballs and Gravy Recipe
Description
I make tender beef meatballs with softened onions and rich brown gravy, then spoon everything over creamy mashed potatoes for a cozy, filling dinner. I love how a few simple steps turn ground beef into the kind of comforting meal that makes dinner feel special.
ingredients
Meatballs
Brown Gravy
For Serving
Instructions
Make the Meatballs
Mix the meatball mixture
I add the ground beef, finely diced onion, breadcrumbs, garlic, egg, ketchup, mustard, Worcestershire sauce, salt, pepper, and parsley to a large bowl. I gently mix everything with my hands just until the ingredients are evenly combined.I avoid overmixing because it can make the meatballs tough.Roll and chill
I roll the mixture into meatballs about 1 1/2 inches wide, making about 24 to 27 meatballs. I place them in the refrigerator for about 15 minutes before browning.The short chill helps the meatballs hold their shape when I turn them in the skillet.
Brown the Meatballs
Brown in batches
I heat the olive oil in a large nonstick skillet over medium heat. I brown about five or six meatballs at a time, turning them roughly every two minutes so they develop color around the outside. I transfer each browned batch to a plate.I leave space between the meatballs so they brown instead of steaming.
Make the Gravy
Soften the onions
I reduce the skillet heat to medium and melt the butter. I add the sliced onion and cook for about 15 minutes, stirring fairly often, until the onions are soft and lightly colored.I scrape around the skillet while the onions cook so the browned bits loosen from the bottom.Build the brown gravy
I pour in the chicken broth and beef broth, then stir in the beef bouillon, onion powder, garlic powder, and Worcestershire sauce. I scrape the browned bits from the bottom of the skillet with a silicone spatula. If I want a darker gravy, I add two or three drops of browning and seasoning sauce.The browned bits add extra savory flavor to the gravy.Thicken the gravy
I combine the cold water and cornstarch in a small container, cover it, and shake until smooth. I bring the gravy to a boil, then slowly whisk in the cornstarch slurry. I continue whisking until the gravy thickens, then reduce the heat to medium-low.I add the slurry gradually so I can control the final thickness.
Finish and Serve
Finish the meatballs in the gravy
I return the browned meatballs to the skillet and spoon the gravy over them. I let everything cook together for about 10 minutes, until the meatballs are cooked through and the centers reach 160°F.I use an instant-read thermometer to check the temperature instead of cutting into every meatball.Serve over mashed potatoes
I spoon hot, creamy mashed potatoes onto each plate, pile the meatballs on top, and ladle plenty of gravy over everything. I finish with a little fresh parsley if I have some.Roasted green beans or carrots make easy side dishes for this meal.
Nutrition Facts
Servings 6
- Amount Per Serving
- Calories 522kcal
- % Daily Value *
- Total Fat 25 gg39%
- Saturated Fat 8 gg40%
- Trans Fat 1 gg
- Cholesterol 86 mgmg29%
- Sodium 1040 mgmg44%
- Potassium 700 mgmg20%
- Total Carbohydrate 50 gg17%
- Dietary Fiber 5 gg20%
- Sugars 7 gg
- Protein 27 gg54%
- Calcium 80 mg mg
- Iron 4 mg mg
* Percent Daily Values are based on a 2,000 calorie diet. Your daily value may be higher or lower depending on your calorie needs.
Note
Nutrition is an estimate per serving and includes approximately 1 cup of mashed potatoes per serving. I can prepare the meatballs a day ahead and refrigerate them covered, or freeze uncooked meatballs and thaw them overnight in the refrigerator. Cooked meatballs and gravy can be refrigerated in an airtight container for up to 3 days or frozen for up to 3 months. If the refrigerated gravy becomes too thick, I add a small splash of broth while reheating.
