This is a from-scratch version of Zuppa Toscana — spicy Italian sausage, russet potatoes, and fresh spinach in a broth built from chicken stock, whole milk, and heavy cream. It comes together in one pot in 40 minutes, and the broth is thick enough to feel like a proper meal without any blending or extra steps. If you need a soup that satisfies without complaints at the table, this is a reliable one.
Why this recipe works
Two things carry this recipe. First, the sausage fat is never drained — it stays in the pot and becomes the base for everything that follows, seasoning the broth from the bottom up so you’re not chasing flavour with extra salt later. Second, the potatoes go into the pot before the liquid and spend 2–3 minutes stirring in that rendered fat. That brief contact firms up the exterior slightly, which means the potato pieces hold their shape through 15–20 minutes of simmering instead of turning to mush. Russet potatoes do release starch as they cook, which naturally thickens the broth — no cornstarch, no roux needed.
If something goes sideways
- The broth looks grainy or curdled: This happens when dairy hits a hard boil. Once you add the milk and cream, keep the heat at a steady gentle simmer — small bubbles at the edge, not a rolling boil. If it does curdle slightly, whisk briskly; it won’t fully reverse but it will smooth out enough to serve.
- The soup is thinner than expected: Let it sit off the heat for 5 minutes before serving. The starch from the potatoes continues to thicken the broth as it cools slightly. If it’s still too thin, mash 4–5 potato pieces against the side of the pot and stir them in.
- The sausage is clumping into large chunks: Break it up continuously with a wooden spoon or potato masher in the first 2 minutes of cooking, before it firms up. Once it’s browned and set, it won’t break down further.
- The spinach turned grey and slimy: Spinach only needs 1–2 minutes in residual heat after the pot is off the burner. Add it last, stir once, and serve immediately — don’t leave it sitting in hot soup on the stove.
- It tastes flat despite following the recipe: Spicy Italian sausage varies a lot by brand. If yours is mild, add a pinch of red pepper flakes with the garlic, or increase the Italian seasoning by half a teaspoon. Taste after the potatoes are tender, before you add the spinach — that’s the right moment to adjust salt.
Storage and reheating
Store leftovers in an airtight container in the fridge for up to 3 days. The broth will thicken considerably once cold — that’s normal. Reheat gently on the stovetop over medium-low heat, adding a splash of chicken broth or milk to loosen it back to the right consistency. Stir frequently and don’t let it boil. This soup does not freeze well: the dairy-based broth separates on thawing and the potato texture suffers. Skip the garnish on portions you’re saving — not worth the extra dish — and add fresh Parmesan only when serving.
Creamy Italian Sausage and Potato Soup (Zuppa Toscana)
Ingredients
- 2 tablespoons olive oil
- ½ large onion diced
- 5 cloves garlic minced
- 2 pounds spicy Italian sausage casings removed and crumbled
- 6 large russet potatoes peeled and cut into 1-inch (2.5 cm) pieces
- 3 cups chicken broth
- 2 cups whole milk
- 1 ¾ cups heavy cream
- 2 teaspoons Italian seasoning
- 5 ounces fresh spinach roughly chopped
- ¼ cup Parmesan cheese freshly grated, plus extra for serving
- 1 pinch salt to taste
- 1 pinch black pepper to taste
Instructions
- In a large pot, heat oil, add onion and garlic, and cook until onions are translucent (about 5 minutes.)
- Remove the casings from the Italian sausage and crumble the meat into the pot. Cook over medium-high heat, breaking it into small pieces with a wooden spoon, until browned and no pink remains, about 6–8 minutes. Do not drain the rendered fat.
- While the sausage is browning, peel and cut the potatoes into 1-inch (2.5 cm) pieces.
- Add the diced potatoes to the pot and stir to coat them in the rendered sausage fat. Cook for 2–3 minutes, stirring occasionally, to lightly toast the edges.
- Pour in the chicken broth, milk, heavy cream, and Italian seasoning. Season with salt and black pepper to taste. Bring to a gentle simmer over medium heat (do not boil, or the dairy may curdle). Cook for 15–20 minutes, stirring occasionally, until the potatoes are fork-tender and the broth has thickened slightly.
- Mix in spinach, and remove from heat.
- Ladle into bowls and top with freshly grated Parmesan cheese. Serve immediately.
Notes
- Storage: Refrigerate in an airtight container for up to 3 days. Add a splash of broth or milk when reheating as potatoes may absorb liquid.
- Freezing: Freeze for up to 2 months. Dairy may separate; reheat gently and whisk well to recombine.
- Make-ahead: Prepare through browning the sausage and aromatics, then refrigerate. Add liquids and finish cooking when ready.
- Substitution: Use half-and-half instead of heavy cream for a lighter version, or coconut cream for dairy-free. Mild sausage can be used for less heat.
- Pro tip: Avoid over-stirring once potatoes are simmering to prevent a gluey texture.
Nutrition
Your questions, answered
Can I use mild Italian sausage instead of spicy?
Yes — mild sausage works fine and makes the soup more approachable for kids. To keep some depth of flavour, add a pinch of red pepper flakes to the oil with the garlic, or increase the Italian seasoning by half a teaspoon.
Do I have to use russet potatoes, or can I substitute another variety?
Russets are the best choice here because their high starch content naturally thickens the broth as they cook. Yukon Golds will hold their shape better but produce a thinner broth; red potatoes are too waxy and won’t break down at all.
Can I make this soup ahead of time for dinner later?
Make it up to the point just before adding the spinach, then refrigerate. When reheating, bring it back to a gentle simmer and stir in the fresh spinach at the very end. Adding spinach to soup that will be reheated twice results in an unpleasant texture.
Is there a way to make this without heavy cream?
You can replace the heavy cream with an equal amount of whole milk, though the broth will be noticeably thinner and less rich. Half-and-half is a closer substitute and works well if you want to reduce the fat content without losing the creamy texture entirely.
How do I know when the potatoes are actually done?
Pierce a piece with a fork — it should slide in with no resistance and the potato should just begin to break apart at the edges. If the centre still feels firm, give it another 3–5 minutes and check again before adding the spinach.
More recipes to try
- Creamy New England Clam Chowder
- Sweet Corn Chowder
- Authentic Roman Carbonara
- Rustic Sourdough Focaccia with Rosemary and Sea Salt


















































