In a large bowl, combine all meatball ingredients. Mix gently with your hands until just combined—don't overwork the meat or the meatballs will be tough.
Roll mixture into small meatballs, about 3/4 inch in diameter (a little smaller than a golf ball). You should get about 40-50 mini meatballs. Place on a plate and set aside.
Heat olive oil in a large pot over medium heat. Add onion, carrots, and celery. Sauté for 6-7 minutes until vegetables are softened.
Add garlic and cook for 1 minute until fragrant, stirring constantly so it doesn't burn.
Pour in the chicken broth and bring to a boil over high heat.
Gently drop meatballs into the boiling broth one at a time. Reduce heat to medium-low and simmer for 10 minutes.
Add the pasta and cook according to package directions, usually 6-8 minutes, until al dente.
Stir in the spinach or escarole and cook for 2-3 minutes until wilted. Season with salt and pepper to taste.
Serve hot with a generous sprinkle of Parmesan cheese on top and crusty bread on the side. This soup tastes even better the next day!