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.
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 |
|---|---|---|
| Performance Max | Full-funnel, you'll cede control for reach, and the account already has steady conversion volume to feed the algorithm. | |
| Demand Gen | You need creative + audience control PMax won't give: preview exact combinations, opt out of optimized targeting, report by placement/audience/asset. | |
| 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.
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.
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_storageparameter 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-testingskill. - Blended/next-quarter revenue projection → the
forecastingskill. - Top-of-funnel B2B prospect lists (not paid media) → the
lead-genskill.