Dump the bread crumbs and milk into a bowl and stir until softened. Set aside.
Preheat oven to 350º and line two baking sheets with foil. In a large bowl, combine all meatball ingredients and stir with a wooden spoon until combined. Do not over-mix.
Roll into meatballs, about ½-1” in diameter and transfer to one prepared baking sheet.
Bake until browned and cooked through, 15 minutes, remove from the oven.
In a large pot over medium-high heat, heat the oil. Add the onion, carrots and celery to the pot and cook until soft and golden, 6 minutes. Quickly add garlic and cook until fragrant, 1 minute. Add tomato paste and seasonings and stir until combined, then add tomatoes, beef broth, and milk and stir until everything is mixed together.
Add the meatballs to the pot by gently lowering in with a spoon and bring to a simmer, then add half the mozzarella and all of the Parmesan. Season with salt, and pepper then squeeze in a little lemon and stir again.
Heat the broiler
Ladle soup into four bread bowls and top with remaining mozzarella and broil until browned and bubbly, 2 to 3 minutes. Serve hot with a dash of fresh parsley.
Notes
To make bread crumbs, place bread in a food processor or blender and pulse until it is bread crumbs.