Soups & Stews
This bean soup from scratch recipe transforms simple ingredients into a hearty, restaurant-worthy meal with crispy celery crowns that add unexpected texture. The secret lies in slow-simmered beans, aromatic vegetables, and a balance of smoky, earthy flavors that develop over time.
Unlike canned versions, this homemade soup delivers depth and complexity that store-bought simply can't match.
The magic starts with sautéing onions, garlic, and celery until golden—this caramelization builds the soup's foundation. Adding dried beans (or a mix of white and black beans) and simmering them until tender ensures a creamy, satisfying texture without blending.
For the crispy celery crowns, we save a few stalks to fry or bake until golden and crunchy, adding a delightful contrast to each spoonful.
What you'll end up with is a rich, flavorful bean soup that's hearty enough for a main course but simple enough for a weeknight dinner. The slow simmer allows flavors to meld, while the crispy celery crowns add a satisfying crunch that keeps every bite exciting.
This recipe is adaptable—add smoked paprika for depth, chili flakes for heat, or a splash of vinegar for brightness.
Perfect for meal prepping or serving immediately, this soup tastes even better the next day as flavors deepen. Whether you're feeding a crowd or enjoying a cozy solo meal, this homemade bean soup delivers comfort and satisfaction in every bowl. Let's get cooking!
Ingredients for bean soup from scratch
Transform basic pantry staples into a restaurant-quality bean soup with crispy celery crowns.
| Ingredient | Amount | Notes |
|---|---|---|
| Dried White Beans 🌱 | 1 ½ cups | Unsoaked, or 1 can drained white beans |
| Dried Black Beans 🌱 | 1 cup | Unsoaked, or 1 can drained black beans |
| Yellow Onions 🧅 | 2 whole | Medium, finely diced |
| Celery Stalks 🧄 | 4 whole | 3 for soup, 1 for crispy crowns |
| Garlic Cloves 🧄 | 4 cloves | Minced for depth of flavor |
| Carrots 🥕 | 3 whole | Medium, peeled and sliced |
| Smoked Paprika 🌶️ | 1 ½ tsp | For smoky richness |
| Ground Cumin 🌿 | 1 tsp | Toasted for authentic warmth |
| Bay Leaves 🌿 | 2 whole | Fresh or dried |
| Vegetable Broth 💧 | 4 cups | Low-sodium preferred |
| Extra-Virgin Olive Oil 🫒 | ¼ cup | For sautéing vegetables |
| Lemon Juice 🍋 | 1 tbsp | Freshly squeezed for brightness |
| Salt 🧂 | 1 ½ tsp | Diamond Crystal kosher salt |
| Black Pepper 🌶️ | ½ tsp | Freshly cracked |
| Panko Breadcrumbs 🍞 | ½ cup | For crispy celery crowns |
| Nutritional Yeast 🧀 | 2 tbsp | For umami depth in crispy crowns |
The beans are the heart of this soup—dried white and black beans deliver the most satisfying texture, but canned works in a pinch. For the best flavor, Trader Joe's and Whole Foods carry high-quality dried beans, but any organic brand will do. The celery must be fresh and crisp—avoid wilted stalks, as they won't achieve that perfect golden crunch. Smoked paprika is non-negotiable for that smoky depth, and Penzeys or McCormick brands are reliable. Fresh bay leaves add complexity, but dried will suffice if that's all you have.
No smoked paprika? Substitute with a pinch of liquid smoke—start with 1/4 tsp and adjust to taste. Running low on vegetable broth? Water plus 1 tsp soy sauce works in a bind. The crispy celery crowns require panko breadcrumbs for texture, but crushed cornflakes or almond flour can stand in. For extra richness, stir in 1 tbsp of vegan butter when serving. The carrots can be swapped for sweet potatoes if you prefer a sweeter note, but keep them firm for texture.
This soup tastes even better the next day as flavors meld—store in an airtight container for up to 5 days in the fridge. For crispy celery crowns, fry them fresh or bake at 400°F for 10-12 minutes until golden. Freeze portions of the soup (without crowns) for up to 3 months
Why You'll Love This Recipe
- No-Soak Needed: I’ll be real—soaking beans is a pain. This recipe skips it entirely, letting the dried white and black beans simmer until tender. You just rinse, then dump them in with the onions and celery. Done.
- Deep, Earthy Richness: That combo of black and white beans? It’s like a flavor party in your bowl. The onions caramelize right into the broth, while the garlic cloves turn golden and intense—not overpowering, just deeply satisfying.
- Lunchbox Magic: Between us, this soup is my secret weapon for meal prep. Make a big batch on Sunday, and you’ve got hearty lunches for days. The beans hold up perfectly, and the celery adds a fresh crunch even after reheating.
- Pantry Goldmine: Honestly, this recipe uses ingredients you already own. Onions, garlic, celery—basic stuff that won’t break the bank. And since it stretches across multiple servings, it’s one of those rare dishes that’s both cheap and impressive.
Step-by-step instructions for homemade bean soup with crispy celery crowns
Transform simple ingredients into a restaurant-worthy bean soup with a textural contrast that elevates every spoonful.
Soak and Prepare the Beans for Maximum Texture
Place the 1.5 cups dried white beans and 1 cup dried black beans in a large bowl and cover with plenty of cold water by at least 2 inches. Let them soak overnight in the refrigerator—this ensures even cooking and prevents the soup from becoming gummy. I like to add a pinch of salt to the soaking water to help soften the beans faster.
While the beans soak, prepare the celery crowns by cutting the 1 whole celery stalk reserved for crispy crowns into ½-inch thick rounds. Toss these rounds with 0.5 cup panko breadcrumbs, 2 tablespoons nutritional yeast, 0.5 teaspoon black pepper, and 0.25 teaspoon salt in a bowl until evenly coated. This mixture creates the crispy, umami-packed topping that contrasts beautifully with the creamy soup.
Sauté the Aromatic Vegetables for Deep Flavor
Heat 0.25 cup extra-virgin olive oil in a large Dutch oven over medium heat. Add the 2 whole yellow onions, 3 whole carrots (peeled and sliced into ½-inch rounds), and 3 of the celery stalks (diced into ¼-inch pieces). Cook for 8-10 minutes, stirring occasionally, until the onions are translucent and the carrots begin to soften.
Add the 4 cloves garlic (minced) and cook for an additional 1 minute until fragrant. Stir in the 1.5 teaspoons smoked paprika and 1 teaspoon ground cumin, toasting for 30 seconds until the spices release their aromatic oils. This step builds the flavor foundation for the soup—don't skip it, as it makes all the difference in depth of taste.
Build the Soup Base with Layered Flavors
Drain the soaked beans and add them to the Dutch oven along with 4 cups vegetable broth and the 2 whole bay leaves. Bring the mixture to a boil, then reduce the heat to low and simmer for 45-60 minutes, partially covered, until the beans are fork-tender. You'll know they're ready when they're soft but still hold their shape—overcooking turns them mushy.
Season with 1.5 teaspoons salt and adjust the broth consistency by adding ½ cup water if needed. Stir in the 1 tablespoon lemon juice just before removing from heat—this brightens the flavors and balances the richness of the beans. Remove and discard the bay leaves before proceeding.
Create the Crispy Celery Crowns for Texture Contrast
While the soup simmers, heat 1 tablespoon extra-virgin olive oil in a skillet over medium-high heat. Fry the prepared celery crowns in batches for 2-3 minutes per side until they're deep golden brown and crispy. Drain on a paper towel-lined plate to remove excess oil—these should be crunchy enough to stand up to the creamy soup.
Keep the fried celery crowns warm in a 200°F oven until ready to serve. The contrast between the crispy crowns and the velvety bean soup is what makes this dish truly special. If they lose crispness, simply return them to the skillet for 30 seconds to restore their crunch.
Finish and Serve with Perfect Presentation
Taste the soup and adjust seasoning with additional salt or black pepper if needed. Ladle the soup into bowls, placing 2-3 crispy celery crowns on top of each serving. The crowns should be arranged like a crown—hence the name—adding both visual appeal and a satisfying textural element.
Serve immediately with a sprinkle of fresh parsley (optional) and a side of crusty bread to soak up every last drop of the rich, smoky broth. The combination of creamy beans, aromatic vegetables, and crispy celery crowns creates a harmonious balance that makes this homemade soup truly unforgettable.
Pro Tips For Making Bean Soup From Scratch
- SOAK BEANS IN COLD WATER: Dried beans absorb water faster in cold liquid—no need to boil first. I used to waste time pre-boiling, but cold soaking for 8+ hours (or overnight) cuts cooking time by 30 minutes. Just cover by 2 inches and add a pinch of salt to prevent skin toughening.
- CHOP ONIONS AND CELERY SMALL: A ¼-inch dice for both onion and celery ensures even cooking and melts into the soup instead of sitting as chunks. I learned this after serving a batch where someone complained about "crunchy surprises"—now I dice aggressively, like I’m prepping for a stew, not just soup.
- SKIP THE BOILING START: Low and slow is the way—bring beans to a simmer, not a rolling boil, to avoid splitting skins. After my first batch turned into a mushy mess, I switched to a gentle heat and kept the pot covered. It takes longer, but the texture stays intact.
- SAUTÉ AROMATICS IN OIL FIRST: Cook onions, celery, and garlic in 2 tablespoons of oil until softened (about 5 minutes). This builds flavor depth before adding liquids—something I skipped for years until I tasted the difference. The caramelized base makes the soup taste homemade, not canned.
Common mistakes when making perfect results
Skipping the Soak
Using dried beans without soaking first is the #1 rookie mistake—it leads to gummy, unevenly cooked beans that ruin the soup's texture. Dried beans need at least 8 hours of soaking (overnight is ideal) to break down their tough skins properly.
If you're short on time, use a pressure cooker: cook the unsoaked beans with 1 extra cup of water for 20 minutes on high pressure. Never skip this step, even if you're using canned beans! 🌱
Overcrowding the Pot
Packing too many ingredients into your Dutch oven at once causes the soup to steam instead of simmer, trapping moisture and preventing proper browning of the vegetables. Keep your pot no more than 2/3 full when sautéing aromatics, and reduce heat to medium-low if needed.
I've learned this the hard way—once, my onions burned while the carrots stayed raw. The key is patience: cook in batches if necessary, and always give ingredients space to develop flavor. 🔥
Underseasoning the Broth
Many home cooks hold back on salt and spices, thinking they can "fix it later"—but bean soup needs bold flavors from the start. Add all 1.5 teaspoons salt and 1.5 teaspoons smoked paprika during the sautéing stage, not just at the end.
The spices need time to bloom in the oil. Taste your broth after simmering and adjust with ½ teaspoon at a time—don't be afraid to go bold! I often add an extra pinch of salt when serving, knowing the beans will absorb some during cooking. 🧂
Neglecting the Celery Crowns
The crispy celery crowns are what make this soup special, so don't skimp on their preparation! Using pre-cut celery or skipping the breadcrumb coating results in soggy, flavorless garnishes. Always cut the celery into ½-inch thick rounds and coat them thoroughly in the panko mixture—press gently so the crumbs adhere.
Fry in small batches to maintain oil temperature at 350°F—overcrowding causes steam, making them greasy instead of crispy. Keep them warm in a 200°F oven until serving to preserve their crunch. 🧄
Rushing the Simmer
Bean soup develops its rich, complex flavors through slow cooking—don't rush the 45-60 minute simmer or you'll end up with bland, underdeveloped broth. The beans need time to soften evenly while the vegetables break down and release their natural sweetness.
I've made the mistake of speeding this up, and the results were disappointing. If you're short on time, use a pressure cooker for 20 minutes after the initial sauté, but monitor closely to avoid mushy beans. 🕒
Ignoring the Lemon Juice
Adding lemon juice at the very end is crucial for balancing the soup's flavors—skipping it leaves the dish flat and one-dimensional. The 1 tablespoon lemon juice brightens the earthy beans and cuts through the richness of the broth.
Add it just before serving so the acidity doesn't cook off. For extra zing, I sometimes add a pinch of red pepper flakes with the lemon juice. This simple step transforms good soup into great soup. 🍋
Nutrition facts
Frequently asked questions
Can I substitute canned beans for dried in this recipe?
Yes! Use 1 can (15 oz) drained white beans and 1 can (15 oz) drained black beans instead of soaked dried beans. Drain and rinse them well to remove excess sodium. The texture will be slightly softer, but the flavor will still be rich and satisfying.
How do I make this bean soup spicier?
Add ½ teaspoon cayenne pepper or 1 teaspoon chili flakes when sautéing the aromatics, or stir in 1 chopped jalapeño with the lemon juice at the end. For extra heat, top each bowl with a dash of hot sauce or a sprinkle of red pepper flakes before serving.
Can I make this soup in a slow cooker?
Sauté the onions, carrots, celery, garlic, and spices first, then transfer everything (including soaked beans and broth) to the slow cooker. Cook on low for 6-8 hours or high for 3-4 hours. The slow cooker enhances the flavors even more—just skip the crispy celery crowns (they won’t hold up) and serve with toasted bread instead.
What’s the best way to store leftovers?
Let the soup cool completely, then transfer to an airtight container and refrigerate for up to 5 days. Reheat gently on the stove with a splash of water or broth. The crispy celery crowns don’t reheat well, so make them fresh when serving. For freezing, store the soup (without crowns) for up to 3 months—thaw overnight in the fridge before reheating.
Can I make this soup gluten-free?
Yes! Replace the panko breadcrumbs in the celery crowns with gluten-free panko or crushed cornflakes. For extra crunch, use almond flour or crushed gluten-free crackers. Ensure your vegetable broth is also certified gluten-free to avoid cross-contamination.
