Why your ads stop working after 60 days.
It's almost never creative fatigue. The category moved.
The 8 PM scroll.
A founder I worked with last quarter sent me a Slack at 8 PM. "Our best ad just died. CPA doubled in a week. I'm rewriting the hook tonight."
I asked one question back. "Have you checked what your competitors are running this week?"
She hadn't. She rewrote the hook anyway. The new hook performed worse. She rewrote it again. Worse again. Three weeks and $14K of spend later, she stopped, opened Meta's ad library, and pulled every ad from her top six competitors.
Four of them had shipped new angles in the prior 30 days. The category had moved. Her hook hadn't fatigued. It had become wrong.
The mechanism.
Most performance-marketing diagnostics start with the wrong unit. We look at our CTR, our CPA, our ROAS. The audience doesn't see those numbers. The audience sees a feed.
In that feed, your ad sits next to every other ad in the category. If competitor ads have all shifted to a new proof angle, your previous-frame ad reads as outdated even if the creative is identical to last month. The visual is the same. The frame around it changed.
The two failure modes look identical.
Creative fatigue and category drift produce the same dashboard: CPA up, CTR down, ROAS down. Same symptoms, different causes. Treating the wrong one is what costs the next $14K.
Your ad doesn't get old. Its context does.
The move.
Before you rewrite the hook, run a 20-minute category-drift check:
- Pull your top 6 competitors from Meta Ad Library and Facebook Page Transparency. Free, public, 5 minutes.
- Sort their ads by longevity. Note any ad live 60+ days. Note any new ad live under 30 days.
- Map the shift. If 3+ competitors retired long-runners in the same window and shipped new angles, the category just moved. That's a repositioning trigger, not a refresh trigger.
- Read the new angles. What did they move toward? Risk reversal? Founder proof? New objection? That's where the category is forming its next expectation.
- Reposition the offer frame to match the new layer before you write a single new hook. Hook refresh on the old frame won't survive.
When refresh is actually the answer.
Refresh — not reposition — when:
- Your competitors' long-runners are still live. The category hasn't moved.
- You're below $50K/mo spend on small audiences (under 1M reach). Frequency fatigue is real at small scale.
- The ad ran 6+ months and the visual style itself looks dated against the platform's current native aesthetic.
Back to the 8 PM scroll.
The founder eventually repositioned. Same product. New offer frame, rewritten around the proof gap her competitors had just opened up. First month after the reposition: CPA dropped to 70% of the pre-drift baseline. Her hook from six months ago is back in rotation now. Same words. Different category around it.
It wasn't the creative. It was never the creative.
Why do ads stop working after 60 days?
The category around them usually moved. New competitor hooks, new buyer language, and new offer structures shift what the audience expects. Read ad-library longevity on 5 competitors before assuming your creative is the problem.
How long should an ad run before being refreshed?
As long as the category around it stays still. If competitor hooks are surviving 90+ days, your ad is fine. If 3+ competitors shipped new angles in the last 30 days, you're behind the frame even if your CPA looks stable.
Is ad fatigue real?
At small audience sizes, yes. For most ads under $50K/mo spend on audiences over 1M, the bigger signal is category drift, not audience fatigue. Diagnose category first.
What's the difference between creative refresh and repositioning?
Refresh swaps the hook inside the same offer frame. Repositioning changes the frame itself. If competitor offers shifted, refresh won't fix it.
How do I check ad longevity?
Meta Ad Library, Facebook Page Transparency, TikTok Creative Center, LinkedIn Ad Library. All public. All free. Sort by "active since" and note any ad live 60+ days.
Last updated May 31, 2026. Field notes by Alex Lamb, LoopWorker.