
Halloween Eyeball Meatball Soup with Mozzarella Eyes
The meatballs come out of the Dutch oven browned on the outside but still raw in the middle, and that’s exactly where they should be. They finish cooking gently in…
Tip: save now, read later.
The meatballs come out of the Dutch oven browned on the outside but still raw in the middle, and that’s exactly where they should be. They finish cooking gently in the tomato broth, so they stay tender instead of drying out while you wait for the soup to come together. This Halloween eyeball meatball soup with mozzarella eyes turns a pot of tomato, pasta, and spinach soup into six bowls with a little spooky personality.
I brown the meatballs in two batches, then use the same pot for the onion, garlic, and broth. Those browned bits left behind add savory depth to the soup without another pan to wash. Ditalini cooks right in the broth, and the spinach goes in at the end so it wilts without disappearing. At serving time, four meatballs per bowl get a mozzarella pearl and an olive slice for each little eye. The finished bowls are hearty, tomato-rich, and fun to set on the table.

Kitchen Note
Brown the meatballs in two batches, and don’t worry if the centers are still raw when they go onto the plate. They finish in the simmering soup, so browning is for the flavorful exterior—not for cooking them through.
Save this Halloween eyeball meatball soup with mozzarella eyes for a festive dinner—the tomato broth, tender meatballs, and mozzarella-and-olive faces make each bowl part of the fun.
Why Ditalini Goes Straight Into the Tomato Broth
Cooking the ditalini in the soup is more than a shortcut: the pasta takes on the tomato and broth flavor as it softens, while its starch gives the liquid a little body. That makes this a satisfying one-pot soup rather than pasta served beside a separate broth. It also means the pasta’s texture depends on timing. Ditalini moves from pleasantly firm to soft if it stays hot in the pot after it’s cooked, so start checking near the end of its simmer instead of leaving the soup unattended.
The broth should still look loose when the pasta is al dente. The noodles continue to take up liquid as the soup sits, especially in leftovers, so the first bowl will be brothier than a bowl reheated the next day. Spinach goes in after the pasta and meatballs are ready; it needs only a minute or two to wilt. That short finish keeps the greens visible and gives the soup a fresh contrast against the tomato base.
The Meatball, Tomato, and Spinach Choices That Shape Every Spoonful

