In a large pot or Dutch oven, heat the olive oil over medium heat. Add the onion, garlic, carrots, and celery and cook until the vegetables are softened, about 5 minutes.
Add the tomato paste, oregano, basil, salt, and pepper and cook for 1 minute more.
Add the beef broth and diced tomatoes and bring to a boil. Reduce the heat to low and simmer for 15 minutes.
Meanwhile, in a medium bowl, combine the ground beef, breadcrumbs, egg, Parmesan cheese, and parsley. Mix until well combined. Form the mixture into 1-inch meatballs and set aside.
Add the meatballs to the soup and simmer for 15 minutes more, or until the meatballs are cooked through.
Serve the soup hot, topped with additional Parmesan cheese and freshly chopped parsley, if desired.
Interesting Facts
This soup is a great way to use up leftover ground beef.
Adding a few tablespoons of dry white wine to the soup can give it a richer flavor.
For a vegetarian version, try using vegan beef crumbles in place of the ground beef.