Portuguese Fish Soup with Tomato, Potatoes, and Herbs

Updated November 4, 2026

Total time
1 hr
prep 25 min · cook 35 min
Serves
6
portions as written
Safe temperature (USDA)
145°F / 63°C
check the thickest piece

Jump to recipe

Portuguese Fish Soup with Tomato, Potatoes, and Herbs

Portuguese fish soup, often called sopa de peixe, is a coastal-style soup of tender fish, potatoes, tomatoes, and herbs simmered in a savory broth. This rustic version keeps the ingredients in visible, hearty pieces; Portuguese cooks also make smoother or more elaborate family and regional versions.

Ingredients

  • 3 tablespoons (45 ml) extra-virgin olive oil
  • 1 medium yellow onion, finely chopped, about 1 cup (150 g)
  • 1 medium red bell pepper, diced, about 1 cup (150 g)
  • 4 garlic cloves, minced, about 12 g
  • 1 teaspoon (2 g) sweet paprika
  • 1 can crushed tomatoes, 28 ounces (794 g)
  • 6 cups (1.4 L) fish stock, preferably low-sodium
  • 1 pound (450 g) waxy potatoes, such as Yukon Gold or red potatoes, cut into ¾-inch (2 cm) cubes
  • 1 bay leaf (about 0.2 g)
  • 1 teaspoon (6 g) fine salt, plus more to taste
  • ½ teaspoon (1 g) freshly ground black pepper
  • 1½ pounds (680 g) firm white fish fillets, such as cod, haddock, hake, or pollock, cut into 1½-inch (4 cm) chunks
  • ½ cup (15 g) roughly chopped flat-leaf parsley, divided
  • ¼ cup (10 g) chopped cilantro, optional
  • 1 lemon, cut into wedges, about 2 tablespoons (30 ml) juice if squeezed

Instructions

  1. Prepare the ingredients. Chop the onion and pepper, mince the garlic, and cut the potatoes into evenly sized cubes so they cook at roughly the same rate. Check the fish carefully for pin bones and cut it into generous chunks. Pat the fish dry and keep it refrigerated while you start the soup. If your stock is salted, hold back some of the listed salt until the end.
  2. Soften the aromatics. Heat the olive oil in a large, heavy pot or Dutch oven over medium heat. Add the onion and bell pepper and cook for about 6 minutes, stirring now and then, until softened but not browned. Stir in the garlic and paprika and cook for 30 seconds, just until fragrant. Garlic and paprika can turn bitter if left to scorch, so keep them moving and lower the heat if needed.
  3. Build the broth. Add the crushed tomatoes, fish stock, bay leaf, salt, and black pepper. Stir, bring the mixture to a gentle boil, then reduce the heat and simmer uncovered for 5 minutes. This short simmer blends the tomato and stock without reducing the broth too much. Taste a spoonful now; it should be pleasantly savory, but wait to make final salt adjustments until the potatoes and fish are in.
  4. Cook the potatoes. Add the potato cubes and bring the soup back to a steady, gentle simmer. Cook uncovered for 15 to 18 minutes, stirring carefully once or twice, until the potatoes are nearly tender when pierced with a knife. Keep the liquid at a simmer rather than a hard boil. Vigorous bubbling can break up the potatoes and make the broth cloudy, while oversized pieces may still be firm in the middle.
  5. Poach the fish gently. Lower the heat so the broth barely simmers, then nestle in the fish chunks. Cook for about 5 to 8 minutes, depending on their thickness, turning them gently once if needed. Check the thickest piece with a food thermometer: the USDA FSIS safe minimum internal temperature for fish is 145°F (63°C). The flesh should also look opaque and separate easily into flakes. Avoid stirring vigorously, which can shred the fish before serving.
  6. Finish and serve. Remove the bay leaf. Stir in about half of the parsley and all the cilantro, if using. Taste and adjust the salt, pepper, or lemon to suit the broth. Let the pot stand off the heat for 2 minutes so the flavors settle, then ladle into warm bowls with the remaining parsley and lemon wedges. Serve while the fish is moist and the potatoes are hot.

Tips

  • Choose fish that holds together. Cod, hake, haddock, and pollock are good options because their mild flavor works with tomato broth and their thicker pieces are easy to portion. Very delicate fish can still be used, but add it in larger pieces and handle the soup gently. If buying frozen fish, thaw it in the refrigerator and pat it dry before adding it.
  • Use good stock, but taste before salting. Fish stock gives the soup its coastal character, but a low-sodium seafood stock is an easy supermarket choice. If fish stock is unavailable, use vegetable stock or a mild chicken stock; either changes the flavor, making it less distinctly seafood-forward. Avoid strongly flavored stocks that compete with the fish.
  • Keep the simmer gentle. Once the fish goes into the pot, a rolling boil can make the pieces fall apart and turn the broth cloudy. A barely bubbling surface cooks the fish more evenly. Cut potatoes to a similar size, too, so you do not have to keep cooking the fish while waiting for a few large potato pieces to soften.
  • Make the broth your own. Add lemon gradually rather than pouring in all the juice at once. A squeeze brightens the tomato and seafood, while too much can make the broth sharply sour. If you like a little heat, add a pinch of red pepper flakes with the paprika; this is an optional variation, not a required part of the soup.

Serving Suggestions

