Gently combine the meatball ingredients, don’t overwork the meat. Roll into 3/4-inch balls.
Heat olive oil in a large soup pot over medium-high heat.
Brown the meatballs in batches for about 2 minutes. The middle of the meatballs will finish cooking in the soup. Remove and set aside.
Add the onions, carrots, and celery and soften over medium heat for 6 minutes, until softened. Add a splash of olive oil during cooking if needed.
Add the garlic and Italian seasoning and cook for 1 minute.
Add the chicken broth. Bring to a boil, then reduce to a simmer.
Add the cooked meatballs and simmer gently while you boil the pasta separately until al dente. Drain once cooked through and add the pasta to serving bowls.
Stir in the spinach and cook until wilted, about 2 minutes.
Ladle the soup into serving bowls and garnish with freshly grated Parmesan cheese.