I never thought I’d find a way to make shepherd’s pie work with my Whole30 journey. Growing up, my mom’s version was loaded with cheese, butter, and those instant mashed potatoes we all secretly loved in the 90s.
But here’s the thing – sometimes the simplest switches make the biggest difference. By swapping regular potatoes for cauliflower and ditching the dairy, I discovered a comfort food that doesn’t leave me feeling heavy or missing my old eating habits. Even my kids, who usually run at the sight of anything “healthy,” ask for seconds of this one.

Why You’ll Love This Shepherd’s Pie
- Diet-friendly comfort food – This Whole30 compliant version gives you all the cozy comfort of traditional shepherd’s pie without any dairy, grains, or processed ingredients.
- Nutrient-rich ingredients – Packed with grass-fed beef, bone broth, and plenty of vegetables, this dish delivers serious nutrition while still tasting indulgent.
- Make-ahead friendly – You can prepare this dish in advance and reheat it when needed, making it perfect for busy weeknight dinners or meal prep.
- One-dish meal – With protein, vegetables, and a satisfying potato topping all in one casserole, you won’t need to worry about making side dishes.
- Family-approved – The familiar flavors and hearty texture make this a hit with both kids and adults, even if they’re not following Whole30.
What Kind of Ground Beef Should I Use?
For shepherd’s pie, grass-fed ground beef with an 85/15 lean-to-fat ratio hits the sweet spot between flavor and texture. While you could use leaner meat like 90/10, having that bit of extra fat helps keep the filling moist and adds more flavor to your dish. Regular ground beef works too, but grass-fed tends to have a richer taste and more nutrients. If you’re at the store, look for meat that’s bright red in color and feels firm but not hard – and don’t worry if you need to substitute ground bison or lamb, as both make excellent alternatives in this classic comfort dish.

Options for Substitutions
Since this is a Whole30 recipe, let’s look at some compliant swaps that keep this dish on track:
- Ground beef: You can swap the ground beef for ground lamb (which would make it a traditional shepherd’s pie), ground turkey, or ground chicken. Just note that poultry will give you a lighter flavor.
- Brussels sprouts: Not a fan of Brussels sprouts? Try using chopped green beans, diced zucchini, or cauliflower florets instead. Cook them the same way as directed for the sprouts.
- Russet potatoes: You can use sweet potatoes for a different spin, or try cauliflower for an even lower-carb version. If using cauliflower, make sure to drain it really well after cooking to avoid a watery topping.
- Coconut milk: While coconut milk is ideal for Whole30, you can use almond milk mixed with 2 tablespoons of cashew butter for a creamy texture. Just make sure both are compliant with no added sugars.
- Ghee: You can replace ghee with coconut oil or olive oil, though ghee gives the best buttery flavor while staying Whole30 compliant.
- Nutritional yeast: If you don’t have nutritional yeast, you can skip it – it adds a nice savory flavor but isn’t essential to the recipe’s success.
Watch Out for These Mistakes While Cooking
The biggest challenge when making Whole30 Shepherd’s Pie is ending up with watery filling, which can happen if you don’t let the meat mixture simmer long enough to reduce the liquid – make sure to cook until most of the moisture has evaporated, usually about 10-12 minutes. A common mistake with the potato topping is not draining and drying the potatoes thoroughly after boiling, which can lead to a gummy rather than fluffy mash – let them steam dry for a few minutes in the colander before mashing. To prevent a bland final product, don’t skimp on seasoning each layer separately – the meat, vegetables, and potato topping should each be well-seasoned before assembling, and remember to taste as you go. For the best texture, avoid overworking the potatoes when mashing, and make sure your coconut milk is well-blended and at room temperature before adding it to prevent any separation or graininess.

