Preheat the oven to 400°F and line a large baking sheet with parchment paper.
Add the meatball ingredients to a large bowl and use a spoon or clean hands to mix well. Use a tablespoon to scoop out the meatballs and roll them into 3/4 - 1 inch balls. Wet your hands slightly if the meatballs are sticking to your hands.
Drop them on the prepared baking sheet and bake in the preheated oven for 10-12 minutes, until the meatballs reach an internal temp of 165.
While the meatballs are cooking, start the soup. Add the olive oil to the bottom of a large stock pot or dutch oven over medium-high heat. When it’s hot and shimmering, add the chopped onion, celery and carrots and cook for 3-4 minutes until they’re soft and the onion is translucent. Add the minced garlic and thyme and cook for another minute.
Pour in the diced tomatoes, tomato sauce, and 4 cups of beef broth. Stir it well then add the basil pesto, red pepper flakes, and parmesan rind if using.When the meatballs are done cooking, carefully transfer them to the soup.
Increase the heat to high to bring the soup to a boil. Once it's boiling, cook according to the package directions until al dente, stirring occasionally to prevent sticking.
When it’s done, remove the parmesan rind and turn the heat down to medium-low and stir in basil and spinach, if using. Taste and add salt and pepper as needed. Add up to 2 cups more beef stock if needed to reach your desired consistency.
Serve the soup warm with parmesan cheese, more fresh basil and crusty bread if desired.