Tom Yam Pla (Thai Spicy and Sour Soup with Fish)

This fish version of tom yam is sour, spicy, and salty, with aromatic notes of lemongrass and makrut lime leaves.

Side angle view of Tom Yum Pla

Serious Eats / Vicky Wasik

Why It Works

  • Using the head and bones from a whole fish to make a stock for the soup improves flavor. 
  • Infusing the stock and soup with lemongrass, onion, and shallots adds sweetness.
  • Adding the aromatics to the soup in layers creates a pronounced sour, salty, and spicy flavor.

If you’re at all familiar with Thai food, then you’ve probably heard of tom yam, the famous spicy and sour soup that's often made with shrimp. What you may not know is that tom yam goes beyond shrimp. The shrimp version, known as tom yam goong, may be the most popular, but there’s also one made with fish, known as tom yam pla, which is just as delicious. Tom yam comes in two types: clear (tom yam nam sai) and creamy (tom yam nam khon). This recipe is for a clear version of the soup, and it uses a whole fish for maximum flavor. Beyond that, it delivers the same flavors of a good tom yam soup―it’s sour, spicy, and salty, with aromatic notes of lemongrass and makrut lime leaves. 

Fish is the star here. I use red snapper, but any white-fleshed fish will work, such as sea bass or grouper. You can buy a whole fish and fillet it yourself, or you can delegate the task to your fishmonger, just make sure they give you the head and bones so you can use them, along with cherry tomatoes, lemongrass, onion, galangal, makrut lime leaves, and fish sauce, to make a stock for the soup. The lemongrass, galangal, and lime leaves help tone down any fishy smell (combining fish with aromatic ingredients is common practice in Southeast Asia), the onions and tomatoes add sweet and tart flavors, and the fish sauce provides a salty kick. Cooking the fish stock is a quick process: It only simmers for 30 minutes, as a prolonged cooking time can lead to a muddy, overcooked flavor. 

Ingredients on a cutting board

Serious Eats / Vicky Wasik

Once the stock is made, the soup comes together quickly. The first step is to char dried Thai red chiles and cherry tomatoes in a pan until blackened. They're then added to the fish stock along with lemongrass, galangal, and shallots, which adds a base layer of heat, color, and umami to the broth.

The snapper fillets, meanwhile, is portioned into two-inch pieces and marinated in fish sauce to season them. They're poached in the broth just until done, which only takes a couple minutes. Right before the soup comes off the heat is when I toss in additional makrut lime leaves as well as some fresh Thai green chiles. Adding them at this late stage allows their fresh flavor to shine without it becoming subdued by long cooking. The amount of chiles you add here is up to you, but keep in mind that this soup should be spicy. Just before serving, a finishing dose of fresh lime juice and fish sauce adds tart and salty notes. 

Overhead view of Tom Yum Pla

Serious Eats / Vicky Wasik

I also add a handful of chopped culantro immediately before serving, which infuses the soup with herbaceous notes that complement the fish. The finished soup should then be served immediately, ideally with jasmine rice as part of a Thai meal

Recipe Facts

Prep: 20 mins
Cook: 40 mins
Total: 60 mins
Serves: 4 servings

Rate & Comment

Ingredients

  • For the Fish:
  • 2 1/2 pounds (1.1kg) head-on whole red snapper, scaled, gutted, filleted, and fillets cut into 2-inch pieces (reserve head and bones for stock; see note)
  • 2 teaspoons fish sauce
  • For the Fish Stock:
  • 1 cup grape tomatoes (5 1/2 ounces; 160g)
  • 2 stalks lemongrass, bottom 6 inches only, outer leaves discarded, tender core lightly smashed and cut into 2-inch lengths (about 80g)
  • 1/2 white onion (4 ounces; 115g), peeled and sliced in half
  • One 4-inch piece fresh galangal (50g), peeled and roughly smashed in a mortar and pestle 
  • 10 fresh or frozen makrut lime leaves (6g), roughly torn
  • 1 tablespoon (15ml) fish sauce
  • For the Soup:
  • 10 to 15 dried Thai chiles (5g), stemmed
  • 1/2 cup grape tomatoes (2 3/4 ounces; 80g)
  • One 4-inch piece fresh galangal (50g), peeled and thinly sliced
  • 4 stalks lemongrass, bottom 6 inches only, outer leaves discarded, tender core lightly smashed and cut on a bias into 2-inch lengths (about 160g)
  • 4 small shallots (50g), peeled and roughly smashed in a mortar and pestle
  • 10 fresh or frozen makrut lime leaves (6g), middle ribs removed (see note)
  • 5 to 7 fresh green Thai chiles (6g), stemmed and roughly smashed in a mortar and pestle
  • 1/4 cup (60ml) fish sauce
  • 1/4 cup (60ml) fresh lime juice from 2 limes
  • 5 sprigs (12g) fresh culantro leaves and tender stems, cut into 1/2-inch pieces (see note)
  • Cooked jasmine rice, for serving

