Content Refresh Cycle
Nightly disable+replace cycle that keeps every ad set running fresh, eligible creatives.
Content-refresh workflows run on each ad layer. They:
- Disable underperforming ads on each ad set, subject to guardrails.
- Refresh creative pool — re-run creative selection per ad set to pick top-N.
- Launch replacements — push new creatives onto ad sets.
- Activate — flip the new ads to active.
The global ads-optimize schedule runs daily and fans out per layer.
Per-layer cron overrides are honored if set in project_layers.schedule.
Disable rules (recap)
The disable step pauses ads classified as UNDERPERFORMING or
FATIGUED, subject to:
- Min 3-day age.
- Min $5 total spend.
- Never disable
TOP_PERFORMERorHEALTHYads. - Never leave an adset/adgroup with zero active ads.
- Fallback: ads older than 30 days with no metrics are disabled.
What the refresh DOES NOT do
- It does not raise budgets — that's a separate optimizer pass.
- It does not change targeting / audiences.
- It does not fetch new metrics — that's the global metrics-sync schedule.
- It does not consider organic_score for already-running ads (only for selection of new ones).
Watching the refresh
Open the layer detail → Runs tab → filter to content-refresh
workflow. You'll see one run per night per layer with all activities
logged.
Manual refresh
Layer settings → Refresh now. Triggers an out-of-cycle run. Useful when you've just approved a batch of creatives and want them in the mix immediately.
Per-platform variations
- Meta — refreshes ads within ad sets.
- TikTok — refreshes ads within ad groups; Spark Ads handled identically.
- Apple Search Ads — refreshes ad-group keywords (a different unit than creative; the "creative" for ASA is your App Store listing).
What you'll see in the morning
After a refresh:
- Some ads paused with reason "FATIGUED — replaced".
- New ads activated. On Meta, new ads typically enter the platform's
LEARNINGeffective status, which Layers reflects as theLEARNING_PHASEclassification. - The optimizer's daily summary in the notifications inbox.
A min-age guardrail of 3 days prevents the optimizer from pausing or
adjusting any entity younger than 3 days — so brand-new ads are protected
regardless of how the platform's own LEARNING phase behaves.