Quick Recipe Version (TL;DR)
Quick Ingredients
- 1 lb (450 g) Italian sausage, casings removed
- 2 tbsp olive oil, divided
- 1 large onion, 2 carrots, 2 celery stalks, diced
- 4 garlic cloves, minced
- 1 tbsp tomato paste
- 1/2 cup dry white wine or broth
- 1 (28 oz/794 g) can crushed tomatoes
- 4 cups (960 ml) low-sodium chicken broth
- 2 (15 oz/425 g) cans cannellini beans, drained and rinsed
- 1 tsp fennel seeds (or 1 tsp dried oregano), 1/4 tsp red pepper flakes
- 1 bay leaf, 2 thyme sprigs, 1 rosemary sprig
- 1 Parmesan rind (optional)
- 4 cups chopped kale (or 3 oz/85 g baby spinach)
- 1 tbsp red wine vinegar or lemon juice
- Kosher salt and black pepper
- Garnish: chopped parsley, grated Parmesan, extra-virgin olive oil
Do This
- 1. Brown sausage in 1 tbsp oil in a 5–6 qt pot over medium-high, 6–8 minutes; transfer out.
- 2. Sauté onion, carrot, celery in remaining oil with a pinch of salt, 6–8 minutes; add garlic, fennel, chili 30 seconds; stir in tomato paste 1–2 minutes.
- 3. Deglaze with wine or broth, scraping up browned bits, 1–2 minutes.
- 4. Add tomatoes, chicken broth, bay, thyme, rosemary, Parmesan rind; return sausage.
- 5. Mash 1 cup of the beans; add mashed and whole beans. Simmer partially covered 15–20 minutes.
- 6. Stir in greens; cook until tender (kale 5–8 minutes; spinach 1–2). Remove bay, stems, rind.
- 7. Finish with vinegar or lemon; season to taste. Serve with parsley, Parmesan, and a drizzle of olive oil.
Why You’ll Love This Recipe
- Deep, savory flavor from properly browned Italian sausage and a toasted tomato paste base.
- Hearty but not heavy: creamy white beans and bright greens in a tomato-rich broth.
- Weeknight-friendly: one pot, under an hour, with pantry staples.
- Flexible: choose kale or spinach, sweet or hot sausage, wine or broth.
Grocery List
- Produce: 1 large onion, 2 carrots, 2 celery stalks, 4 garlic cloves, 1 bunch kale (or 1 bag baby spinach), fresh parsley, 1 lemon (optional), fresh thyme, fresh rosemary
- Dairy: Parmesan wedge (for rind and grating)
- Pantry: Olive oil, tomato paste, crushed tomatoes (28 oz), low-sodium chicken broth, cannellini beans (two 15 oz cans), bay leaf, fennel seeds (or dried oregano), red pepper flakes, kosher salt, black pepper, dry white wine (or extra broth)
Full Ingredients
Aromatic Base
- 2 tbsp olive oil, divided (30 ml), plus more for serving
- 1 large yellow onion, diced (about 2 cups / 280 g)
- 2 medium carrots, diced (about 1 cup / 130 g)
- 2 celery stalks, diced (about 3/4 cup / 90 g)
- 4 garlic cloves, minced (about 1 tbsp / 15 g)
- 1 tbsp tomato paste (15 g)
- 1 tsp fennel seeds, lightly crushed (2 g) or 1 tsp dried oregano
- 1/4 tsp red pepper flakes (optional)
- 1/2 cup dry white wine (120 ml) or low-sodium broth for deglazing
Sausage and Beans
- 1 lb (450 g) Italian sausage, sweet or hot, casings removed
- 2 cans cannellini beans (15 oz/425 g each), drained and rinsed
Liquids and Aromatics
- 1 can crushed tomatoes (28 oz/794 g)
- 4 cups low-sodium chicken broth (960 ml) or vegetable broth
- 1 bay leaf
- 2 thyme sprigs (or 1/2 tsp dried thyme)
- 1 small rosemary sprig (or 1/2 tsp dried rosemary)
- 1 Parmesan rind, about 1 oz/30 g (optional but recommended)
Greens and Finishers
- 4 packed cups chopped curly kale, ribs removed (about 120 g), or 3 oz (85 g) baby spinach
- 1 tbsp red wine vinegar or fresh lemon juice (15 ml)
- 1 tsp kosher salt, plus more to taste
- 1/2 tsp freshly ground black pepper
- 2 tbsp chopped fresh parsley
- 1/2 cup finely grated Parmesan (about 40 g), for serving
Optional for Serving
- Crusty bread, warmed

