Peruvian Fish Soup with Cilantro and Lime

Updated November 4, 2026

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

Jump to recipe

Peruvian Fish Soup with Cilantro and Lime

Peruvian fish soup is a comforting coastal-style broth with tender white fish, potatoes, rice, vegetables, and fresh herbs. This clear, gently spiced version gets its distinctive warmth from aji amarillo and a bright finish from lime; recipes vary by region and family, and some versions are richer or creamier.

Ingredients

  • 2 tablespoons (30 ml) neutral oil, such as vegetable or canola oil
  • 1 large yellow onion, about 1 cup diced (200 g)
  • 1 medium red bell pepper, diced (150 g)
  • 2 tablespoons (30 g) aji amarillo paste; if unavailable, use 1 finely minced yellow chile or 1 tablespoon (15 g) mild yellow chile paste
  • 4 garlic cloves, finely chopped (12 g)
  • 1 medium ripe tomato, diced (150 g)
  • 1 teaspoon ground cumin (2 g)
  • 1 teaspoon dried oregano (1 g)
  • 6 cups unsalted or low-sodium fish stock or chicken broth (1.4 L)
  • 1 pound waxy or all-purpose potatoes, peeled if desired and cut into ¾-inch (2 cm) cubes (450 g)
  • ⅓ cup long-grain white rice, rinsed until the water is mostly clear (65 g)
  • 1 cup corn kernels, fresh or frozen (150 g)
  • 1½ teaspoons fine salt (9 g), plus more to taste
  • ¼ teaspoon ground black pepper (0.5 g)
  • 1½ pounds firm, skinless white fish fillets, such as cod, haddock, halibut, or rockfish, cut into 1½-inch (4 cm) pieces (680 g)
  • ¼ cup chopped fresh cilantro leaves and tender stems (10 g)
  • 2 limes, cut into wedges, about 2 tablespoons juice (30 ml)

Aji amarillo is a bright, fruity Peruvian yellow chile sold as a paste in Latin American markets and some well-stocked grocery stores. A minced mild yellow chile is a practical substitute, though it gives a fresher, less rounded flavor; mild yellow chile paste is convenient but may be less fruity. If using a hot chile, start with half and add more only after tasting. Choose a low-sodium broth so you can season the soup without making it too salty.

Instructions

  1. Prepare the ingredients. Dice the onion, bell pepper, and tomato, chop the garlic, and cut the potatoes into evenly sized cubes so they cook at about the same pace. Rinse the rice in a fine-mesh strainer, then drain it well. Cut the fish into generous pieces and pat them dry. Keep the fish refrigerated while you start the broth.
  2. Soften the aromatics. Heat the oil in a large, heavy soup pot or Dutch oven over medium heat. Add the onion and bell pepper with a small pinch of the measured salt. Cook for about 6 minutes, stirring regularly, until the onion is soft and translucent but not browned. If the vegetables begin sticking, lower the heat rather than adding extra oil.
  3. Build the flavor base. Stir in the aji amarillo, garlic, cumin, and oregano. Cook for 1 minute, stirring so the garlic does not scorch. Add the tomato and cook for 4 minutes, stirring and gently pressing a few tomato pieces with the spoon until they soften and release their juices. This short sauté gives the broth a fuller flavor without needing a long simmer.
  4. Simmer the potatoes and rice. Pour in the stock or broth, then add the potatoes, rinsed rice, corn, remaining salt, and black pepper. Stir and raise the heat until the liquid reaches a gentle simmer, which usually takes about 3 minutes. Reduce the heat to medium-low, partially cover the pot, and simmer for 15 minutes. Stir once or twice, scraping the bottom lightly so the rice does not settle and stick. The potatoes should be nearly tender and the rice should be starting to soften.
  5. Cook the fish gently. Lower the fish pieces into the simmering soup and stir carefully once to distribute them. Keep the liquid at a gentle simmer, not a rolling boil, for about 7 minutes. Check a thick piece with an instant-read food thermometer inserted into its center: the USDA FSIS safe minimum for fish is 145°F (63°C). If it has not reached that temperature, continue cooking briefly and check again. The fish should look opaque and separate easily into flakes, while still holding its shape.
  6. Finish and serve. Turn off the heat and stir in the cilantro. Taste the broth and adjust the salt or pepper. Serve hot with lime wedges for squeezing at the table; adding lime at the end keeps its fresh, lively flavor. Avoid vigorous stirring once the fish is cooked, since it can break the pieces apart.

Tips

  • Use a firm fish and cut it evenly. Cod, haddock, halibut, and rockfish are reliable choices because they hold together reasonably well in soup. Very thin fillets or small cubes cook quickly and may disintegrate, so cut pieces about 1½ inches (4 cm) across and check their temperature promptly.
  • Keep the simmer gentle. A hard boil can break up the fish and make the broth cloudy. Once the potatoes and rice are simmering, lower the heat as needed; bubbles should rise steadily but softly. If your stove runs hot, shift the pot slightly off-center on the burner.
  • Choose a potato that keeps its shape. Yukon Gold or red potatoes work well, while russets tend to soften more and thicken the broth. Either is usable, but if you choose russets, cut them a little larger and avoid stirring often after they become tender.
  • Season in stages and finish with fresh lime. Broth varies in saltiness, so begin with the amount listed and taste again at the end. Lime juice is best added at serving rather than simmered in the pot, where its fresh aroma can fade.

