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.

Recipe by Clara De Baere-Verburgh
Clara De Baere-Verburgh was a home cook and butcher shop owner who preserved traditional Belgian and Flemish recipes throughout her life. She owned and operated family butcher shops where she crafted homemade charcuterie and traditional meat preparations. Clara's recipes reflect generations of Flemish culinary heritage, emphasizing quality ingredients and time-honored techniques passed down through her family.
Traditional Home Cook & Butcher Shop Owner
Quick Info
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
| Amount | Ingredient | Notes |
|---|---|---|
| 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
| Amount | Ingredient | Notes |
|---|---|---|
| 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
| Amount | Ingredient | Notes |
|---|---|---|
| 10 g (2 tablespoons) | fresh parsley | finely chopped |
Instructions
Prepare and Poach the Meatballs
- 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
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
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
- 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.
- 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.
- 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
- 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.
- 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.
- 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.
- 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.