Step-by-Step Instructions
Step 1: Prep your ingredients
Set a 5–6 quart Dutch oven or heavy pot on the stove. Dice the onion, carrots, and celery into even pieces so they cook at the same pace. Mince the garlic. Strip kale leaves from the ribs and chop into bite-size pieces (or have spinach ready). Drain and rinse the beans; set aside 1 cup and mash them with a fork to create a thick paste. Tie the thyme and rosemary together with kitchen twine if you like easy removal later.
Step 2: Brown the sausage for big flavor
Heat 1 tbsp olive oil over medium-high heat until shimmering, 1–2 minutes. Add the sausage, breaking it into 1/2-inch crumbles. Let it brown well, stirring only occasionally, 6–8 minutes, until deeply caramelized with crisp edges. Transfer sausage to a bowl, leaving the drippings in the pot.
Step 3: Build the aromatic base
Add the remaining 1 tbsp olive oil to the pot. Add the onion, carrot, and celery with a pinch of salt. Cook over medium heat, stirring, until softened and lightly golden, 6–8 minutes. Stir in garlic, fennel seeds (or oregano), and red pepper flakes; cook 30–60 seconds until fragrant. Add tomato paste and cook, stirring, 1–2 minutes until it darkens to a rust color and coats the vegetables.
Step 4: Deglaze the pot
Pour in the white wine (or broth) and scrape up all the browned bits from the bottom of the pot with a wooden spoon. Let the liquid reduce by about half, 1–2 minutes.
Step 5: Add tomatoes, broth, beans, and herbs
Stir in crushed tomatoes, chicken broth, bay leaf, thyme, rosemary, and the Parmesan rind if using. Return the browned sausage and any juices to the pot. Add the mashed beans and the remaining whole beans. Bring to a boil over medium-high heat, then reduce to a steady simmer. Partially cover and cook 15–20 minutes, stirring occasionally, until the broth is slightly thickened and the flavors have melded. Taste and season with 1/2–1 tsp kosher salt as needed.
Step 6: Wilt the greens and finish
Stir in the chopped kale and simmer until tender, 5–8 minutes. If using baby spinach, add it and cook just until wilted, 1–2 minutes. Remove and discard the bay leaf, herb stems, and Parmesan rind. Stir in the red wine vinegar or lemon juice and the black pepper. Taste and adjust salt.
Step 7: Serve
Ladle the soup into warm bowls. Top with chopped parsley and a generous snowfall of grated Parmesan. Finish with a light drizzle of good olive oil and serve with warm crusty bread.
Pro Tips
- Brown the sausage well. Deep browning builds the savory backbone of the soup. Don’t rush it.
- Toast the tomato paste. Letting it darken concentrates its sweetness and adds umami.
- Mash some beans. The mashed cup of beans gives the broth body without cream.
- Use a Parmesan rind. It quietly infuses nutty depth. Keep a few in your freezer for soups like this.
- Season in layers. A pinch of salt with the vegetables and another at the end yields better balance.
Variations
- Vegetarian and smoky: Skip the sausage. Sauté 12 oz (340 g) chopped cremini mushrooms in olive oil until browned, add 1 tsp smoked paprika, and use vegetable broth.
- Spicy Tuscan spin: Use hot Italian sausage, add 1–2 tsp Calabrian chile paste with the tomato paste, and finish with lemon zest and extra rosemary.
- Pasta e fagioli style: Cook 1/2 cup small pasta (ditalini) separately. Add to bowls, then ladle soup over so the pasta doesn’t over-soften in leftovers.
Storage & Make-Ahead
Refrigerate cooled soup in airtight containers up to 4 days. It thickens as it rests; thin with a splash of water or broth when reheating. Reheat gently on the stovetop until steaming and 165°F. Freeze up to 3 months (for best texture, freeze without greens, then add fresh kale or spinach when reheating). If you add pasta, store it separately.
Nutrition (per serving)
Approximate values: 450 calories; 20 g protein; 25 g fat (9 g saturated); 35 g carbohydrates; 6 g fiber; 980 mg sodium. Values will vary based on sausage, broth, and salt usage.
