CBO just chases whatever looks cheap in the moment. Overnight hours show low CPMs because fewer advertisers are bidding, not because those impressions are worth anything to you. It's optimizing for cost efficiency it can measure, not buyer quality it can't.
The good news is you don't have to ditch CBO to fix this. Ad scheduling still works with CBO as long as you're on a bid cap, cost cap, or ROAS goal instead of pure lowest cost - which it sounds like you already are.
What's worked for me:
- Set the campaign to pause during your dead window (midnight to whenever real buyers actually show up)
- CBO still shifts budget freely across ad sets during the remaining hours
- You just stop feeding it cheap-but-useless inventory
Has anyone tested whether pausing overnight hurts the algorithm's learning phase? That's the one thing that always makes me second-guess this approach.