Serve Portuguese fish soup as a filling main course, with crusty bread for dipping into the tomato broth. A simple green salad dressed with olive oil and vinegar makes a fresh contrast, while sliced oranges or other fruit can finish the meal without adding another rich dish. Set lemon wedges on the table so each person can brighten their bowl to taste.

For a more substantial table, offer boiled rice on the side and let diners spoon the broth and fish over it. Keep the rice separate until serving; stirring it into the pot makes the soup thicker and causes leftovers to absorb much of the liquid. A little extra chopped parsley at the table adds a fresh herbal note. The soup is satisfying on its own, so extra sides are optional rather than necessary.

Variations

There is no single version of Portuguese fish soup found in every home. Some versions are made with a wider mix of seafood, and others are strained or partly blended into a smooth base before the fish is added. This recipe is a rustic, chunky approach that is practical for a weeknight and easy to adapt to the fish available.

For a mixed-seafood version, replace up to 8 ounces (225 g) of the white fish with peeled, deveined shrimp or cleaned mussels. Add shrimp near the end and cook until opaque and firm; add mussels earlier, cover the pot, and cook until they open, discarding any that remain closed. Keep the fish-temperature guidance in mind for fish, and do not rely on the appearance of one seafood ingredient to confirm another is cooked. If you add shellfish, the soup will taste sweeter and more briny.

For a smoother bowl, remove the potatoes and fish when cooked, discard the bay leaf, and carefully blend some or all of the tomato broth. Return the potatoes and fish without blending them. This gives the soup a thicker, more cohesive base while preserving pieces to eat. For a lighter version, use an extra cup (240 ml) of stock and reduce the potatoes to ¾ pound (340 g); the result will be brothier, not creamy.

If you cannot find fresh cilantro or prefer its flavor less prominent, leave it out and use the full ½ cup (15 g) of parsley. For a slightly smoky flavor, use smoked paprika in place of sweet paprika, but start with the same 1 teaspoon (2 g); smoked paprika changes the character of the broth, so it is best not to add a large amount at once. These substitutions keep the method the same.

Storage and Reheating

Cool leftovers promptly and refrigerate them within 2 hours, preferably in shallow, covered containers. The soup keeps for 3 to 4 days in the refrigerator. Fish can become firmer and potatoes may soften as they sit, but the broth remains useful for another meal. If you expect leftovers, you can also cook only the amount of fish you plan to serve and add fresh fish to the remaining simmering broth the next day.

Reheat only the portion you need in a saucepan over low to medium-low heat, stirring gently and bringing it to a steady simmer. Reheat leftovers to 165°F (74°C), checking with a food thermometer, as USDA guidance recommends. Avoid repeated cooling and reheating of the whole pot. A microwave also works: use a covered microwave-safe bowl, pause to stir gently, and check the temperature in more than one spot.

For longer storage, freeze the soup in airtight containers for about 2 to 3 months for best quality. The potatoes may turn softer or grainier after thawing, and fish can lose some of its delicate texture. Thaw it in the refrigerator and reheat gently to 165°F (74°C). If you know you will freeze portions, the best texture usually comes from freezing the tomato broth and potatoes before adding the fish, then cooking fresh fish in the reheated soup.

Frequently Asked Questions

What fish is best for Portuguese fish soup?
Choose a firm, mild white fish that can be cut into chunks, such as cod, hake, haddock, or pollock. Hake is common in Portuguese seafood cooking but may be harder to find in some shops; cod or haddock is a practical substitute, with a similarly mild flavor and sturdy texture. Avoid thin pieces that are likely to overcook before the potatoes are ready.

Can I use frozen fish?
Yes. Thaw the fish in the refrigerator, remove any excess moisture with paper towels, and cut it into even pieces before cooking. Adding frozen fillets directly to the pot can lower the broth temperature and release extra water, making the fish cook unevenly and diluting the soup. Keep thawed fish cold until it is time to add it.

Can I make the soup ahead of time?
You can prepare the tomato broth and cook the potatoes a day ahead, then cool and refrigerate them promptly. For the best fish texture, reheat the broth and potatoes gently and add the fish shortly before serving, cooking it to 145°F (63°C). If the soup is already fully assembled, it can still be reheated, but the fish may be firmer after its second cooking.

How do I keep the fish from breaking apart?
Cut it into large, even chunks, add it only after the potatoes are nearly tender, and maintain a gentle simmer. Use a spoon to move the broth around the fish instead of stirring directly through the pieces. Fish varies in thickness, so begin checking at 5 minutes and remove the pot from the heat once the thickest piece reaches 145°F (63°C).

Is Portuguese fish soup the same as caldeirada?
They are related Portuguese seafood dishes, but the names do not always refer to exactly the same preparation. Caldeirada is generally a fish stew, often layered with potatoes and other ingredients, while sopa de peixe refers to fish soup and can be made in several regional or family styles. This recipe is a brothy, spoonable soup rather than a claim to represent every Portuguese version.

Can I make it without fish stock?
Yes. Use vegetable stock for a clean, lighter base or mild chicken stock for more body, and season carefully because packaged stocks vary in saltiness. If available, a small amount of clam juice can add a seafood note, but it is concentrated; replace only part of the stock with it and taste before adding salt. The soup will still work, though the broth will not taste quite as distinctly of the sea.

Related

More recipes to cook

Safety notes: safe minimum internal temperatures from USDA FSIS; raw and undercooked fish guidance from the U.S. FDA. Food safety notes

Spotted an error? Tell us and we will correct it (corrections policy).