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 about 15 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, add the uncooked pasta and cook for 8-10 minutes, until al dente. Pasta cook time will vary based on the type of pasta you’re using. Check the package directions and adjust cook time as needed, being careful not to overcook the pasta. Stir the soup occasionally to make sure the pasta isn’t sticking to the bottom of the pot.
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.