# Skill: scale-or-pause

## Purpose

Given a campaign or ad set, apply a decision framework and return a single, binary verdict — **SCALE**, **PAUSE**, or **HOLD** — with the exact parameter change to make in Ads Manager or Google Ads UI. No interpretation required. The output is the action.

> **Read-and-recommend only.** This skill never makes changes to the account. All changes are applied manually by the user.

---

## When to Use This Skill

Use when the user says:
- "Should I scale this campaign?"
- "Is this ad set ready to pause?"
- "What do I do with [campaign / ad set name]?"
- "Which campaigns should I increase budget on?"

Do NOT use for: creative decisions (use creative-brief-writer), keyword decisions (use negative-keyword-builder), test design (use test-architect).

---

## Step 0 — Data Inventory

Before applying the framework, confirm:

1. **Platform** — Meta or Google? The decision logic differs.
2. **Entity level** — Campaign or ad set? (Never ad-level — ads don't have budgets.)
3. **Data source** — MCP connected (preferred) or CSV export?
4. **Date range** — Minimum 7 days required. 14 days preferred. Do not call scale/pause on < 7 days of data.
5. **Conversion type** — Ecommerce (ROAS), lead gen (CPL), or app (CPI)? Never mix ROAS and CPL in the same verdict.
6. **Account target** — Ask the user for their ROAS target or CPA target if not visible in the data. The verdict depends on it.

State what you have and what's missing before proceeding.

---

## Decision Framework

### HOLD conditions — check these first

If any HOLD condition is true, output HOLD regardless of performance. Do not proceed to SCALE or PAUSE checks.

| Condition | Rule |
|---|---|
| Entity is < 7 days old | HOLD — insufficient data |
| Entity is in learning phase (Meta: < 50 optimization events in last 7 days; Google: smart bidding strategy active and recently changed) | HOLD — do not disturb learning |
| Budget or bid was changed in the last 48 hours | HOLD — let the system stabilise |
| Only 1–2 conversions in the date range | HOLD — statistically insufficient |

---

### SCALE conditions — Meta

All of the following must be true:

| Signal | Threshold |
|---|---|
| ROAS vs target | ROAS ≥ target × 1.20 (beating target by 20%+) |
| Spend vs budget | Daily spend < 90% of daily budget cap (budget room exists) |
| CTR trend | CTR flat or improving over last 7 days |
| Frequency | Frequency ≤ 3.0 (not yet fatigued) |
| Conversion volume | ≥ 5 conversions in last 7 days (statistically meaningful) |

**Scale action:** Increase campaign budget (CBO) or ad set budget (ABO) by **15–20% only**. Never more in a single move. State the exact new budget value.

---

### SCALE conditions — Google Search / Shopping

All of the following must be true:

| Signal | Threshold |
|---|---|
| ROAS vs target | ROAS ≥ target × 1.20 OR CPA ≤ target × 0.80 |
| Budget utilisation | Campaign hitting daily budget cap on ≥ 4 of last 7 days |
| Impression Share Lost (Budget) | IS Lost (Budget) > 10% (budget is the constraint, not rank) |
| Conversion volume | ≥ 5 conversions in last 7 days |

**Scale action:** Increase daily budget by 15–20%. State exact new budget. If IS Lost (Rank) > IS Lost (Budget), do not scale budget — address Quality Score first.

---

### PAUSE conditions — Meta

Any one of the following is sufficient to recommend pausing:

| Signal | Threshold |
|---|---|
| ROAS vs target | ROAS < target × 0.70 AND ≥ 7 days of data AND ≥ 5 conversions |
| Spend with zero conversions | Spend > 2× the ad set's CPA target and zero conversions |
| Creative fatigue | Frequency > 3.5 AND CTR declining for 10+ consecutive days |
| CPM spike | CPM increased > 40% week-on-week with no improvement in conversions |

**Before pausing, run the top-performer protection check:**
- Is this the only active ad set in the campaign? → Do NOT pause. Kill the campaign instead or add new ad set first.
- Does this ad set contain the account's highest-converting ad? → Do NOT pause the ad set. Flag the issue instead and recommend new creative.

---

### PAUSE conditions — Google Search / Shopping

Any one of the following is sufficient:

| Signal | Threshold |
|---|---|
| ROAS vs target | ROAS < target × 0.70 AND ≥ 7 days AND ≥ 5 conversions |
| Spend with zero conversions | Spend > 2× target CPA and zero conversions in 14 days |
| Quality Score | Average QS ≤ 3 across all keywords AND CPC > 2× account average |
| IS Lost (Rank) | IS Lost (Rank) > 40% AND average QS ≤ 5 — budget increase won't help, fix the account first |

---

## Output Format

```
VERDICT: [SCALE / PAUSE / HOLD]

Entity: [exact campaign or ad set name]
Platform: [Meta / Google]
Date range analysed: [X days]

Key metric:
  Current [ROAS / CPA / CTR]: [value]
  Target: [value]
  vs target: [+/-X%]

Trigger: [the one metric that determined this verdict, in plain language]

Recommended action: [exact change — e.g. "Increase daily budget from $180 to $213 (18% increase)"]
Guardrail: [what to watch in the next 72 hours that would reverse this decision]

Safety note (if applicable): [learning phase reset / top-performer protection / budget decrease warning]
```

---

## Guardrails

- Never recommend a budget increase > 20% in a single move.
- Never recommend pausing the highest-converting entity in a campaign without an active replacement.
- If conflicting signals exist (ROAS is good but frequency is very high), output HOLD with a specific explanation.
- If the user asks to scale multiple entities at once, apply the framework to each individually. Do not aggregate.
- Never call a verdict based on < 7 days of data or < 3 conversions.

---

## Minimum Required Data

| Source | What You Need |
|---|---|
| MCP (GoMarble / Meta / Google) | Campaign or ad set: spend, ROAS or CPA, conversions, CTR, frequency (Meta), daily budget, IS metrics (Google). Date range: 7–14 days. User's ROAS or CPA target. |
| CSV | Campaign or ad set level export with: spend, ROAS or CPA, conversions, CTR, frequency (Meta), budget columns enabled. Plus user's stated target. |

If the user has not stated their ROAS or CPA target, ask before proceeding. The verdict is meaningless without a benchmark.