- Ground beef, breadcrumbs, Parmesan, milk, and egg — The beef gives the meatballs their savory base, while fine breadcrumbs, milk, and egg help hold the mixture together without making it tough. Finely grated Parmesan blends evenly into the small meatballs and seasons them throughout. Mix only until everything comes together; a heavy hand makes a firmer meatball.
- Yellow onion and garlic — Finely chopped onion softens quickly and becomes part of the soup base rather than a big crunchy bite. Mince the garlic so it disperses through the broth; it needs only a brief cook before the liquids go in, since scorched garlic can turn bitter.
- Low-sodium chicken broth and crushed tomatoes — The broth keeps the soup savory without making it too salty as the liquid reduces slightly around the pasta. Crushed tomatoes give the broth a thicker, tomato-forward texture than a clear stock would. A can of crushed tomatoes is convenient here; there’s no need to puree it further.
- Ditalini and baby spinach — Ditalini’s small shape fits easily on a spoon with a meatball and broth. Baby spinach wilts quickly, so add it only after the pasta is cooked. If you leave out the ditalini for a lower-carb bowl, the soup will be thinner and more broth-forward.
- Mozzarella pearls and black olive slices — Drained mozzarella pearls make round, soft eyes, and the olive slices supply the dark centers that make the decoration read clearly. Keep the pearls whole and add the olive slices at serving; chopping either one makes the eyes harder to assemble.
Brown the Meatballs First, Then Let the Pasta Finish in the Soup
Mix and Shape Tender Meatballs
In a large bowl, gently combine the ground beef, breadcrumbs, Parmesan, milk, egg, part of the salt, and part of the pepper until no dry patches remain. Stop mixing as soon as the ingredients are evenly distributed; compacting the beef can make the finished meatballs dense. Shape the mixture into 24 meatballs, each about 1 1/4 inches across. Keeping them close in size helps them cook at the same pace in the soup.
Brown in Two Batches
Heat a 6-quart Dutch oven over medium heat and brown the meatballs in two batches, turning occasionally, for 5–6 minutes per batch. Give them room to make contact with the pot; crowding makes it harder to brown them evenly. You’re looking for browned patches on the outside, not fully cooked centers. Transfer each batch to a plate while the centers are still uncooked.
Build the Broth and Cook the Pasta
Spoon off all but 1 tablespoon of drippings from the pot, then add the finely chopped onion and cook over medium heat for 4–5 minutes, until softened. Stir in the minced garlic for 30 seconds, then add the chicken broth, crushed tomatoes, Italian seasoning, and the remaining salt and pepper. Bring the soup to a boil, return the meatballs, and add the ditalini. Reduce the heat to a gentle simmer and cook uncovered for 10–12 minutes, stirring occasionally, until the pasta is al dente and the meatballs reach 160°F in the center.
Wilt the Spinach and Make the Eyes
Stir in the baby spinach and cook for 1–2 minutes, just until the leaves wilt into the hot soup. Ladle the soup into six bowls and arrange four meatballs on top of each serving. Press a drained mozzarella pearl onto each meatball, then top each pearl with a black olive slice. Serve immediately so the little eyes stay in place and the pasta doesn’t keep softening in the hot pot.
Two Ways to Change the Eyeball Soup Without Losing Its Base
A lower-carb bowl without ditalini
Leave out the ditalini and keep the meatballs, tomato broth, and spinach. The soup will be less substantial and the broth will stay thinner, but the mozzarella-and-olive eyes still work on top of the meatballs.
A classic meatball soup without the faces
Skip the mozzarella pearls and olive slices and serve the meatballs directly in the tomato soup. You’ll keep the full soup, pasta, and spinach combination, but lose the creamy bites and briny olive contrast from the Halloween decoration.
Storage and Reheating
- Refrigerator: Refrigerate leftovers in a covered container for up to 3–4 days. The ditalini will absorb broth and soften as it sits.
- Freezer: Freeze cooled soup in airtight containers for up to 2–3 months. It’s safe to freeze, though the pasta will be softer after thawing.
- Reheating: Warm gently on the stovetop, stirring occasionally, until hot throughout. Avoid a hard boil, which can make the pasta softer and break up the meatballs.
Questions That Come Up While the Soup Simmeres

Halloween Eyeball Meatball Soup with Mozzarella Eyes
Ingredients
Equipment
Method
- In a large bowl, gently mix the ground beef, breadcrumbs, Parmesan, milk, egg, 1 teaspoon of the salt, and 1/4 teaspoon of the pepper until just combined.
- Shape the mixture into 24 meatballs, about 1 1/4 inches each.
- Heat a 6-quart Dutch oven over medium heat.
- Brown the meatballs in two batches, turning occasionally, for 5-6 minutes per batch.
- Transfer them to a plate while they are still uncooked in the center.
- Spoon off all but 1 tablespoon of drippings from the pot.
- Add the onion and cook over medium heat for 4-5 minutes until softened.
- Add the garlic and cook for 30 seconds.
- Stir in the broth, tomatoes, Italian seasoning, remaining 1/2 teaspoon salt, and remaining 1/4 teaspoon pepper.
- Bring the soup to a boil.
- Return the meatballs to the pot and add the ditalini.
- Reduce the heat to maintain a gentle simmer and cook uncovered for 10-12 minutes, stirring occasionally, until the pasta is al dente and the meatballs reach 160°F in the center.
- Stir in the spinach and cook for 1-2 minutes until wilted.
- Ladle the soup into bowls, arranging four meatballs on top of each serving.
- Press one mozzarella pearl onto each meatball and top each pearl with an olive slice, then serve immediately.