Soups & Stews
This authentic Mexican pinto bean soup delivers the deep, earthy flavors of Mexico’s homestyle kitchens—slow-simmered with traditional spices and a touch of epazote for that signature brightness. The secret lies in soaking the beans overnight, which transforms tough pinto beans into tender, flavorful bites that melt into the rich broth.
I’ve perfected this recipe over years of testing, ensuring every spoonful carries the warmth of Mexican home cooking.
The beauty of this soup is in its simplicity: just a handful of ingredients—pinto beans, tomatoes, garlic, onions, and spices—cooked low and slow to develop layers of flavor.
Traditional techniques like toasting spices and using bacon fat (or vegetable oil for a vegetarian version) create depth that store-bought versions can’t match. The result is a hearty, comforting bowl that’s as nourishing as it is delicious.
By the time you’re done, you’ll have a steaming pot of soup with tender beans, vibrant vegetables, and a broth so flavorful it’ll have everyone asking for seconds.
The epazote adds a unique herbal note that’s essential for authenticity, while the optional garnish of avocado or cilantro takes it to another level. This isn’t just soup—it’s a taste of Mexico’s soul in every bite.
Perfect for chilly evenings, potlucks, or meal prep, this recipe scales easily and tastes even better the next day. Let’s get cooking—your taste buds will thank you.
Ingredients for authentic mexican pinto bean soup
Six servings of homestyle Mexican comfort—just 15 ingredients, slow-simmered to perfection.
| Ingredient | Amount | Notes |
|---|---|---|
| Dried Pinto Beans 🌱 | 2 cups | Soaked overnight, drained |
| Vegetable Oil 🫒 | ¼ cup | For sautéing, or bacon fat |
| Yellow Onion 🧅 | 1 whole | Diced, medium size |
| Garlic Cloves 🧄 | 6 cloves | Minced, fresh preferred |
| Tomatoes 🍅 | 4 whole | Roma or vine-ripened, chopped |
| Fresh Epazote 🌿 | ¼ cup | Chopped, essential for authenticity |
| Ground Cumin 🌶️ | 1 tbsp | Toasted for depth of flavor |
| Mexican Oregano 🍃 | 1 tbsp | Dried, not Italian oregano |
| Chili Powder 🌶️ | 1 tbsp | Medium heat, not cayenne |
| Bay Leaves 🌿 | 2 whole | Fresh or dried, removed before serving |
| Vegetable Broth 💧 | 6 cups | Low-sodium preferred |
| Salt 🧂 | 1 ½ tsp | Kosher or sea salt |
| Black Pepper 🌶️ | ½ tsp | Freshly ground |
| Lime 🍋 | 1 whole | Juiced, for serving |
| Avocado 🥑 | 1 whole | Sliced, optional garnish |
The pinto beans are the heart of this soup, and soaking them overnight is non-negotiable. Dried beans from a Latin market or bulk section taste richer than canned—just rinse them well after soaking. For the spices, Penzeys or local Mexican markets carry authentic Mexican oregano and cumin that elevate this dish. Epazote is the secret ingredient here—find it in the Latin aisle or at specialty stores; it’s worth the hunt for that signature herbal brightness. If you can’t find fresh epazote, dried works at half the amount, but it’s not the same.
No epazote? Fresh cilantro or parsley can bridge the gap, though it won’t be identical. Running low on vegetable broth? Water plus a bouillon cube works in a pinch, but add an extra pinch of salt. The tomatoes can be canned (San Marzano if possible) or fresh—just chop them roughly for rustic texture. For the oil, avocado or olive oil adds richness, but vegetable oil keeps it neutral. The lime and avocado are purely for serving—add them fresh at the end to keep the soup vibrant.
This soup tastes even better the next day, so make a big batch. Store in an airtight container for up to 5 days in the fridge, or freeze for 3 months. I like to portion it into jars with a little lime juice on top—just reheat gently on the stove. The beans soften further as it sits, so don’t rush the cooking. Garnish with avocado and cilantro right before serving, or let everyone add their own toppings—it’s always a crowd-pleaser.
Why You'll Love This Recipe
- Here’s what sold me: the way charred tomatoes and raw garlic cloves meld into something deeper than store-bought soup. Sear the onion until caramelized, add the garlic whole (yes, whole—you’ll fish them out later), and let it all simmer. The result? A smoky, layered taste that makes canned soup taste like a sad afterthought.
- No-Soak Necessary: I’ll admit, I used to dread soaking beans—until I discovered this trick. Just toss the dried pintos in boiling water for 2 minutes, then simmer. The skins soften perfectly, and you skip the whole overnight wait. That’s 10 minutes saved right there, and the flavor? Just as rich.
- Tomato-Garlic Magic: Here’s what sold me: the way charred tomatoes and raw garlic cloves meld into something deeper than store-bought soup. Sear the onion until caramelized, add the garlic whole (yes, whole—you’ll fish them out later), and let it all simmer. The result? A smoky, layered taste that makes canned soup taste like a sad afterthought.
- Potluck Star: Between us, this is my go-to for gatherings—no one brings a casserole, but they always bring this. It’s hearty enough for a crowd but light enough for a picnic. Plus, it reheats beautifully, so you’re not stuck with a potluck leftovers disaster. (My secret? Add a splash of lime juice before serving—trust me, it’s the game-changer.)
Step-by-step instructions for authentic Mexican pinto bean soup
Here's how to craft this soul-warming soup with layers of smoky, earthy flavor that stays true to its roots.
Sauté the Aromatic Base
Heat the 0.25 cup vegetable oil in a large Dutch oven over medium heat. Add the diced yellow onion and cook for 5 minutes until softened and translucent. This foundational step develops the soup's depth of flavor—don't rush it.
Add the 6 minced garlic cloves and cook for another 1 minute until fragrant. You'll smell that sweet garlic aroma filling your kitchen—this is where the magic begins. Immediately stir in the 1 tablespoon ground cumin, 1 tablespoon Mexican oregano, and 1 tablespoon chili powder, mixing continuously for 30 seconds to toast the spices and release their essential oils. The spices should be evenly distributed and slightly darkened from the heat.
Build the Flavor Foundation
Add the 4 chopped tomatoes and cook for 4-5 minutes until they break down and release their juices. This step transforms the raw tomatoes into a thick, flavorful base. Stir in the 2 whole bay leaves and 1.5 teaspoons salt, then pour in the 6 cups vegetable broth. Bring the mixture to a gentle boil, then reduce heat to medium-low and let it simmer for 10 minutes to meld all the flavors together.
Here's where authenticity shines: add the 0.25 cup chopped fresh epazote and stir gently. Epazote has a distinct, slightly bitter, anise-like flavor that's essential to traditional Mexican bean soups. If you can't find it, don't substitute—it's what makes this soup truly special. Let the soup simmer for another 5 minutes to allow the epazote to infuse its unique character.
Incorporate the Beans and Simmer Slowly
Add the 2 cups drained pinto beans to the pot and stir gently to combine. The beans should be fully submerged in the liquid. Increase heat to medium-high and bring the soup to a boil, then immediately reduce to low heat. This is crucial—you want the beans to simmer gently rather than boil vigorously, which can cause them to break apart.
Simmer uncovered for 1 to 1.5 hours, stirring occasionally and adding water as needed to maintain the liquid level. You're looking for beans that are tender but still hold their shape, with a soup that's thick and flavorful. The longer it simmers, the more the flavors develop and meld together. Real talk: this is where patience pays off—don't skip this step.
Finish and Serve with Authentic Touches
Remove the 2 bay leaves from the soup. Taste and adjust seasoning with additional salt or 0.5 teaspoon black pepper as needed. The soup should be well-seasoned but balanced—you want the flavors to harmonize without any single element overpowering.
Ladle the soup into bowls and serve immediately with a generous squeeze of juice from 1 whole lime and slices of 1 whole avocado on top. The bright acidity of the lime cuts through the richness of the soup, while the creamy avocado adds a luxurious texture. This final touch elevates the dish from good to exceptional, staying true to the authentic Mexican experience.
Pro Tips For Making Authentic Mexican Pinto Bean Soup
- SOAK BEANS OVERNIGHT: Dried pinto beans refuse to soften properly if you rush them. Toss them in a bowl with plenty of cold water (at least 3 inches above the beans) and let them sit 12+ hours—no peeking. I used to soak them for just 4 hours, and the soup always tasted underdeveloped, like the beans were still fighting to cook.
- SWEAT ONIONS LOW AND SLOW: Skip the high heat when cooking your onions—they’ll burn before they caramelize. Use medium-low heat and stir every 30 seconds until they’re translucent but not browned. After burning three batches, I finally realized patience here means the soup’s base won’t taste bitter.
- CRUSH TOMATOES BY HAND: Blending tomatoes for the soup’s base strips out their texture and depth. Instead, crush them roughly with your fingers or the flat side of a knife—just enough to break the skins. This keeps the sauce chunky and vibrant, like the soups I had in Oaxaca, not a watery paste.
- SALT THE BEANS EARLY: Add a pinch of salt to the soaking water (about 1 teaspoon per pound of beans). It prevents the skins from toughening during cooking and makes the beans absorb flavor faster. I was skeptical until I tried it—now I never skip it, and the beans end up tender with a cleaner taste.
Pro cooking tips for great authentic mexican pinto bean soup
Toast Your Spices
Before adding spices to your soup, toast them in the oil over medium heat for 30 seconds—this releases their essential oils and deepens their flavor. I always toast cumin, Mexican oregano, and chili powder together until they're fragrant and slightly darkened.
This step is non-negotiable for authentic depth—it's what separates homemade soup from store-bought. 🌶️
Epazote is Non-Negotiable
The 0.25 cup fresh epazote is the soul of this soup—its anise-like, slightly bitter flavor is essential for authenticity. If you can't find it, don't substitute with cilantro or parsley; they won't capture the same complexity.
Add it after the tomatoes and let it steep for 5 minutes to fully infuse. Trust me, your taste buds will thank you for seeking it out.
Low and Slow Simmer
Resist the urge to rush this soup. After adding the beans, maintain a gentle simmer (not a rolling boil) for 1 to 1.5 hours. This slow cooking breaks down the beans' skins, creating a naturally thick, flavorful broth.
Stir occasionally and add water as needed—never let it dry out. Patience here is key to that restaurant-quality texture. ⏳
Bean Texture Matters
Your beans should be tender but still hold their shape—they shouldn't be mushy or falling apart. If they're breaking down too quickly, reduce the heat slightly or cover the pot to slow cooking.
I like mine with just a hint of bite, which adds texture contrast to the creamy broth. This is the sign of a well-made Mexican bean soup.
Acid Balance at Serving
Always finish your soup with a squeeze of fresh lime juice right before serving. The acidity cuts through the richness and brightens all the flavors. I also add avocado slices for creaminess—this final touch is what makes the soup feel complete and authentic.
Don't skip it, even if it's just a few drops of lime. 🍋
Dutch Oven is Your Best Friend
Use a heavy-bottomed Dutch oven for even heat distribution and better temperature control. The deep sides prevent spills when stirring, and the material retains heat well, keeping your soup at a consistent simmer.
If you don't have one, a large stainless steel pot works too—just be more vigilant about heat adjustments. This is where home cooks often go wrong with texture.
Nutrition facts
Frequently asked questions
Why do I need to soak the pinto beans overnight?
Soaking beans overnight reduces cooking time and prevents that tough, grainy texture. The beans absorb water and soften, creating a creamy consistency in your soup. Plus, it helps break down complex sugars that can cause digestive discomfort. For best results, use 2 cups dried beans soaked for at least 8 hours—this is non-negotiable for authentic texture!
Can I substitute epazote if I can't find it?
While you can try fresh cilantro or parsley, they won't replicate epazote's unique anise-like flavor. The herb is essential for authenticity—it balances the earthy beans with a bright, slightly bitter note. If you absolutely must substitute, use 0.1 cup dried epazote (half the amount) or skip it entirely (though your soup will lack that signature Mexican touch).
How do I make this soup vegetarian-friendly?
This recipe is already vegetarian, but you can enhance it further by using vegetable broth and vegetable oil instead of bacon fat. For extra richness, stir in 1 tablespoon tomato paste with the spices or add 1 diced potato (remove before serving). The epazote and lime keep it vibrantly flavorful without any animal products.
Can I use canned beans instead of dried?
Yes, but your soup won't have the same depth of flavor. Canned beans are pre-cooked and lack the earthy richness developed from slow simmering. If using canned, drain and rinse 2 (15 oz) cans of pinto beans, add them after the 10-minute simmer with tomatoes, and reduce the cooking time to 30-45 minutes—just enough to meld flavors. The texture will be softer, but it's a quick fix!
How long will this soup keep in the fridge?
Store in an airtight container for up to 5 days—it actually tastes better the next day as flavors deepen! For longer storage, freeze portions for up to 3 months. Reheat gently on the stove, stirring occasionally, and add a splash of water if it thickens too much. The beans will soften further, so adjust seasoning with salt or lime juice as needed.
