# Operational Runbooks (/docs/paid-media/runbooks)



Runbooks for the daily/weekly/incident cadence of a performance marketer
running Layers.

## Daily — 10 minutes [#daily--10-minutes]

Open the [project dashboard](/docs/projects/dashboard):

1. **Glance at top KPIs** — spend on track, CPA in tolerance.
2. **Read optimizer activity panel** — any pauses worth understanding?
3. **Skim creative leaderboard** — anything new at the top?
4. **Check tasks widget** — anything blocked needing your input?
5. **Approve any pending creatives** in the
   [creative library](/docs/paid-media/creative-library).
6. **Glance at wallet** — at least 7d runway?

That's it. Trust the optimizer to do the work.

## Weekly — 30 minutes [#weekly--30-minutes]

Once a week, deeper read:

1. **Trend charts** — CPA / ROAS / spend over 30d. Healthy trends?
2. **Creative-fatigue audit** — anything running long with declining
   metrics? Push to the optimizer for refresh, or `override = 'exclude'`.
3. **Per-platform compare** — is one platform under-delivering? Why?
4. **Per-creative ROAS** — pick the top 5; can you replicate their
   structure in next-batch generations? Add to reference posts in
   [brand voice](/docs/social/brand-voice#reference-posts).
5. **Reconcile attribution** — Layers vs platform UI. Drift > 20% is a
   flag.
6. **Refresh budgets** — adjust ad-set caps based on the week's
   performance.

## Investigating a bad day [#investigating-a-bad-day]

CPA suddenly bad? Spend down? Conversions missing?

1. **Open the events page**
   ([SDK events](/docs/events/feed)) — are conversions arriving?
   * YES → it's an ad-side issue (audience exhaustion, bad creative,
     platform issue).
   * NO → it's an attribution issue. Check pixel, CAPI, vault, app
     deploy.
2. **Check the optimizer activity panel** — was there a recent pause
   that decimated the eligible pool?
3. **Check ad-account health** — Meta restriction? Spend cap hit?
4. **Check wallet** — auto-top-up failed?
5. **Check global schedules** — if a metrics-sync workflow is failing,
   the optimizer might be acting on stale data. See the workflow runs
   panel.
6. **Roll forward, not back** — almost never useful to "rollback" a
   campaign. Diagnose and adjust forward.

## Stopping everything [#stopping-everything]

Layers does not ship a single org-wide "crisis pause" toggle today. To
stop activity quickly:

1. Pause each ad layer individually via **Layer settings → Pause**
   (optimizer continues collecting metrics but takes no actions).
2. For scheduled organic posts, pause the Social Distribution layer.

If you need a true emergency stop across an Org, contact support —
platform-side campaign pause via API can be requested.

## Reconciling Layers vs platform UI [#reconciling-layers-vs-platform-ui]

Numbers will rarely match exactly. Common reasons for divergence:

* **Time zone** — Layers uses your project timezone; platform UI may use
  ad-account timezone.
* **Attribution window** — Layers reports CAPI-corrected; platform UI
  may include modeled conversions.
* **Refresh lag** — platform UI is real-time; Layers' ads metrics sync
  runs every 6 hours (staggered 15 min per platform — see
  [global schedules](/docs/concepts/scheduler)).
* **Counted differently** — Meta's "purchase" may include both
  client-Pixel and CAPI; Layers shows the deduped CAPI side only.

If divergence > 30% persists for >24h, file with support. Layers' source
of truth is `sdk_events` (your conversions); platform-reported numbers
are reconciled against it.

## Scoring version bump [#scoring-version-bump]

When the scoring algorithm version increments, every `ads_content` row is
rescored on the next cycle. You'll see:

* A notification: "Scoring version bumped to vN. See changelog."
* Some creatives jumping above / below threshold.
* The optimizer adjusting selections accordingly over the next few
  cycles.

Read the [changelog](/docs/api/operational/changelog) entry for the bump to
understand what changed. If you disagree with the new scoring, use
overrides to enforce your preferred selections.
