If you ask me, a bowl of creamy potato soup is one of life’s simple pleasures.
This hearty ham and bacon potato soup is the kind of dish that warms you up from the inside out. Tender potato cubes swim in a rich, velvety broth loaded with crispy bacon and chunks of ham.
It’s seasoned with garlic, thyme, and a hint of nutmeg, then finished with cream and melted Velveeta for that extra smooth texture. Fresh parsley on top adds a nice pop of color and freshness.
It’s a satisfying meal that feeds a crowd, perfect for chilly evenings when you want something stick-to-your-ribs good.

Why You’ll Love This Ham and Bacon Potato Soup
- Loaded with flavor – The combination of smoky bacon and savory ham creates a rich, hearty soup that tastes like comfort in a bowl.
- Perfect for feeding a crowd – This recipe makes a big batch, so it’s great for family dinners or meal prep for the week ahead.
- Uses leftover ham – Got extra ham from the holidays? This soup is the perfect way to use it up without any waste.
- Creamy and satisfying – The velvety texture from the cream and cheese makes this soup filling enough to be a complete meal on its own.
- Great for cold weather – This warming soup is exactly what you need on a chilly day when you want something cozy and comforting.
What Kind of Potatoes Should I Use?
For this soup, you’ll want to reach for russet or Yukon gold potatoes, which are both great options. Russets will break down a bit more as they cook, giving you a naturally thicker, creamier soup, while Yukon golds hold their shape better if you prefer chunkier potato pieces. Either way, make sure to peel and cube them into similar-sized pieces so they cook evenly. If you’re in a pinch and only have red potatoes on hand, they’ll work too, though they tend to stay firmer and won’t give you quite the same creamy texture as russets.

Options for Substitutions
This soup is pretty forgiving when it comes to swapping ingredients:
- Potatoes: Russet potatoes are ideal for their starchy texture that helps thicken the soup, but you can use Yukon golds for a creamier result. Red potatoes work too, though they’ll hold their shape more and won’t break down as much.
- Bacon and ham: You can use just bacon or just ham if that’s what you have. Turkey bacon works as a lighter option, or try diced smoked sausage for a different flavor profile.
- Velveeta: If you’re not a fan of Velveeta, swap it with 2 cups of shredded cheddar cheese. Just add it off the heat and stir until melted to prevent it from getting grainy.
- Heavy cream: You can use half-and-half for a lighter version, or substitute with additional milk plus 2 tablespoons of butter for richness. Sour cream also works – just stir it in at the end.
- Chicken bouillon: Feel free to use vegetable or beef bouillon instead, or replace with 1 cup of actual chicken stock (just reduce the milk by 1 cup to compensate).
- Fresh garlic: In a pinch, use 1 tablespoon of garlic powder, though fresh garlic does give better flavor in this soup.
Watch Out for These Mistakes While Cooking
The biggest mistake when making potato soup is adding the dairy too quickly or at too high a temperature, which can cause the milk and cream to curdle – always add them slowly over medium-low heat while stirring constantly.
Another common error is not draining enough grease from the bacon and ham, which leaves a greasy film on top of your soup, so make sure to pat the meat with paper towels after cooking.
When making the flour and butter roux, don’t rush it or skip stirring for those few minutes, as this cooking time removes the raw flour taste and helps thicken your soup properly.
Finally, cut your potatoes into similar-sized pieces so they cook evenly, and resist the urge to mash all of them – leaving half chunky gives your soup a better texture and makes each bowl more satisfying.

