# Content Refresh Cycle (/docs/paid-media/refresh-cycle)



Content-refresh workflows run on each ad layer. They:

1. **Disable underperforming ads** on each ad set, subject to guardrails.
2. **Refresh creative pool** — re-run creative selection per ad set to
   pick top-N.
3. **Launch replacements** — push new creatives onto ad sets.
4. **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) [#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_PERFORMER` or `HEALTHY` ads.
* 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 [#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 [#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 [#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 [#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 [#what-youll-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
  `LEARNING` effective status, which Layers reflects as the
  `LEARNING_PHASE` classification.
* 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.
