Soups & Stews
This best fish soup recipe in the world with potatoes delivers the velvety broth and hearty potatoes that make it a global comfort classic. The secret lies in slow-simmered fish stock infused with aromatic vegetables and herbs, creating a rich foundation that transforms simple potatoes into the perfect textural contrast.
I developed this version after years of testing—balancing traditional techniques with modern flavor profiles to achieve restaurant-quality results at home.
The magic begins with a deep, flavorful broth made from fish bones and aromatics like onions, carrots, and celery, simmered until every nuance of umami develops. White fish fillets are added just before serving to maintain their delicate texture, while firm potatoes absorb the broth’s richness without turning mushy.
The result is a soup that’s both nourishing and elegant, with each spoonful offering layers of savory, herbal, and slightly sweet notes.
What sets this recipe apart is its versatility—it works as a light yet satisfying main course or a comforting side, and the broth freezes beautifully for future meals. The potatoes provide hearty substance, while the fish adds a touch of luxury.
Whether you're serving it to a crowd or enjoying a quiet dinner, this soup delivers on its promise of being the best you’ve ever tasted.
Pair it with crusty bread to soak up every last drop of that velvety broth, or serve with a simple green salad for balance. The recipe scales effortlessly, making it perfect for weeknight dinners or special occasions alike.
Let’s get started on creating a bowl of warmth and flavor that feels like a hug in soup form.
Ingredients for best fish soup recipe in the world with potatoes
Velvety broth, hearty potatoes, and delicate fish fillets—this is comfort food at its finest.
| Ingredient | Amount | Notes |
|---|---|---|
| White Fish Bones 🐟 | 2 cups | From head, frames, or fillet scraps |
| Yellow Onions 🧅 | 2 whole | Chopped into 1/2-inch pieces |
| Carrots 🥕 | 3 medium | Peeled and cut into 1-inch chunks |
| Celery Stalks 🧄 | 3 whole | Cut into 1-inch pieces |
| Garlic Cloves 🧄 | 6 cloves | Smashed, not minced |
| Russet Potatoes 🥔 | 2 lb | Cut into 1-inch cubes (peeled) |
| White Wine 🍷 | 1 cup | Dry variety like Sauvignon Blanc |
| Fish Stock 💧 | 4 cups | Homemade or quality store-bought |
| White Fish Fillets 🐟 | 1 ½ lb | Cod, haddock, or halibut preferred |
| Fresh Dill 🌿 | ¼ cup | Chopped, stems removed |
| Fresh Parsley 🌿 | 0.15 cup | Chopped, for garnish |
| Lemon Juice 🍋 | 2 tbsp | Freshly squeezed |
| Olive Oil 🫒 | ¼ cup | Extra-virgin for richness |
| Salt 🧂 | 1 ½ tsp | Diamond Crystal preferred |
| Black Peppercorns 🌶️ | ½ tsp | Freshly cracked |
The fish bones are where the magic happens. Save yours—heads, frames, and scraps all work. If you don't have any, Trader Joe's sells pre-made fish bones for soup, or ask your fishmonger for the scraps. The potatoes? Russets are key—they hold their shape better than waxy varieties. For the broth, homemade is ideal, but Pacific Foods or Imagine brands work in a pinch. The white wine adds brightness, so don't skimp—whatever's open in your fridge (even boxed) will do the trick.
No fish bones? Extra fish stock with a splash of soy sauce gets you close. Fresh dill is ideal, but dried at one-third the amount works too. The carrots can be baby carrots if that's what's in the fridge—no need to peel if you're in a hurry. For the fish fillets, cod or haddock stay flaky when cooked gently, but halibut holds up better if you prefer firmer texture. The lemon juice is non-negotiable—freshly squeezed brightens everything up. If you're short on time, pre-cut potatoes from the grocery store save 10 minutes of chopping.
This soup tastes even better the next day as flavors meld. Store leftovers in the fridge for 4-5 days or freeze for 3 months. I always make a double batch—broth freezes beautifully for quick meals later. For serving, I like toasting crusty sourdough to dip in. The potatoes keep their shape best if you add them 20 minutes before serving, but honestly, they taste just as good reheated.
Why You'll Love This Recipe
- Soup in 20 Minutes: The fish bones simmer into a rich broth while you chop—no fancy techniques, just patience. I swear by the onion-carrot-celery combo (the holy trinity of flavor) that builds depth in half the time.
- Umami Bomb: That first sip? The fish bones release a savory punch that turns water into gold. Honestly, it’s the secret weapon—no fancy fish, just bones doing the heavy lifting with garlic and onions.
- Weeknight Workhorse: Cold leftovers taste even better the next day, especially with crusty bread. Between us, this is my go-to when I’m exhausted but still need to feed the family—zero stress, all comfort.
- Budget Magic: A whole fish costs less than takeout, and you use every bit—bones, flesh, even scraps. My daughter picks out the potatoes first, but still asks for seconds because it’s that good. (Yes, even on a Tuesday night.)
Step-by-step instructions for velvety fish soup with potatoes
This soup delivers restaurant-quality depth with every spoonful—rich, flavorful, and perfectly balanced.
Build the Flavor Base with Fish Bones and Aromatics
Heat the 0.25 cup olive oil in a large Dutch oven over medium-high heat. Add the 2 cups white fish bones and cook for 5 minutes, stirring occasionally, until they begin to brown and release their oils. This step unlocks the maximum flavor from the bones.
Add the 2 whole yellow onions, 3 medium carrots, 3 whole celery stalks, and 6 cloves garlic cloves. Stir and cook for 8-10 minutes until the vegetables soften and the onions turn translucent. The mixture should smell deeply aromatic—this is your foundation. If the vegetables start to stick, add ¼ cup water to deglaze and scrape up any browned bits from the bottom of the pot.
Develop the Broth with Wine and Stock
Pour in the 1 cup white wine and let it simmer for 3-4 minutes until it reduces by half and the alcohol cooks off. You'll smell the wine's acidity mellowing into something more complex. Add the 4 cups fish stock and bring the mixture to a gentle boil.
Once boiling, reduce the heat to low and add the 2 lb russet potatoes. Cover and simmer for 15-20 minutes until the potatoes are fork-tender. The broth should be deeply infused with flavor—this is where the magic happens. If the broth looks too thin, uncover and simmer for another 5 minutes to reduce slightly.
Finish with Fish and Fresh Herbs
Gently add the 1.5 lb white fish fillets to the simmering soup. They should float just below the surface. Cover and cook for 8-10 minutes—you're looking for the fish to turn opaque and flake easily when tested with a fork. Overcooking will turn it rubbery, so keep an eye on it.
Stir in the 0.25 cup fresh dill and 0.5 tsp black peppercorns, then remove from heat. Let the soup sit for 5 minutes to allow the fish to absorb the flavors. The broth should be velvety, the potatoes tender, and the fish perfectly cooked.
Brighten and Serve with Lemon and Parsley
Just before serving, stir in the 2 tbsp lemon juice and 1.5 tsp salt. The lemon cuts through the richness, balancing the soup beautifully. Taste and adjust the seasoning—you might need a pinch more salt or a splash of lemon juice depending on your preferences.
Ladle the soup into bowls and garnish with the 0.15 cup fresh parsley. Each spoonful should deliver a perfect harmony of flavors—creamy potatoes, delicate fish, and a broth so rich it feels like a hug in a bowl. Serve immediately while warm, and enjoy the ultimate comfort in every bite.
Pro Tips For Making Best Fish Soup Recipe In The World With Potatoes
- CRISP THE VEGETABLES FIRST: Slice onions, carrots, and celery into even ¼-inch pieces—no need for perfection, just consistency—and sweat them in oil over medium heat until they’re just tender, not browned. I used to rush this step, but taking the extra 5 minutes keeps the soup from tasting bitter later. (Yes, even if you're impatient like me.)
- TOSS THE FISH BONES: Rinse the white fish bones thoroughly under cold water to remove any slime or blood, then pat them very dry with paper towels before roasting. Wet bones won’t crisp in the oven, and you’ll miss out on that deep, nutty flavor that makes the broth sing. Trust me, this isn’t the prettiest method, but it’s the tastiest.
- LOW AND SLOW FOR BROTH: Once the fish bones are roasted and the vegetables are sweated, add everything to the pot with enough water to cover—about 8 cups—and bring to a gentle simmer. Then, turn the heat down to the lowest setting possible and let it bubble barely for at least 45 minutes. Skipping this step means a cloudy, weak broth, and nobody wants that.
- POTATOES LAST, NOT FIRST: Add the potatoes after the broth has simmered for 30 minutes, not at the start. They’ll absorb less of the precious fish flavor and stay creamy instead of turning to mush. Cut them into 1-inch chunks—big enough to hold shape but small enough to cook through in 10-12 minutes. (Your future self will thank you.)
Flavor customization for this dish
Herbal Infusions
Swap out the dill for fresh tarragon or thyme to add a more sophisticated herbal note. I love using 1 tbsp fresh tarragon with a pinch of sugar to balance its slightly bitter edge—it pairs beautifully with the lemon.
For a Mediterranean twist, add 1 sprig rosemary while simmering the broth, then remove before serving. The aroma alone elevates the soup to restaurant-quality. 🌿
Spice Variations
Add ½ tsp smoked paprika when sautéing the aromatics for a subtle smoky depth, or stir in ½ tsp ground cumin with the potatoes for an earthy warmth.
For heat lovers, toss in 2-3 thinly sliced Thai chili peppers with the fish—just remove them before serving if you prefer milder heat. I find ½ tsp ground coriander adds a bright citrusy note that complements the lemon perfectly. 🌶️
Creamy Upgrades
For a velvety texture, stir in ½ cup heavy cream or ½ cup coconut milk during the final 5 minutes of cooking. If you prefer a lighter option, blend ½ cup of the broth with ¼ cup Greek yogurt and return it to the pot.
For a dairy-free version, use ¼ cup cashew cream (blend soaked cashews with water). The creaminess enhances the potatoes while keeping the fish delicate. 🥛
Umami Boosters
Enhance the broth’s depth by adding 1 tbsp soy sauce or 1 tsp fish sauce when deglazing with wine. For a vegetarian-friendly boost, use 1 tbsp miso paste (dissolved in a splash of water) instead.
I also love adding 1 slice of toasted sourdough to the broth while simmering—it infuses the liquid with nutty, toasty notes. Remove it before serving to avoid chunks. 🧂
Potato Swaps
Try Yukon Gold potatoes for a creamier texture or sweet potatoes for natural sweetness that balances the broth’s acidity. For a rustic touch, use fingerling potatoes (halved lengthwise) and add them 10 minutes before serving.
If you prefer a lighter potato, red skin potatoes hold their shape while adding a subtle earthy flavor. 🥔
Fish Substitutions
Replace cod with shrimp (add 10 minutes before serving) or scallops (sear them first for extra flavor). For a seafood medley, use ½ lb shrimp and ½ lb cod together.
If you love texture, try 1 lb mussels (cleaned and steamed in the broth for 5 minutes before adding fish). The broth’s richness complements all these options beautifully. 🦐
Nutrition facts
Frequently asked questions
Can I make this fish soup with frozen fish instead of fresh?
Use 1.5 lb frozen white fish fillets (like cod or haddock) and thaw them overnight in the refrigerator. For best results, pat them dry before adding to the soup and cook for 6-8 minutes instead of 8-10 minutes to prevent overcooking. The texture will be just as tender when handled gently.
How do I adjust the recipe for a vegetarian version?
Replace the fish bones with 2 cups vegetable broth and add 1 tbsp soy sauce or 1 tsp miso paste for umami depth. Use 1.5 lb firm tofu (pressed and cubed) or mushrooms instead of fish, and simmer for 10-12 minutes to absorb the flavors. The potatoes and broth will still shine!
Why do my potatoes turn mushy in fish soup?
Mushy potatoes usually mean overcooking or the wrong type. Use Russet or Yukon Gold potatoes (cut into 1-inch cubes) and add them 15-20 minutes before serving. For extra firmness, parboil them for 5 minutes before adding to the soup. Also, avoid stirring them constantly—they soften best when left undisturbed.
Can I make this soup in an Instant Pot or pressure cooker?
Yes! Sauté the aromatics and fish bones first, then add wine and stock. Cook on high pressure for 5 minutes after adding potatoes, then quick-release. Add fish fillets during the final 8 minutes of cooking. The broth will be even more concentrated—just reduce it slightly on the stovetop afterward if needed.
What’s the best way to reheat leftovers?
Gently reheat on the stovetop over low heat with a splash of water or broth to restore creaminess. For the microwave, cover with a damp paper towel and heat in 30-second intervals, stirring between each. Avoid boiling—this can turn the fish rubbery. The soup tastes even better the next day as flavors meld!
