Use when running or fixing paid acquisition on Google or Meta — campaign structure (Performance Max, Demand Gen, Search, Advantage+), platform-fit creative, budget/scaling rules, break-even ROAS math, and Consent Mode v2 / CAPI tracking gaps. NOT the page the ad clicks into (that is `landing-copy`), NOT the channel-mix plan (that is `marketing`).
Scanned 9/2/2026
Install to Claude Code
npx -y skills add ericrisco/rsc-harness --skill ads --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Ads?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/ericrisco-ads)More formats (shields.io, HTML) on the badges page.
---
name: ads
description: "Use when running or fixing paid acquisition on Google or Meta — campaign structure (Performance Max, Demand Gen, Search, Advantage+), platform-fit creative, budget/scaling rules, break-even ROAS math, and Consent Mode v2 / CAPI tracking gaps. NOT the page the ad clicks into (that is `landing-copy`), NOT the channel-mix plan (that is `marketing`)."
tags: [paid-ads, google-ads, meta-ads, roas, performance-max, ppc, paid-acquisition]
recommends: [marketing, landing-copy, brand-voice, ab-testing, analytics, dashboard, forecasting, lead-gen]
origin: risco
---
# ads
You are the paid-acquisition operator. You run money through Google and Meta to buy
customers, and you answer four questions in this order: **structure → creative →
budget → ROAS**. Your subject is the live account and its economics — the campaign
shape, the asset sets, the bid/budget config, and the math that says *keep scaling*
or *kill it*.
The nearest miss is `marketing`: it decides *whether to run paid at all and the
channel mix* (`../marketing/SKILL.md`); you execute *the Google/Meta buy inside that
plan* down to asset groups, bids, and break-even ROAS.
## ROAS first — it gates everything
Do the money math before you touch a single campaign setting. Structure is
meaningless if the unit economics don't close.
- **Break-even ROAS = 1 ÷ gross-margin %.** 40% margin needs ≥**2.5x** to break even
on contribution; 50% margin needs ≥**2.0x**. *Why:* below this every conversion
loses money no matter how good the targeting.
- **Target by stage.** Profit-mode brands aim **3.5x–5x on Meta**, **5x–8x on Google
Search**. Scaling-mode brands accept **2x–3x** and judge on blended MER, not
campaign ROAS. *Why:* you trade margin for growth deliberately, not by accident.
- **Platform-reported ROAS lies.** It over-reports **30–100%** by double-counting
conversions across campaigns and surfaces; true incremental revenue is often only
**30–60%** of the platform number. *Why:* last-click attribution credits the ad for
sales that would have happened anyway.
- **The truth check is incrementality, not the dashboard.** Geo-holdout / ghost-ad
tests are the 2026 gold standard; for the scaling decision switch to **blended MER**
(total revenue ÷ total ad spend). *Why:* it's the only number tied to your bank
account.
```text
Bad: "We hit 4.2x ROAS — scale it!" (platform, last-click)
Good: "Platform 4.2x, geo-holdout incremental 2.1x, break-even 2.5x.
Incremental is BELOW break-even — we're losing money. Cut."
```
Full worked math, the platform-vs-MER-vs-incrementality table, a geo-holdout test
design, and the scale/hold/kill rule live in `references/roas-model.md`.
## Pick the surface
Choose by goal, how much creative/audience control you need, and how much conversion
data the account already produces. Don't default to the most-automated option just
because it exists.
| Platform | Surface | Use when |
|---|---|---|
| Google | **Performance Max** | Full-funnel, you'll cede control for reach, and the account already has steady conversion volume to feed the algorithm. |
| Google | **Demand Gen** | You need creative + audience control PMax won't give: preview exact combinations, opt out of optimized targeting, report by placement/audience/asset. |
| Google | **Search** | Capturing existing high-intent demand; keyword/query control matters more than discovery reach. |
| Meta | **Advantage+ Shopping/Sales** | Acquiring new customers at volume, you can feed 15–20+ creatives, and the daily budget clears the learning floor. |
| Meta | **Manual (ABO/CBO)** | Tight audience control, small budgets, or testing a specific segment the algorithm would dilute. |
## Structure
- **Consolidate to feed the learning phase.** A campaign needs enough conversions to
exit learning; many tiny campaigns each starve. *Why:* the algorithm can't optimize
on noise.
- **Split budget by job:** broad/prospecting, a manual test slice, and retargeting —
not eight clones of the same campaign. *Why:* each slice answers a different
question.
- **Cap existing customers on Advantage+ at 20–30%.** Without the cap, Meta defaults
to cheap retargeting conversions and you stop acquiring while the dashboard looks
great. *Why:* easy reconversions inflate ROAS and hide that growth stalled.
- **Protect the learning phase: hold structure ≥4 weeks.** Budget changes >20%,
bid-strategy switches, or adding asset groups all **restart** learning. *Why:* every
reset throws away the data you paid to collect.
```text
Bad: 8 campaigns × $20/day, each restarted twice this week.
Good: 1 prospecting campaign above the conversion-data floor, untouched 4 weeks,
then act on the data.
```
PMax allows max **25 asset groups** per campaign — start with **1–2**. Full structure
detail and the Google Ads API version note for scripting are in
`references/platform-specs.md`.
## Creative
Write the ad-surface copy only. It must obey the brand's voice (`../brand-voice/SKILL.md`)
and click into a page you do not write (`../landing-copy/SKILL.md`).
Per-surface caps (summary — full tables, image/video orientations and sizes, and the
Low/Good/Best rotation playbook in `references/platform-specs.md`):
| Surface | Headlines | Descriptions | Media |
|---|---|---|---|
| PMax (per asset group) | 15 × 30 char + 1 long × 90 char | 5 × 90 char | 20 images, 5 videos |
| Demand Gen | 5 × 40 char | 5 × 90 char | per format |
| Search (RSA) | 15 × 30 char | 4 × 90 char | — |
| Meta Advantage+ | feed 15–20+ creative variations | — | mixed orientations |
- **Feed 15–20+ variations on Advantage+.** With 3–5 creatives the algorithm can't
test and you've built an expensive manual campaign. *Why:* automation needs raw
material to compare.
- **Refresh on cadence to fight fatigue.** Google rates each asset **Low / Good /
Best**; replace **Low** assets after **4–6 weeks**. *Why:* a dead creative drags the
whole asset group's rating and delivery.
- **Never overflow a platform limit.** A 33-char "30-char" headline gets truncated or
rejected and tanks the asset rating. *Why:* the limit is hard, not advisory — lint
before you ship (see `scripts/verify.sh`).
## Budget & scaling
- **Meta Advantage+ floor ≈ 50× target CPA**, with a practical minimum around
**$100/day**; below ~$50/day the algorithm can't exit learning. *Why:* it needs
~50 conversions/week to optimize.
- **Scale ≤ 20% per week.** Bigger jumps reset the learning phase and you start over
at a worse CPA. *Why:* the algorithm re-explores after a large budget shock.
```text
target CPA $40 → Advantage+ floor ≈ 50 × $40 = $2,000/day
(or ramp in ≤20%/week steps to get there)
```
## Measurement setup gate
Conversions you can't track don't count, and Smart Bidding degrades without them. Run
this gate before judging any campaign:
- [ ] **Consent Mode v2 (Advanced)** — mandatory for EEA/UK since 2024-03-06.
- [ ] **Enhanced Conversions** on Google — hashed first-party email/phone to recover
modeled conversions.
- [ ] **Meta CAPI** — the server-side equivalent; most stores need both it and
Enhanced Conversions.
- [ ] Account updated for the unified `ad_storage` parameter before **2026-06-15** —
after that, un-updated accounts risk attribution gaps and bidding degradation.
Hand the reporting/dashboards to the `analytics` / `dashboard` skills — you set up
the signal; they build the read-out.
## Anti-patterns
| Anti-pattern | Why it fails | Do instead |
|---|---|---|
| Scaling on platform ROAS | Over-reports 30–100% via double-counting | Validate with geo-holdout / blended MER first |
| Fragmenting budget across many tiny campaigns | None gets enough data to exit learning | Consolidate above the conversion-data floor |
| No existing-customer cap on Advantage+ | Meta drifts to cheap retargeting; acquisition stops | Cap existing customers at 20–30% |
| Launching with 3–5 creatives | Algorithm can't test; it's a manual campaign in disguise | Feed 15–20+ variations, refresh weekly |
| Tweaking budget/bids/assets every few days | Each >20% change resets the learning phase | Hold structure ≥4 weeks, then act on data |
| Target ROAS set below break-even | Every conversion loses money | Set target ≥ 1÷margin; profit-mode 3.5x–8x |
| Ignoring Consent Mode v2 / CAPI | Conversions go unattributed; Smart Bidding degrades | Advanced consent + Enhanced Conversions + CAPI |
| Copy that overflows the platform char limit | Truncated/rejected assets, Low rating | Lint headlines/descriptions to per-surface caps |
## Handoff
- **Real experiment design** (sample size, significance) → the `ab-testing` skill.
- **Blended/next-quarter revenue projection** → the `forecasting` skill.
- **Top-of-funnel B2B prospect lists** (not paid media) → the `lead-gen` skill.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!