In a large bowl, whisk together the eggs, milk, salt, and pepper until well combined; set aside.
Heat butter and oil over medium heat in a 10-inch cast iron skillet or other oven-safe skillet until sizzling. Add shallots; cook and stir 2-3 minutes, until soft and translucent. Add the spinach, in 4 or 5 additions, stirring as you go until it wilts. Increase heat to medium-high; cook, stirring often, 4-5 minutes or until the liquid releases and mostly evaporates.
Whisk egg mixture once more and pour evenly over spinach. Remove from heat and arrange tomato slices in a single layer over egg and spinach; sprinkle with cheese.
Bake 20 minutes then broil for 3-4 minutes to lightly brown cheese, OR skip the broiling and continue to bake another 2-5 minutes until the center is set and the frittata has puffed. Remove from oven and let stand 5 minutes before slicing into wedges. Serve.