Preheat the oven to 400°F (200°C).
In a mixing bowl, combine ground beef, breadcrumbs, Parmesan, egg, minced garlic, parsley, salt, and pepper. Mix until all ingredients are well combined.
Form the mixture into small meatballs, about 1 inch in diameter, and place them on a baking sheet.
Bake the meatballs in the preheated oven for 15 minutes, or until browned and cooked through.
While the meatballs are baking, heat olive oil in a large pot over medium heat. Add chopped onion, carrots, and celery. Sauté for about 5-7 minutes until softened.
Pour in the chicken broth and diced tomatoes along with their juices. Stir in dried Italian herbs, salt, and pepper. Bring the mixture to a simmer.
Once the meatballs are cooked, gently add them to the soup. Allow the soup to simmer for an additional 10-15 minutes to let the flavors meld.
If using spinach, add it to the soup just a few minutes before serving, and stir until wilted.
Serve warm, ladled into bowls.