What to Serve With Ham and Bacon Potato Soup?
This hearty soup is pretty filling on its own, but I love serving it with a warm, crusty bread bowl or some buttery dinner rolls for soaking up all that creamy goodness. A simple side salad with mixed greens, cherry tomatoes, and a light vinaigrette helps balance out the richness of the soup and adds a nice fresh crunch. If you want to make it a full meal, cornbread or biscuits are also great options – they’re perfect for dunking and add a slightly sweet contrast to the savory, smoky flavors. For gatherings, I’ll sometimes set out some shredded cheddar cheese, extra bacon bits, and chopped green onions so everyone can customize their bowl.
Storage Instructions
Store: This soup keeps really well in the fridge for up to 4 days in an airtight container. It actually tastes even better the next day once all the flavors have had time to hang out together. Just give it a good stir before reheating since the cream might separate a bit.
Freeze: You can freeze this soup for up to 2 months, but keep in mind that cream-based soups sometimes get a little grainy when thawed. If that happens, just give it a quick blend with an immersion blender and it’ll smooth right back out.
Reheat: Warm it up gently on the stove over medium-low heat, stirring often so the cream doesn’t break. You can also microwave individual portions on 50% power, stopping to stir every minute or so. Add a splash of milk if it seems too thick after storing.
| Preparation Time | 20-30 minutes |
| Cooking Time | 50-70 minutes |
| Total Time | 70-100 minutes |
| Level of Difficulty | Medium |
| Servings | 8 servings |
Estimated Nutrition
Estimated nutrition for the whole recipe (without optional ingredients):
- Calories: 4000-4400
- Protein: 150-170 g
- Fat: 250-270 g
- Carbohydrates: 280-300 g
Ingredients
For the soup base:
- 9 potatoes (peeled and cut into 1/2-inch cubes)
- 3 celery stalks
- 1 head garlic (cloves peeled and finely minced)
- 1 tsp thyme
- 1 tbsp chicken bouillon (I use Better Than Bouillon for richer taste)
- 1.25 lb bacon
- 2 onions
- 10 oz ham (diced into 1/4-inch pieces)
For the cream sauce:
- 4 tbsp butter (I prefer Kerrygold for extra richness)
- 6 tbsp flour
- 3 cups milk
- 16 oz cream
- 2 tsp salt
- 2 tsp pepper
- 1/4 tsp ground nutmeg
- 8 oz velveeta (cubed to help it melt faster)
- fresh parsley
Step 1: Prepare the Mise en Place
- 9 potatoes
- 2 onions
- 3 celery stalks
- 1 head garlic
- 10 oz ham
- 1.25 lb bacon
Peel and cut potatoes into 1/2-inch cubes, then set aside in a bowl of cold water to prevent browning.
Dice the 2 onions into medium pieces and chop the 3 celery stalks into 1/4-inch pieces.
Peel and finely mince all garlic cloves from 1 head.
Dice the ham into 1/4-inch pieces and cut the 1.25 lb bacon into bite-sized pieces.
Have all ingredients measured and ready before you begin cooking.
Step 2: Cook the Bacon and Build the Flavor Base
- 1.25 lb bacon
- 2 onions
- 1 head garlic
- 10 oz ham
In a large skillet over medium-high heat, cook the bacon pieces until crispy, about 8-10 minutes, stirring occasionally.
Remove bacon to a paper towel-lined bowl to drain.
Pour off all but about 2 tablespoons of bacon grease, then add the diced onions to the same skillet and sauté until softened and golden, about 5 minutes.
Add the minced garlic and cook for another 30 seconds until fragrant.
Add the diced ham and warm through for about 2 minutes, then transfer the entire mixture to a bowl and set aside.
Step 3: Simmer the Potatoes and Vegetables
- 9 potatoes
- 3 celery stalks
- 1 tsp thyme
- 1 tbsp chicken bouillon
- 8 cups water
In a large pot, add the drained potatoes, celery, 1 tbsp chicken bouillon, 1 tsp thyme, and 8 cups of water.
Bring to a boil over high heat, then reduce to medium and simmer uncovered for 12-15 minutes until the potatoes are fork-tender and celery is soft.
I like to taste a potato piece to ensure it’s fully cooked but not falling apart—this ensures a perfect texture for the finished soup.
Step 4: Make the Roux and Cream Sauce
- 4 tbsp butter
- 6 tbsp flour
- 3 cups milk
- 16 oz cream
- 2 tsp salt
- 2 tsp pepper
- 1/4 tsp ground nutmeg
While the potatoes simmer, melt 4 tbsp butter in a medium saucepan over medium heat.
Once melted and foaming, sprinkle in 6 tbsp flour and whisk constantly for 2-3 minutes to create a light golden roux—this cooks out the raw flour taste.
Slowly add 3 cups milk while whisking continuously to prevent lumps, then pour in 16 oz cream and continue whisking until the mixture thickens, about 3-4 minutes.
Season with 2 tsp salt, 2 tsp pepper, and 1/4 tsp ground nutmeg.
I find that seasoning the cream sauce separately ensures the spices distribute evenly rather than settling in the pot.
Step 5: Combine and Finish the Soup
- cooked potatoes from Step 3
- cream sauce from Step 4
- bacon and meat mixture from Step 2
- 8 oz Velveeta
- fresh parsley
Once the potatoes are tender, use a potato masher to gently smash about half of the potatoes directly in the pot—this creates a thicker, creamier texture while keeping some chunks for body.
Pour the cream sauce from Step 4 into the potato mixture and stir to combine.
Add the cooked bacon and meat mixture from Step 2 along with the 8 oz cubed Velveeta cheese.
Stir constantly over medium heat for 3-4 minutes until the cheese is completely melted and the soup is heated through.
Taste and adjust seasoning as needed, then finish with fresh chopped parsley.
Step 6: Serve and Garnish
Ladle the hot soup into bowls and serve immediately.
Garnish with additional fresh parsley, shredded cheese, or chopped green onions if desired.