Directions

  1. For the Fish: Place snapper in a medium bowl, add fish sauce, and toss to coat. Cover tightly with plastic wrap and refrigerate for at least 20 minutes or up to 4 hours. 

    Overhead view of fish parts marinating in a bowl

    Serious Eats / Vicky Wasik

  2. For the Fish Stock: Meanwhile, in a large pot, combine tomatoes, lemongrass, onion, galangal, lime leaves, fish sauce, and 2 quarts (1.9L) water and bring to a bowl over high heat. Add reserved head and bones, then lower heat to maintain a simmer. Cook, skimming any scum that accumulates on the surface, until liquid is reduced by half, about 30 minutes. Strain liquid through a fine-mesh strainer set over a 2-quart saucepan (you should have about 1 quart; 945ml) and set aside. Discard head, bones, and aromatics.

    Four image collage. Top left: vegetables for stock boiling in a pot. Top Right: fish head and parts added to stock. Bottom left: A metal spoon skimming off top of broth. Bottom Right: removing the fishhead from stock.

    Serious Eats / Vicky Wasik

  3. For the Soup: Heat a 10-inch cast iron skillet or carbon steel pan over high heat until lightly smoking. Add dried chiles and cook until lightly charred on one side, making sure to move them around to avoid burning, 20 to 30 seconds. Transfer chiles to a small bowl. Add tomatoes to pan and cook over high heat until charred on all sides, making sure to move them around to avoid burning, about 3 minutes. Transfer to the bowl with chiles and set aside.

    Two Image Collage. Top: Chiles being tossed in a pan. Bottom: tomatoes being tossed in a pan.

    Serious Eats / Vicky Wasik

  4. Bring reserved fish stock in saucepan to a boil over high heat. Add galangal, lemongrass, and shallots, along with charred chiles and tomatoes, and allow aromatics to infuse stock, about 1 minute. Add snapper, making sure it is submerged in the stock, and cook until snapper is opaque and just cooked through, about 2 minutes. Add lime leaves, fresh chiles, and fish sauce, and remove from heat. Stir in lime juice (the color of the stock will turn opaque) and culantro.  Serve immediately with cooked jasmine rice. 

    Four Image collage. Top Left: Fish and stock added to the part. Top Right: Greens and spices added to stock. Bottom left: a wooden spoon lifting a piece of cooked fish out of the pot. Bottom Right: Fish sauce being added to the pot.

    Serious Eats / Vicky Wasik

Special Equipment

Mortar and pestle, 2-quart saucepan, 10-inch cast iron skillet or carbon steel pan

Notes

While I call for filleting the snapper yourself, you can ask your fishmonger to do it for you. Just make sure to ask for the head and bones so you can use them to make the fish stock. 

Culantro, also known as sawtooth coriander, is a common addition to laab moo Isan, a minced pork salad. It adds a peppery and slightly bitter herbal note to the soup. Culantro can be found in Southeast Asian, Central American, and Caribbean markets. If you cannot find culantro, feel free to substitute with cilantro, or if you have it, Thai holy basil (not Thai sweet basil), which is a common and delicious pairing for this style soup.

Make-Ahead and Storage

The fish stock can be prepared ahead of time and refrigerated in an airtight container for up to 1 day. 

Tom yam pla can be refrigerated in an airtight container for up to 3 days. You can reheat it in the microwave or on the stovetop, adding freshly squeezed lime juice as needed to brighten the flavor.