Traditional Flemish Tomato soup with small meatballs

Traditional Flemish Tomato soup with small meatballs

This Belgian grandmother's tomato soup with meatballs uses a special cold-start poaching method that keeps the veal-pork balletjes incredibly tender. The vibrant tomato-vegetable base gets its authentic home-cooked flavor from chicken bouillon cubes. Total time is about 1 hour, serving 4 people with plenty of tender meatballs in every bowl.

Quick Info

Prep Time
15 min
Active Time
20 min
Total Time
1 hr
Difficulty
Easy
Serves
4
Cost Level
$$
Make-Ahead
Yes

Why Does Starting Cold Make the Meatballs So Tender?

Traditional Flemish technique shows that placing meatballs in cold water and heating them slowly prevents the outer proteins from seizing up instantly. When you drop meat into boiling water, the outside firms up fast and can become rubbery, but the gentle rise in temperature lets the proteins set evenly throughout.

Food science shows that the pork fat and veal proteins naturally bind together when heated gradually, so you don't need eggs or breadcrumbs. The cold-start method gives these natural binders time to mesh, creating meatballs that hold together beautifully despite being completely unseasoned.

Belgian home cooks know that chicken bouillon cubes provide that specific savory depth without overpowering the delicate veal. This isn't cheating—it's the authentic flavor profile that makes this soup taste like it came straight from a Flemish kitchen, not a fancy restaurant.

Ingredients

Recipe yields 4 servings

For the Meatballs

500 g (50% veal, 50% pork) mixed ground meat
the pork fat keeps them moist while veal provides delicate texture
1.5 L (6 cups) cold water
for poaching the meatballs

For the Soup Base

1.5 kg (about 10-12 medium tomatoes) fresh vine-ripened tomatoes
roughly chopped; use very ripe tomatoes for natural sweetness
200 g (about 2 medium carrots) carrots
chopped; provides natural sugar to balance acidity
200 g (about 2 medium onions) onions
chopped
150 g (about 1 medium leek) leeks
white and light green parts only, chopped
100 g (about 2 stalks) celery stalks
chopped
70 g (about 4 tablespoons) tomato paste
to deepen the color and umami
30 g (2 tablespoons) butter
for sautéing the aromatics
20 g (about 2 cubes) chicken bouillon cubes
standard home-cook pantry staple
5 g (1 teaspoon) salt
optional, for final seasoning

For Garnish

10 g (2 tablespoons) fresh parsley
finely chopped

Instructions

Prepare and Poach the Meatballs

  1. 1

    Roll the Meatballs (Keep Them Pure)

    Roll the mixed veal and pork into small balls about 1.5 cm (just over half an inch) in diameter—roughly the size of a large marble. Don't add egg, breadcrumbs, or spices. The purity of the meat is what gives these their traditional delicate flavor.

  2. 2

    Start Cold (The Tenderness Secret)

    Place the meatballs in a pot and cover them completely with the cold water. Turn the heat to medium-low and bring to a very gentle simmer around 185°F / 85°C—you'll see tiny bubbles but no rolling boil. Starting from cold ensures the proteins set slowly, resulting in much softer meatballs than dropping them into boiling water would give you.

  3. 3

    Remove When They Float

    Once the meatballs float to the surface—usually 2-3 minutes after the water begins to simmer—they're cooked through. Remove them with a slotted spoon and set aside. Keep the poaching liquid; it's now a light meat broth that will become your soup base.

Build the Soup Base

  1. 4

    Sauté the Vegetables (Create the Foundation)

    In a large heavy-bottomed pot, melt the butter over medium heat. Add the onions, leeks, celery, and carrots and cook for 5-7 minutes until softened but not browned. This vegetable base—similar to an Italian soffritto—creates the flavor foundation that makes the soup taste rich and complex.

  2. 5

    Cook the Tomato Paste (Remove the Raw Taste)

    Stir in the tomato paste and cook for 2 minutes, stirring constantly. This step removes the raw metallic taste and deepens the color. You'll notice the paste darkens slightly and smells sweeter.

  3. 6

    Add Tomatoes and Liquid

    Add the chopped fresh tomatoes, the reserved poaching liquid, and the chicken bouillon cubes. Stir everything together and bring to a gentle simmer. The bouillon cubes will dissolve and give you that authentic Belgian home-cooked flavor.