Best Ham and Bacon Potato Soup
Ingredients
For the soup base::
- 9 potatoes (peeled and cut into 1/2-inch cubes)
- 3 celery stalks
- 1 head garlic (cloves peeled and finely minced)
- 1 tsp thyme
- 1 tbsp chicken bouillon (I use Better Than Bouillon for richer taste)
- 1.25 lb bacon
- 2 onions
- 10 oz ham (diced into 1/4-inch pieces)
For the cream sauce::
- 4 tbsp butter (I prefer Kerrygold for extra richness)
- 6 tbsp flour
- 3 cups milk
- 16 oz cream
- 2 tsp salt
- 2 tsp pepper
- 1/4 tsp ground nutmeg
- 8 oz velveeta (cubed to help it melt faster)
- fresh parsley
Instructions
- Peel and cut potatoes into 1/2-inch cubes, then set aside in a bowl of cold water to prevent browning. Dice the 2 onions into medium pieces and chop the 3 celery stalks into 1/4-inch pieces. Peel and finely mince all garlic cloves from 1 head. Dice the ham into 1/4-inch pieces and cut the 1.25 lb bacon into bite-sized pieces. Have all ingredients measured and ready before you begin cooking.
- In a large skillet over medium-high heat, cook the bacon pieces until crispy, about 8-10 minutes, stirring occasionally. Remove bacon to a paper towel-lined bowl to drain. Pour off all but about 2 tablespoons of bacon grease, then add the diced onions to the same skillet and sauté until softened and golden, about 5 minutes. Add the minced garlic and cook for another 30 seconds until fragrant. Add the diced ham and warm through for about 2 minutes, then transfer the entire mixture to a bowl and set aside.
- In a large pot, add the drained potatoes, celery, 1 tbsp chicken bouillon, 1 tsp thyme, and 8 cups of water. Bring to a boil over high heat, then reduce to medium and simmer uncovered for 12-15 minutes until the potatoes are fork-tender and celery is soft. I like to taste a potato piece to ensure it's fully cooked but not falling apart—this ensures a perfect texture for the finished soup.
- While the potatoes simmer, melt 4 tbsp butter in a medium saucepan over medium heat. Once melted and foaming, sprinkle in 6 tbsp flour and whisk constantly for 2-3 minutes to create a light golden roux—this cooks out the raw flour taste. Slowly add 3 cups milk while whisking continuously to prevent lumps, then pour in 16 oz cream and continue whisking until the mixture thickens, about 3-4 minutes. Season with 2 tsp salt, 2 tsp pepper, and 1/4 tsp ground nutmeg. I find that seasoning the cream sauce separately ensures the spices distribute evenly rather than settling in the pot.
- Once the potatoes are tender, use a potato masher to gently smash about half of the potatoes directly in the pot—this creates a thicker, creamier texture while keeping some chunks for body. Pour the cream sauce from Step 4 into the potato mixture and stir to combine. Add the cooked bacon and meat mixture from Step 2 along with the 8 oz cubed Velveeta cheese. Stir constantly over medium heat for 3-4 minutes until the cheese is completely melted and the soup is heated through. Taste and adjust seasoning as needed, then finish with fresh chopped parsley.
- Ladle the hot soup into bowls and serve immediately. Garnish with additional fresh parsley, shredded cheese, or chopped green onions if desired.