Prep your spinach. If using fresh spinach, chop it finely.
Quickly sauté it in a dry skillet over medium heat until wilted, 1–2 minutes. Let it cool, then squeeze out excess moisture with a clean towel. If using frozen, thaw completely and squeeze very well to remove water.
Preheat your oven. Heat to 400°F (205°C).
Line a sheet pan with parchment paper or lightly oil it. You can also use a wire rack set over a sheet pan for even browning.
Make a quick panade. Stir the milk into the breadcrumbs and let it sit 2–3 minutes until slightly softened. This helps keep the meatballs tender.
Combine the mix. In a large bowl, add the ground beef, squeezed spinach, eggs, softened breadcrumbs, Parmesan, grated onion, garlic, parsley, salt, pepper, Italian seasoning, and red pepper flakes if using.
Mix gently. Use your hands or a fork to combine just until everything comes together. Do not overmix—that’s what makes meatballs tough.
Shape the meatballs. Scoop about 2 tablespoons per meatball (roughly golf-ball size).
Lightly oil your hands to reduce sticking. You should get 20–24 meatballs.
Choose your cooking path. Bake: Arrange on the prepared pan, brush or mist lightly with olive oil, and bake 14–18 minutes, turning once halfway, until browned and cooked through (internal temp 160°F/71°C).
Pan-sear and finish: Brown in a skillet with 1 tablespoon olive oil over medium heat, 6–8 minutes total, turning to color all sides. Finish in a 350°F (175°C) oven 5–8 minutes if needed.
Simmer in sauce: Lightly brown first for flavor, then nestle into warm marinara and simmer gently 10–12 minutes, covered, until cooked through.
Rest and serve. Let the meatballs rest 3–5 minutes so the juices settle.
Serve over pasta, polenta, or greens, or stuff into a toasted roll with sauce and cheese.