Finish and Serve

  1. 7

    Simmer Until Soft (Build the Flavor)

    Simmer the soup for 30-40 minutes until all the vegetables are completely soft and falling apart. This long, gentle cooking breaks down the vegetables and creates a naturally sweet, rich base without needing any added sugar.

  2. 8

    Blend Until Smooth (Keep It Rustic)

    Use an immersion blender to puree the soup until smooth right in the pot. Don't pass it through a sieve—keeping it rustic preserves all the nutrients and fiber, just like a traditional home-cooked meal. The texture should be thick and velvety.

  3. 9

    Add Meatballs and Heat Through

    Return the smooth soup to medium-low heat, add the cooked meatballs, and warm everything through for 3-5 minutes. Taste and add a pinch of salt if needed, but the bouillon cubes usually provide enough seasoning.

  4. 10

    Serve with Plenty of Balletjes

    Ladle into deep bowls, making sure everyone gets plenty of meatballs. Garnish with fresh chopped parsley for a bright pop of color and freshness.

Tips & Tricks

If your meatballs fall apart during cooking: Make sure you're starting with cold water and heating very slowly. The gradual temperature rise lets the natural proteins bind. Also, don't stir them while they're cooking—let them set undisturbed until they float.

If you don't have fresh tomatoes: Use one 800 g can of whole peeled tomatoes plus one 400 g can. Drain them slightly and chop before adding. Fresh gives a brighter flavor, but canned works in a pinch and still tastes delicious.

If your soup tastes too acidic: The carrots provide natural sweetness to balance the tomatoes, but if it's still too tart, add another chopped carrot and simmer 10 more minutes. Avoid adding sugar—the vegetables should do the work.

If you can't find veal: Use a mix of 50% pork and 50% ground chicken or turkey instead. You'll lose some of the traditional delicate flavor, but the cold-start method will still give you tender meatballs.

If the soup is too thick after blending: Thin it with a bit of the reserved poaching liquid or plain water, adding 1/4 cup at a time until you reach your preferred consistency. It should coat a spoon but still be pourable.

If you want to make this ahead: This soup tastes even better the next day. Store it covered in the fridge for up to 3 days. Reheat over low heat—around 160°F / 71°C—so the meatballs don't become tough from high heat.

Frequently Asked Questions

Why don't the meatballs fall apart without egg or breadcrumbs?

The combination of pork fat and veal proteins naturally bind when heated gently. The cold-start poaching method is crucial—it allows the proteins to mesh slowly as the temperature rises, creating a natural bond that holds the meatballs together beautifully without any binders.

Can I use canned tomatoes instead of fresh?

Yes, use about 1.2 kg of high-quality canned whole peeled tomatoes. Fresh vine tomatoes provide a specific bright acidity and garden-fresh flavor that's characteristic of traditional Flemish cooking, but canned tomatoes work well and are actually more consistent year-round.

Why use chicken bouillon cubes instead of homemade beef stock?

In traditional Flemish home cooking, chicken bouillon cubes are the standard for tomato soup. They provide a savory backbone without overpowering the delicate flavor of the veal-pork meatballs. This isn't a shortcut—it's the authentic flavor profile that makes this taste like grandma's kitchen.

How do I store and reheat leftovers?

Store covered in the fridge for up to 3 days. The soup actually tastes better the next day as the flavors meld. Reheat over low heat, stirring gently, to ensure the meatballs don't become tough. Don't microwave on high—use 50% power in 2-minute intervals.

Can I freeze this soup?

Yes, freeze for up to 2 months in airtight containers. The meatballs may become slightly firmer after freezing, but they'll still be tender. Thaw overnight in the fridge and reheat gently on the stovetop rather than in the microwave for best texture.

What if I don't have an immersion blender?

Carefully transfer the hot soup in batches to a regular blender, filling it only halfway each time. Remove the center cap and cover with a towel to let steam escape. Blend until smooth, then return to the pot. A food processor works too but won't get it quite as silky.

Why does the recipe say not to add sugar?

Traditional Flemish cooks rely on the natural sweetness from carrots and ripe tomatoes to balance the acidity. Adding sugar masks the fresh vegetable flavors and makes it taste more like ketchup than authentic tomatensoep. Trust the vegetables to do their job.

Can I make the meatballs larger?

You can, but they'll take longer to cook through and may not have the same delicate texture. The small size—about 1.5 cm—is traditional because they cook quickly and evenly, and you get more meatballs per spoonful, which is part of the charm of this soup.