Mix the meatballs. In a large bowl, combine ground turkey, breadcrumbs, egg, Parmesan, chopped parsley, 2 minced garlic cloves, 1/2 teaspoon salt, and 1/4 teaspoon black pepper. Stir gently with a fork or your hands just until combined. Avoid overmixing so the meatballs stay tender.
Shape the meatballs. Roll the mixture into small balls, about 1 to 1 1/4 inches in diameter.
You should get around 20–24 meatballs. Place them on a plate or tray.
Brown lightly (optional but recommended). Heat 1 tablespoon olive oil in a large pot or Dutch oven over medium heat. Add half the meatballs and brown for 2–3 minutes, turning gently.
They don’t need to cook through. Transfer to a plate and repeat with remaining meatballs. Add another drizzle of oil if needed.
Sauté the aromatics. In the same pot, add diced onion, carrots, and celery with a pinch of salt.
Cook for 5–6 minutes, stirring occasionally, until softened. Add the remaining 2 minced garlic cloves, oregano, and red pepper flakes. Cook for 30 seconds until fragrant.
Build the broth. Pour in the chicken broth and add the bay leaf.
Bring to a gentle boil, then reduce to a lively simmer.
Simmer the meatballs. Gently return the meatballs (and any juices) to the pot. Simmer uncovered for 10–12 minutes until the meatballs are cooked through and tender. Skim any foam if needed.
Add greens and brightness. Stir in the spinach or kale and cook for 2–3 minutes, just until wilted and vibrant.
Add lemon zest and 1–2 tablespoons lemon juice. Taste and adjust seasoning with more salt and pepper.
Optional starch. If using pasta or rice, you have two choices: cook it separately and add to bowls before ladling in the soup (best for storage), or stir 1/2 cup uncooked orzo directly into the simmering soup about 8 minutes before adding the greens.
Finish and serve. Remove the bay leaf. Ladle the soup into bowls.
Top with extra parsley, a sprinkle of Parmesan, and a drizzle of good olive oil if you like. Serve with crusty bread or a side salad.