Serving Suggestions

Serve the soup in deep bowls so each portion gets broth, rice, potatoes, corn, and several pieces of fish. Put extra lime wedges and a small bowl of chopped cilantro on the table, letting everyone brighten their own serving. A few slices of avocado make a cool, creamy contrast, while crusty bread is useful for soaking up the broth. If you would like a little more heat, offer aji amarillo paste or finely chopped chile separately rather than making the whole pot hot.

This soup is substantial enough to serve as a main course, especially for lunch or a light dinner. If serving a group, a simple tomato and onion salad or crisp green salad provides freshness without competing with the seasoned broth. Because the recipe already includes rice and potatoes, additional rice is not necessary; a small side of bread or a modest salad is usually plenty.

Variations

Make a creamier chupe-inspired bowl: Some Peruvian fish-soup and chupe-style recipes include evaporated milk, cheese, or egg, though ingredients and methods differ. For a creamy variation, stir in ½ cup (120 ml) evaporated milk after the fish has cooked, warm the soup gently for 1 to 2 minutes without boiling, and finish with ¼ cup (25 g) crumbled queso fresco. The result is richer and less clear than the broth-style version here. Keep the fish at a gentle simmer and avoid vigorous stirring.

Add shellfish: Replace up to ½ pound (225 g) of the white fish with peeled shrimp. Add the shrimp during the final few minutes and cook until opaque and firm; check with a thermometer if needed, using 145°F (63°C) as the safe minimum for seafood. Shrimp cook faster than fish chunks, so add them only when the potatoes and rice are already tender.

Use another vegetable: A cup of shelled peas (150 g) can replace the corn, or add 1 cup (100 g) of thinly sliced cabbage during the last 5 minutes of simmering. These changes are not meant to represent one definitive regional version; they are practical ways to adapt the pot to what is available. If using frozen peas, add them near the end so they stay bright and do not turn mushy.

Adjust the chile and herbs: For a mild soup, use 1 tablespoon (15 g) aji amarillo paste; for more heat, add a little more after tasting the cooked broth. Cilantro is a familiar fresh finish, but a small amount of chopped parsley can stand in if cilantro is not available. Parsley gives a cleaner, less citrusy herbal note, so keep the lime at the table.

Storage and Reheating

Cool leftovers promptly and refrigerate them in shallow, covered containers within 2 hours of cooking. The soup keeps for 3 to 4 days in the refrigerator. Fish can become more delicate after storage, and rice continues to absorb broth, so the leftovers may be thicker than the freshly made soup. If you expect leftovers, you can keep some broth separate and add it while reheating.

Reheat only the portion you plan to eat in a saucepan over medium-low heat, stirring gently until steaming throughout. Add a splash of broth or water if needed, and bring leftovers to 165°F (74°C), checking with a food thermometer. Avoid repeated reheating, which can dry out the fish and make it fall apart. For freezing, cool the soup quickly and freeze in airtight containers for up to 2 months for best quality; the potatoes and fish may soften after thawing. Thaw overnight in the refrigerator and reheat to 165°F (74°C).

Frequently Asked Questions

What fish is best for Peruvian fish soup?

Choose a firm, mild white fish that can be cut into thick pieces, such as cod, haddock, halibut, or rockfish. Fresh or previously frozen fish both work; thaw frozen fillets in the refrigerator and pat them dry before cutting. Avoid very thin fillets if you want distinct chunks in the finished bowls.

Can I make the soup without aji amarillo?

Yes. A mild yellow chile or mild yellow chile paste is the closest practical substitute. The soup will still be savory and bright, but it will lack some of aji amarillo’s fruity flavor and distinctive Peruvian character. A little extra bell pepper can add sweetness, but it will not replace the chile’s flavor.

Can I prepare Peruvian fish soup ahead of time?

You can prepare the vegetable base and simmer the potatoes, rice, and broth ahead, then cool and refrigerate that base promptly. Reheat it until simmering and add the fish shortly before serving, cooking it to 145°F (63°C). This approach helps the fish stay tender and prevents it from breaking apart during storage and reheating.

How do I keep the fish from falling apart?

Cut the fish into large, even pieces, add it only after the potatoes and rice are nearly tender, and keep the broth at a gentle simmer. Stir once, carefully, to distribute the pieces, then leave them alone as they cook. Check the thickest piece with a thermometer rather than repeatedly lifting or flaking the fish.

Is Peruvian fish soup supposed to include rice and potatoes?

There is no single fixed ingredient list for every Peruvian household or coastal region. This version includes both rice and potatoes to make a filling, one-pot soup, while other versions may use one, neither, or additions such as milk, cheese, egg, or other seafood. You can omit the rice for a lighter broth, but reduce the simmering time slightly and check the potatoes for tenderness.

Can I use fish stock instead of chicken broth?

Yes. Fish stock gives the soup a more pronounced seafood flavor, while chicken broth makes a rounder, more familiar-tasting base. Use unsalted or low-sodium stock if possible, and taste before adding extra salt. Water also works in a pinch, though the broth will be milder and may need more careful seasoning.

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).