What to Serve With Shepherd’s Pie?
Since this Whole30 shepherd’s pie is already a complete meal with meat, vegetables, and potatoes, you’ll want to keep the sides simple and light. A fresh green salad with a basic olive oil and lemon dressing makes the perfect companion – try mixing tender butter lettuce with peppery arugula for some variety. If you’re looking to add more vegetables, roasted asparagus or steamed green beans seasoned with just a little salt and pepper work really well on the side. For those who aren’t strictly following Whole30, a slice of crusty grain-free bread can be nice for soaking up any extra sauce from the pie.
Storage Instructions
Keep Fresh: This Whole30 Shepherd’s Pie is perfect for meal prep! Place any leftovers in an airtight container and keep them in the fridge for up to 4 days. The flavors actually get better as they meld together over time, making it a great make-ahead dinner option.
Freeze: You can freeze this cozy dish for up to 3 months. Either freeze the whole pie or portion it into individual servings in freezer-safe containers. Just make sure to let it cool completely before freezing to prevent ice crystals from forming. Pro tip: wrap it well to prevent freezer burn!
Reheat: When you’re ready to enjoy your shepherd’s pie again, heat it in a 350°F oven for about 20-25 minutes if thawed, or 45 minutes if frozen. For single servings, the microwave works well too – just heat in 1-minute intervals until it’s heated through. Add a splash of bone broth if the mixture seems dry.
| Preparation Time | 20-30 minutes |
| Cooking Time | 40-60 minutes |
| Total Time | 60-90 minutes |
| Level of Difficulty | Medium |
Estimated Nutrition
Estimated nutrition for the whole recipe (without optional ingredients):
- Calories: 2200-2500
- Protein: 150-170 g
- Fat: 120-140 g
- Carbohydrates: 200-220 g
Ingredients
For the beef and vegetable base:
- 1 tsp minced fresh rosemary
- 1 medium chopped onion
- 1 tbsp ghee
- 1.5 lb ground beef (grass-fed recommended for flavor)
- 2 minced garlic cloves
- 2.5 tbsp tomato paste
- pepper to taste
- 1.5 cups chopped brussels sprouts
- 3/4 cup bone broth (I use Kettle & Fire)
- sea salt to taste
- 1 cup diced carrots (about 1/4-inch dice)
- 1 tsp minced fresh thyme
For the mashed potato topping:
- 2/3 cup full-fat coconut milk (canned, unsweetened)
- 3 tbsp nutritional yeast (adds a cheesy flavor)
- 3 tbsp organic ghee
- 2.5 lb russet potatoes (peeled and cut into equal chunks)
- salt to taste
- pepper to taste
For the topping:
- chopped fresh parsley (for garnish)
Step 1: Prepare the Potatoes
Heat a 3-quart pot filled with water, sprinkle with salt, and bring it to a boil.
Add 2-inch pieces of potato to the boiling water and cook until they are very soft.
Once cooked, drain the potatoes and return them to the pot.
Set the heat to low, then add ghee and coconut milk.
Mash the mixture with a potato masher over very low heat until smooth.
Turn off the heat and add nutritional yeast, salt, and pepper.
For creamier potatoes, use an immersion blender directly in the pot.
Step 2: Preheat the Oven
Preheat your oven to 375 degrees Fahrenheit.
This will ensure it’s ready for the final baking step once the beef and vegetable mixture is prepared.
Step 3: Cook the Beef
In a deep, oven-proof skillet (approximately 10 inches in size), add the beef and sprinkle with sea salt.
Brown the beef over medium-high heat, breaking up any lumps with a spoon.
Once browned, remove the beef from the skillet using a slotted spoon and set it aside on a plate.
Step 4: Cook the Vegetables
Adjust the skillet heat to medium and add Brussels sprouts and carrots.
Stir to coat and cook for about 2 minutes.
Then, add the onions and continue cooking until softened.
Next, add garlic and a pinch of sea salt to the vegetables.
Stir and cover the skillet briefly to soften the carrots until they are fork-tender, if necessary.
Step 5: Combine Beef and Vegetables
Add the remaining ingredients for the beef mixture to the skillet and stir to combine.
Return the cooked beef to the skillet, stirring to coat.
Allow the mixture to simmer for about 2 minutes to thicken the sauce and blend flavors.
Step 6: Assemble and Bake
Spread all the mashed potatoes evenly over the beef mixture in the skillet, smoothing the top with a spoon or spatula.
Sprinkle with parsley, then position the skillet on a large baking sheet to catch any bubbling sauce.
Bake in the preheated oven for about 20 minutes, until the sauce is bubbling and the top begins to turn light brown.
Step 7: Serve and Enjoy
Once baked, remove the skillet from the oven and allow it to sit for about 10 minutes before serving.
Serve hot and enjoy your delicious dish!