The expired-contracts point is the one that matters most for backtesting: if an API drops contracts the moment they expire, any historical options backtest quietly becomes survivorship-biased, because you only ever see the contracts that lived long enough to be recorded. The batching fix for the 429s is straightforward, but I am curious about the other failure mode you mention, the crumb authentication breakages mid-run. Does moving to a stable API endpoint sidestep that entirely because there is no scraped web session to break, or is there still retry logic needed on the client side when a batched request fails halfway through a screener run?