Main Courses
This fish shepherd's pie recipe transforms a classic comfort dish into a light yet satisfying meal perfect for pescatarians and seafood lovers alike. The secret lies in flaky fish layered beneath a crispy potato crust that bakes to golden perfection, creating a dish that's both hearty and refined.
I developed this recipe after realizing how versatile shepherd's pie could be when adapted for fish—replacing traditional ground meat with tender cod or haddock while keeping the same comforting structure.
The foundation of this dish begins with a savory fish filling, where onions, celery, and herbs build depth before flaky fish pieces are gently folded in. A light gravy—whether tomato-based or creamy—binds everything together, ensuring each bite is rich yet balanced.
The mashed potato topping isn’t just for show; it’s the star that delivers that coveted crispy crust while staying tender inside, thanks to a precise baking technique.
What makes this recipe stand out is how it delivers restaurant-quality results with simple, approachable steps—no fancy equipment required. The layers of flavor and texture create a dish that feels indulgent yet light, perfect for weeknight dinners or meal prep.
Whether you prefer classic haddock, rich salmon, or mild cod, this recipe adapts effortlessly while keeping the flaky texture and crispy top intact.
Serve with a side of steamed green beans or a simple salad to round out the meal, or enjoy it as-is for a satisfying, one-dish wonder. The beauty of this shepherd’s pie lies in its flexibility—swap fish types, adjust the gravy, or add peas for extra color. Let’s get cooking!
Ingredients for fish shepherd's pie
Flaky fish, crispy crust, and savory layers—this pie delivers restaurant-quality comfort with simple ingredients.
| Ingredient | Amount | Notes |
|---|---|---|
| Cod Fillets 🐟 | 1 ½ lb | Skinless, boneless, flaky texture |
| Russet Potatoes 🥔 | 2 lbs | Starchy, no green spots |
| Yellow Onion 🧅 | 1 whole | Medium, finely diced |
| Celery Stalk 🌿 | 2 whole | Stringless, finely chopped |
| Garlic Cloves 🧄 | 4 cloves | Fresh, minced |
| Fresh Parsley 🌿 | ¼ cup | Chopped, flat-leaf preferred |
| Fresh Dill 🌿 | 2 tbsp | Chopped, for brightness |
| Tomato Paste 🍅 | ½ cup | Smooth, no sugar added |
| Heavy Cream 🥛 | ½ cup | Full-fat for richness |
| Unsalted Butter 🧈 | ½ cup | Cold, cubed |
| Milk 🥛 | ½ cup | Whole, for mashed potatoes |
| Sea Salt 🧂 | 1 ½ tsp | Kosher, adjust to taste |
| Ground Black Pepper 🌶️ | ½ tsp | Freshly cracked |
| Dried Thyme 🌿 | 1 tsp | Or 1 tbsp fresh |
| Olive Oil 🫒 | 2 tbsp | Extra-virgin, for sautéing |
The fish is the heart of this dish, so prioritize quality. Whole Foods or local fish markets often carry the freshest cod or haddock—look for firm, translucent fillets with a clean scent. If using frozen, thaw overnight in the fridge, never at room temperature. The potatoes should be starchy russets (like Idaho) for that perfect crispy crust. Trader Joe's carries pre-peeled russets if you're short on time, but scrubbing your own ensures no excess moisture. For the herbs, fresh dill and parsley make all the difference—Penzeys or bulk bins at natural stores are great for affordable, high-quality options. The tomato paste? Squeeze tubes from Trader Joe's or Muir Glen are my go-to—they're consistent and shelf-stable.
No fresh dill? Substitute with 1 tbsp chopped fresh parsley plus ½ tsp dried dill, but you'll lose some brightness. Short on time? Pre-chopped frozen onion and celery mixes work in a pinch, but they often contain salt, so taste before adding more. The heavy cream can be swapped for half-and-half or coconut milk for a lighter option, though the texture will differ. For the potatoes, Yukon Golds add creaminess but won't crisp as well—stick with russets for the top layer. The olive oil is non-negotiable for sautéing; avoid vegetable oil—it lacks the fruity depth that carries the flavors. If you're avoiding dairy, use coconut cream instead of heavy cream and olive oil for the mashed potatoes.
Prep the filling first, then mash the potatoes while still hot for ultimate creaminess. The pie reheats beautifully—cover loosely with foil and bake at 375°F for 20-25 minutes until the crust is golden. Store leftovers for up to 4 days in the fridge, but the crust loses crispiness after day 2. For meal prep, assemble the pie, refrigerate overnight, then bake straight from cold—this ensures the crust crisps perfectly. The filling freezes well for 3 months; just bake the potato topping fresh after thawing. To save time, par-cook the potatoes before assembling, then reheat before baking.
Why You'll Love This Recipe
- One-Pan Magic: I swear by this when I’m too tired to scrub a million dishes. The potatoes go in raw, the cod sits on top—just a quick bake, and boom, dinner’s done. No fuss, no stress, just golden perfection.
- Garlic-Kissed Comfort: That slow-cooked onion and celery base, simmered with garlic until it’s practically caramelized? It’s the kind of flavor that makes you forget it’s "healthy." The cod stays tender, the mashed potatoes? Buttery clouds.
- Leftovers That Don’t Suck: Honestly, this is my go-to for meal prep. The pie reheats like a dream—crispy top, creamy middle—so I can make a big batch on Sunday and still have lunch for Wednesday. (Yes, even on a Tuesday night.)
- Budget-Friendly Luxury: Cod’s cheaper than you think, and potatoes stretch forever. I’ll be real: it feels like a fancy restaurant dish without the price tag. Plus, the veggies bulk it up so you’re not just eating fish—it’s a full, satisfying plate.
Step-by-step instructions for fish shepherd's pie
Here's how to create a restaurant-quality fish pie with a golden crust and tender layers.
Prepare the Potato Topping
Begin by peeling the 2 lbs russet potatoes and cutting them into even 1-inch chunks. Place them in a large pot of cold, salted water (add about 1.5 tsp of sea salt) and bring to a boil over high heat. Once boiling, reduce to medium-high and cook for 12-15 minutes until the potatoes are fork-tender and easily pierced with a knife.
Drain the potatoes thoroughly and immediately return them to the pot. Add the 0.5 cup unsalted butter, 0.5 cup milk, 0.5 tsp ground black pepper, and 1 tsp dried thyme. Mash until completely smooth, then spread the mixture evenly on a parchment-lined baking sheet to cool slightly. This cooling step prevents the potato topping from becoming soggy when baked later.
Cook the Savory Fish Filling
Heat 2 tbsp olive oil in a large skillet over medium heat. Add the finely diced 1 whole yellow onion and chopped 2 whole celery stalks, cooking for 5-6 minutes until softened. Add the minced 4 cloves garlic and cook for another 30 seconds until fragrant.
Push the vegetables to one side of the skillet and add the 1.5 lb cod fillets. Cook for 2-3 minutes per side until the fish is opaque and flakes easily with a fork. Remove the fish from the skillet and set aside. In the same skillet, stir in the 0.5 cup tomato paste and cook for 1 minute to deepen its flavor.
Combine and Assemble the Pie
Return the cooked fish to the skillet and add the 0.5 cup heavy cream, chopped 0.25 cup fresh parsley, and 2 tbsp fresh dill. Stir gently to combine, then transfer the mixture to a greased 9x13-inch baking dish. Spread it evenly across the bottom, creating a smooth layer.
Spoon the mashed potato mixture over the fish filling, spreading it evenly to create a thick, even layer. Use a fork to create decorative ridges in the potato topping for better browning. This step ensures the top becomes crispy while keeping the filling moist.
Bake to Golden Perfection
Preheat your oven to 400°F. Bake the fish pie for 25-30 minutes until the top is golden brown and the filling is bubbling around the edges. The potato topping should be crispy to the touch, with no soft spots remaining.
Remove the pie from the oven and let it rest for 10 minutes before serving. This resting period allows the filling to set slightly, making it easier to slice and serve. Cut into squares and enjoy the contrast of crispy potato topping over tender, flavorful fish filling.
Pro Tips For Making Fish Shepherd'S Pie
- Parboil Potatoes First: Toss peeled russets into boiling water for 5 minutes before roasting—this guarantees even cooking and a creamy texture without gummy spots. I learned this the hard way when my first batch turned out waxy and sad, no matter how long I baked them.
- Sear Cod Skin-Down: Lay the cod fillets skin-side down in a hot pan for 2-3 minutes before flipping—this crisps the skin and keeps the flesh from falling apart. Skip this, and you’ll end up with a mushy mess that blends into the filling instead of holding its shape.
- Sweat Onions Low and Slow: Cook the onions and celery at medium-low heat for 10 minutes until they’re soft and translucent, not browned—this builds flavor without bitterness. After burning two batches, I finally realized high heat just burns them before they release their sweetness.
- Press Potatoes Hard: Before mashing, press the cooked potatoes through a ricer or press them with a potato masher—this gives you a silky, lump-free topping that sticks together. Mashing with a fork leaves you with gluey, uneven texture, and no one wants that under their pie.
Troubleshooting this recipe
Soggy Potato Topping
If your potato crust turns out soggy instead of crispy, the issue is usually excess moisture. I’ve found that cooling the mashed potatoes before assembling prevents this—spread them on a baking sheet for 15-20 minutes to dry slightly.
Also, ensure your baking dish is well-greased (I use butter or olive oil spray) so the potatoes don’t stick and release moisture. Another trick? Add a ¼ cup of breadcrumbs to the mashed potatoes before topping the pie—this adds texture and absorbs excess liquid. 🥔
Fish Too Dry
Overcooking the fish is a common mistake that leads to dry, crumbly texture. Cod and haddock cook quickly—2-3 minutes per side is ideal for 1-inch thick fillets. Use a meat thermometer to check for 145°F internal temperature; any higher and the fish will turn rubbery.
If your fish is already cooked, try adding a splash of heavy cream or fish stock to the filling before baking to restore moisture. 🐟
Filling Not Holding Shape
The filling may slide around or collapse if the mashed potatoes aren’t spread evenly or if the pie isn’t baked long enough. I recommend pressing the potato topping firmly with a spatula to create a thick, even layer—about ½ inch thick.
For extra stability, chill the assembled pie in the fridge for 30 minutes before baking. This helps the filling set before the crust forms. 🧈
Uneven Baking
Hot spots or undercooked centers happen when the oven isn’t calibrated or the pie isn’t placed correctly. Rotate the baking dish halfway through baking to ensure even heat distribution. If your oven runs hot, reduce the temperature to 375°F and add 5-10 extra minutes to the bake time.
A light-colored baking dish (like ceramic or glass) also helps reflect heat more evenly than dark metal pans. 🌡️
Gravy Too Thin
A runny gravy can make the filling watery and dilute the flavors. To thicken it, mix 1 tbsp cornstarch with 1 tbsp cold water, then stir it into the simmering gravy until it reaches a pudding-like consistency.
Alternatively, simmer the gravy uncovered for 5-10 extra minutes to reduce it naturally. For a richer texture, whisk in 1 tbsp cold butter at the end—this adds body without thinning the sauce. 🥄
Preventing Fish Breakdown
Fish can fall apart if handled roughly or overcooked. To keep it intact, poach the fillets in simmering water with lemon slices for 3-4 minutes before adding them to the filling. This method keeps the fish tender and flaky while reducing the risk of it disintegrating during assembly.
If using frozen fish, thaw it overnight in the fridge—never at room temperature—to avoid uneven cooking. 🧊
Nutrition facts
Frequently asked questions
Can I use any type of fish for this recipe?
Flaky white fish works best—cod, haddock, or salmon are perfect choices. Avoid firm fish like tuna or swordfish, as they won't break down into tender pieces when baked. For a budget-friendly option, try tilapia, though it may have a slightly milder flavor.
How do I make this dish vegetarian?
Swap the fish for chickpeas or lentils (cooked until tender) mixed with mushrooms and walnuts for texture. Use vegetable broth instead of fish stock in the gravy. The potato topping and tomato base remain the same, keeping the comforting structure intact.
Can I prepare this ahead of time?
Assemble the pie up to 24 hours ahead and refrigerate uncovered. Bake straight from the fridge (add 5-10 extra minutes to the bake time). For make-ahead meals, freeze the assembled pie (without baking) for up to 1 month—thaw overnight in the fridge before baking.
Why does my potato topping get watery?
Excess moisture from uncooled potatoes or undercooked fish causes this. Always cool mashed potatoes before topping and ensure fish is fully cooked (no translucent centers). For extra insurance, sprinkle breadcrumbs on the potato layer before baking to absorb any steam.
What sides pair well with this dish?
Simple greens like asparagus or green beans balance the richness, while a crisp salad with lemon vinaigrette adds brightness. For a heartier meal, serve with buttery peas or roasted Brussels sprouts. The pie stands alone but benefits from fresh, light accompaniments.