Operational Runbooks
Daily, weekly, and incident playbooks for performance marketers.
Runbooks for the daily/weekly/incident cadence of a performance marketer running Layers.
Daily — 10 minutes
Open the project dashboard:
- Glance at top KPIs — spend on track, CPA in tolerance.
- Read optimizer activity panel — any pauses worth understanding?
- Skim creative leaderboard — anything new at the top?
- Check tasks widget — anything blocked needing your input?
- Approve any pending creatives in the creative library.
- Glance at wallet — at least 7d runway?
That's it. Trust the optimizer to do the work.
Weekly — 30 minutes
Once a week, deeper read:
- Trend charts — CPA / ROAS / spend over 30d. Healthy trends?
- Creative-fatigue audit — anything running long with declining
metrics? Push to the optimizer for refresh, or
override = 'exclude'. - Per-platform compare — is one platform under-delivering? Why?
- Per-creative ROAS — pick the top 5; can you replicate their structure in next-batch generations? Add to reference posts in brand voice.
- Reconcile attribution — Layers vs platform UI. Drift > 20% is a flag.
- Refresh budgets — adjust ad-set caps based on the week's performance.
Investigating a bad day
CPA suddenly bad? Spend down? Conversions missing?
- Open the events page
(SDK events) — 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.
- Check the optimizer activity panel — was there a recent pause that decimated the eligible pool?
- Check ad-account health — Meta restriction? Spend cap hit?
- Check wallet — auto-top-up failed?
- Check global schedules — if a metrics-sync workflow is failing, the optimizer might be acting on stale data. See the workflow runs panel.
- Roll forward, not back — almost never useful to "rollback" a campaign. Diagnose and adjust forward.
Stopping everything
Layers does not ship a single org-wide "crisis pause" toggle today. To stop activity quickly:
- Pause each ad layer individually via Layer settings → Pause (optimizer continues collecting metrics but takes no actions).
- 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
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).
- 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
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 entry for the bump to understand what changed. If you disagree with the new scoring, use overrides to enforce your preferred selections.