This hearty fish soup layers softened onions, leeks and garlic with carrots, celery and potatoes in olive oil, then deglazes with dry white wine and simmers with chopped tomatoes and fish stock. Bay leaf, thyme and oregano add aromatic depth. White fish and optional shrimp are added at the end and poached gently until flaky. Finish with parsley and lemon; serve with crusty bread.
The rain was hammering against the kitchen window and the power had been flickering for an hour when I decided that canned soup was simply not going to cut it. I had a bag of cod in the freezer and a sad-looking leek in the crisper drawer that needed rescuing. Forty minutes later I was sitting on the floor in front of the stove with a bowl balanced on my knee, absolutely astonished that something so simple could taste like it came from a seaside taverna.
My neighbor walked in unannounced while this was on the stove once, took one breath near the pot, and sat down at the table without being asked. She stayed for two bowls and left with the recipe scribbled on the back of a grocery receipt.
Ingredients
- 400 g white fish fillets (cod or haddock), skinless and boneless, cut into chunks: Cod is my go to because it holds its shape beautifully without turning mushy in the broth.
- 150 g shrimp, peeled and deveined (optional): Adding shrimp gives the soup a lovely sweetness and makes it feel a bit more special.
- 1 large onion, finely chopped: The quiet backbone of every good European soup base.
- 2 garlic cloves, minced: Fresh garlic makes a noticeable difference here, so skip the jarred version if you can.
- 2 carrots, sliced: They add natural sweetness and a gentle pop of color against the pale broth.
- 1 leek, cleaned and sliced: Leek gives a softer, more elegant onion flavor than you would get from shallots or spring onions.
- 2 medium potatoes, peeled and cubed: They thicken the soup slightly and make it hearty enough to stand alone as a meal.
- 2 celery stalks, diced: Celery works in the background to deepen the savory notes of the broth.
- 1 can (400 g) chopped tomatoes: A single can provides just enough acidity to brighten everything without turning this into a tomato soup.
- 1 L fish stock: Good stock is everything in this recipe, so use homemade if you have it or a quality store bought brand.
- 100 ml dry white wine: The wine lifts the whole pot and adds a layer of complexity you really can taste.
- 2 tbsp olive oil: Use a decent olive oil since it is the fat that starts the whole dish.
- 1 bay leaf, 1/2 tsp dried thyme, 1/2 tsp dried oregano: These three herbs together create a classic Mediterranean scent that fills the kitchen.
- Salt and pepper to taste: Season gradually and taste as you go, since the stock already contains salt.
- Fresh parsley, chopped, and lemon wedges for serving: A fistful of parsley and a good squeeze of lemon at the end make all the flavors sing.
Instructions
- Build the flavor base:
- Warm the olive oil in a large soup pot over medium heat, then add the chopped onion and sliced leek, stirring occasionally until everything is soft and translucent, about five minutes. You will know it is ready when the kitchen smells like a gentle Sunday afternoon.
- Wake up the vegetables:
- Toss in the garlic, carrots, celery, and cubed potatoes, letting them cook together for another five minutes so the edges soften and the garlic turns fragrant. Stir often enough that nothing catches on the bottom.
- Let the wine work:
- Pour in the white wine and let it bubble for about two minutes until it reduces slightly and the sharp alcohol smell fades. This small step is what separates a good fish soup from a great one.
- Simmer the broth:
- Add the chopped tomatoes, fish stock, bay leaf, thyme, and oregano, then bring everything to a gentle boil before reducing the heat, covering the pot, and simmering for fifteen minutes until the vegetables are fork tender. Do not rush this part because the potatoes need time to release their starch into the broth.
- Cook the fish gently:
- Slide the fish chunks and shrimp into the simmering broth and let them cook gently for five to seven minutes until the fish flakes easily with a fork and the shrimp turn pink. Resist the urge to stir vigorously because the fish is delicate and will break apart if handled roughly.
- Finish and serve:
- Season generously with salt and pepper, fish out and discard the bay leaf, then ladle into warm bowls topped with a scatter of fresh parsley and a lemon wedge on the side. Crusty bread is not optional in my house.
I have made this soup on sunny evenings with the back door open and during snowstorms with a blanket over my shoulders, and it always feels like exactly the right thing.
Choosing the Right Fish
Cod and haddock are reliable choices because they are firm enough to survive simmering and mild enough to absorb the broth. Salmon works if you want something richer and more assertive, and a handful of smoked fish can add incredible depth if you want to push the flavor further.
Making It Your Own
A pinch of chili flakes transforms the whole pot into something warming and bold, which I discovered accidentally one evening when the chili jar tipped over directly into the soup. For a creamy version, stir in a splash of heavy cream just before serving, though this obviously moves the recipe away from dairy free territory.
Storage and Reheating
This soup keeps remarkably well in the fridge overnight and often tastes even better the next day when the flavors have had time to settle and mingle. The fish will continue to absorb broth as it sits, so you may need to add a splash of water or stock when reheating.
- Store in an airtight container in the refrigerator for up to three days.
- Freeze individual portions for up to two months, though the potato texture may soften slightly.
- Reheat gently on the stove rather than in the microwave to keep the fish intact.
Some dishes you follow a recipe for, and others you simply feel your way through, and this fish soup has a way of teaching you which kind of cook you want to be. Ladle it generously, share it freely, and let the second bowl taste even better than the first.
Your Recipe Questions Answered
- → How long should the fish cook in the broth?
-
Add fish pieces to a simmering broth and poach gently for about 5–7 minutes, until opaque and flaking easily. Avoid a rolling boil to keep the texture tender.
- → Which fish work best for this soup?
-
Firm white fish such as cod, haddock or pollock hold up well. You can also use salmon or smoked fish for a deeper flavor, adjusting salt and cooking time accordingly.
- → Can I keep this dairy-free?
-
Yes—use olive oil for sautéing and skip cream. The broth from wine and stock with tomatoes and herbs provides a rich, dairy-free finish; add cream only if you want a creamier texture.
- → How can I thicken the broth without cream?
-
Mash a portion of the potatoes into the broth to naturally thicken it, or simmer uncovered a bit longer to reduce liquid. A light roux or a small slurry of cornstarch and water also works sparingly.
- → How should leftovers be stored and reheated?
-
Cool quickly and refrigerate in an airtight container for up to 2 days. Reheat gently over low heat to avoid breaking up the fish; add a splash of stock or water if the soup has thickened.
- → How do I add heat or extra flavor?
-
For spice, stir in chili flakes or a spoonful of harissa when you add tomatoes. Fresh herbs, lemon zest or a drizzle of good olive oil at the end brighten the bowl without overpowering the seafood.