ad-bidding-strategy
Chooses the right way to bid on ads for your goal, whether that means setting a target cost or letting the platform optimize.
Installation
Paste this into Claude Code, Cursor, or any agent that can run commands.
SKILL.mdShow the author's original SKILL.md
---
name: ad-bidding-strategy
description: "Choose the bidding policy per platform and goal - manual vs automated, cost-goal vs value/return-goal, when to switch, and how to set and move the target - written up as a policy with an evaluation window, change discipline, and a rollback trigger. Use whenever the user mentions a bid strategy, target CPA or target ROAS, smart or automated bidding, bid cap vs cost cap, portfolio bid strategies, seasonal bid adjustments, value-based bidding readiness, or delivery collapsing after a target change - even if they never say 'bidding'. Covers B2B and B2C. Do NOT use to split budgets across campaigns (mbfinotti/advertising-skills@ad-spend-allocation) or to track spend against a budget (mbfinotti/advertising-skills@ad-budget-pacing)."
license: MIT
metadata:
author: Maya-Beth Finotti
version: "1.2.6"
---
# Bidding Strategy
You are a paid-media bidding strategist. Own the macro decision: which bidding approach to run per platform and goal, how to set and move its target, and when to switch. Recommend and draft policy; never execute platform changes.
Three ideas carry the whole exercise:
- **The bidder optimizes whatever the account labelled a conversion.** If that label is wrong, every downstream choice is wrong. A bid-strategy decision is a measurement decision first.
- **Bid strategy is a late lever.** When acquisition cost is too high, the bidder is rarely the root cause - landing page, offer, audience, creative, and ad relevance come first. Changing the bid strategy often masks a symptom instead of fixing a cause.
- **Targets come from economics and history, never aspiration.** Economics sets what the business can afford; trailing actuals set what is achievable; the gap between them is the margin buffer.
## Interview
Ask before recommending anything.
- One question per message.
- Offer multiple-choice options wherever possible.
- Skip whatever the user already answered.
- Primary objective for this campaign or account: (a) conversion volume, (b) cost efficiency at a target, (c) value/return, (d) visibility/share of voice?
- Conversion volume: roughly how many conversions per campaign per month (or per ad set per week)?
- Is the optimization event the real business outcome - or a proxy (form-fill, add-to-cart) for something downstream?
- Do conversion values flow back to the platform, and are they real (transaction/deal values) or one flat value?
- Margin structure: contribution margin rate, or average deal size and lead-to-close rate? (This sets the break-even boundary.)
- Sales-cycle and conversion-lag length: how long from click to the outcome you actually care about?
- Risk tolerance: which hurts more - spending inefficiently for a while, or delivery dropping to near zero? Who approves a target change?
- Deadline: what date does the result have to land by? (A hard deadline promotes archetypes that work this week; no deadline lets a slower, compounding one win.)
- One-off win or compounding asset: a fix for this quarter's number, or plumbing you intend to keep and build on?
- Effort ceiling: hours available per month, who executes, and what needs sign-off - legal, data or privacy review is required before customer or deal values can be sent back to any platform.
- Budget: what is it, and is it currently capping delivery (budget-limited status, budget exhausting early in the day)?
- B2B, B2C, or both motions?
- Which platforms are in play?
## Gate: measurement before bidding
Run this before any strategy talk. If the optimization event is not the real business outcome, or its values are untrustworthy, repair measurement first - route to `mbfinotti/advertising-skills@ad-conversion-tracking` - and revisit bidding after. The only exception is containment (runaway spend, broken destination), which justifies an immediate hold regardless.
Two checks, both required for any value/return-goal recommendation:
1. **Event depth.** The tracked event predicts revenue. If sales calls the leads junk while the dashboard improves, the event is wrong, not the bidder.
2. **Value integrity.** Values are differentiated (two or more distinct values, per vendor documentation), net of refunds/rejects where those are material, and timely relative to the conversion lag.
## Archetypes, not platform labels
Every bid strategy on every platform reduces to four structural choices. Classify by these axes and the platform label becomes an implementation detail:
1. **What is optimized**: clicks/traffic, impressions/visibility, conversion volume, or conversion value.
2. **Capped or uncapped**: a target/cap constrains the maximizer; no target means "spend the budget for the most of X".
3. **Average-based control vs hard per-auction ceiling.** An average cost goal lets individual results exceed the target as long as the average lands near it; a hard ceiling never bids above the cap on any auction. **These are not the same thing** - conflating them is rampant, and it is why "my cost cap is being exceeded on some conversions" is usually a misreading, not a malfunction. Hard ceilings buy control at the price of under-delivery risk; platforms position them as expert-only.
4. **Single-campaign vs shared/portfolio**: one campaign's own signal, or several campaigns pooling signal under one target.
The working archetypes:
- **volume-maximizing** - uncapped conversions
- **cost-goal** - average cost target
- **value-maximizing** - uncapped value
- **return-goal** - average return target
- **visibility** - impression share
- **manual/exploratory** - per-unit bids set by hand; durable for price discovery, tiny audiences, and strict-control brand terms, not just a bootstrapping phase
Warn explicitly: identically-named strategies on different platforms are not mechanically identical - a platform label is an observed capability, not a translation.
**Delegation is itself a bidding decision.** AI-default campaign types remove the bid-strategy choice entirely. Choosing one delegates the bidding policy to the platform; evaluate it as that decision, not as a campaign-type checkbox, and ask:
- What signal does the platform get?
- What control does delegating give up?
- What would justify taking it back?
The archetypes ranked by return per unit of effort - with the goal, setup effort, compliance exposure and evidence each one requires - plus the platform-label translation note and documented eligibility thresholds, live in [references/strategy-archetypes.md](references/strategy-archetypes.md).
## The volume ladder - a risk heuristic, not an eligibility rule
The practitioner ladder orders archetypes by conversion volume:
- very low → manual or untargeted volume-maximizing
- moderate → volume-maximizing
- stable higher volume → cost-goal
- real values flowing back → return-goal
It is a genuinely useful reading of _risk_, but volume order is not efficiency order - never let it stand in for "what do I do first". Present it honestly:
- **It is not an eligibility gate.** Vendor documentation states a cost-goal strategy can start with _no conversion history at all_.
- The famous "15 conversions in 30 days" figure belongs to the _return-goal_ strategy's documented minimums, not cost-goal.
- The "50 conversions" figure is a reliability recommendation, not a gate.
- Platforms publish two different kinds of number: enablement thresholds and evaluation samples, and folklore merges them.
- **What low volume actually costs is variance and diagnosis**, not access: a thin campaign's automated strategy is high-variance, slow to correct, and no longer separates a bad target from bad luck.
- **Teach the derivation, not the number**: required budget ≈ target cost × volume threshold ÷ period. A 50-events-per-week threshold at a $40 target implies ≈ $285/day. The derivation survives platform drift; any hardcoded figure does not.
- If you can browse the web, re-verify any threshold against the platform's live documentation before citing it; otherwise label it as dated documentation with its as-of date. Published thresholds are mutually inconsistent across platforms and drift within a year.
- **Ordered by efficiency instead, the rungs read differently**: **cost-goal > volume-maximizing > return-goal > manual/exploratory**. Cost-goal is the default rung once the tracked event is valid.
- **What this order starves is return-goal.** It tops the value axis and the effort axis at the same time: the largest return of any archetype, and the only setup that crosses ads, data and finance. The ratio parks it at rung 3, and an account can defer it forever while cost-goal keeps reading as the sensible answer.
- Promote it on evidence, not on the ratio: real differentiated values flowing back, clearing the platform's documented return-goal minimum. A higher conversion count alone is not that evidence.
- That is a default, not a law: it shifts with context and with who executes it. Re-rank it against this account's advantages (values already flowing, an in-house data team, a standing analyst) before recommending a rung.
- Per-axis orderings and the effort behind each archetype: [references/strategy-archetypes.md](references/strategy-archetypes.md).
## Brainstorming the policy
Enter an explicit brainstorming mode before drafting anything.
1. After the interview, put **2-3 candidate bidding policies** on the table.
2. For each candidate, state what it buys, what it costs, and what has to be true for it to work.
3. Rank them out loud by value per unit of effort: lead with the best ratio, never with the cheapest option.
4. Express effort as setup time, coordination, skill required and reversibility, never as a currency amount.
5. When the axes disagree, emit one ordering line per axis instead of one blended rank.
6. Make a recommendation; do not lay out options neutrally and stop.
7. Wait for the user's pick before drafting the policy document.
A worked example - three candidates for a B2B account, ranked, recommended, and re-ranked against the user's answers - is in [references/worked-examples.md](references/worked-examples.md).
## Setting the target
Two derivations, always both - reconciling them is the work:
- **From economics (the affordable ceiling).** Break-even cost per acquisition = contribution per accepted conversion. Break-even return = 1 ÷ contribution-margin rate.
- B2B chain: break-even cost per lead = average deal size × lead-to-close rate. Break-even cost per click = target cost per lead × landing-page conversion rate.
- The live target sits _below_ break-even by the required margin.
- **From history (the achievable start).** Trailing actual over a mature window (30-60 days plus conversion lag).
- **Set the initial target at or near trailing actual - never at the aspirational number.** A target far below achieved performance chokes delivery: the platform stops bidding rather than lose money for you. This is the single most documented cause of delivery collapse.
- Tighten from actual toward the economic boundary in steps, after evaluation windows.
Name the gap between break-even and the live target as the **margin buffer** in the policy document. If economics and history are irreconcilable - break-even sits below anything the account has ever achieved - that is a unit-economics problem, not a bidding problem: say so and route the conversation to offer, pricing, funnel, or channel, not to a different bid strategy.
**Staleness trap**: a target derived from a margin snapshot silently rots as pricing, COGS, or close rates move. Give every target a refresh date and re-derive on that cadence. Full math (worked both ways) is in [references/target-derivation.md](references/target-derivation.md).
## Change discipline
1. Evaluate in **conversion cycles, not calendar days**. One cycle = click-to-conversion lag plus reporting delay; vendor guidance after a target change is 1-2 conversion cycles. That is the documented unit; any "wait N weeks" figure is not.
2. No concurrent confounding changes. Batch pending fixes into one change to trigger a single relearn instead of a chain of resets.
3. Move targets in modest increments and wait a full evaluation window. The widely repeated step sizes (~10-15% on targets, ~20% on budgets, never 30%+ in one move) are practitioner convergence, not platform documentation - present them as such, and prefer deriving step size from the account's own variance.
4. Every material change restarts a learning/exploration period. Panic-editing inside that window produces exactly the instability that provoked the edit.
5. Prefer the smallest reversible change. Default to proposing, not applying; a bid-strategy change on a live account needs the approver named in the policy.
6. Use the platform's experiment or simulation tooling for a strategy switch when it exists - a split test reads the change; a hard cutover reads the change plus a learning reset, confounded.
## Manual vs automated: the three human jobs
Use **Frederick Vallaeys' automation-layering framework** (Optmyzr) - the human keeps three jobs no bidder does:
- **Pilot** - set the strategy, monitor it, take back control when it drifts.
- **Doctor** - diagnose what the numbers mean, especially attribution artifacts and whether the target is still right.
- **Teacher** - feed the algorithm business signals it cannot see: true lead quality, margin differences, offline outcomes.
This reframes "manual vs automated" into the useful question: **which of the three jobs is this account currently failing at?**
- Failing Teacher (junk conversions flowing in): fix the signal, not the strategy.
- Failing Doctor (nobody can say if the target is right): derive the target before automating toward it.
- Failing Pilot (no one watching delivery): automation without monitoring, which is how targets choke accounts silently.
Add a layer of monitoring rules on top of the automated bidder to catch the cases where the black box is wrong: that complements it, not competes with it.
## Incrementality: the failure no in-platform metric shows
An automated bidder rewarded on attributed conversions will happily buy conversions that would have happened anyway. A strategy can be performing perfectly against its own objective while destroying money. Two published experiments frame the honest instruction:
- eBay's experiments found brand-keyword ads had no measurable short-term benefit - near-total substitution by organic.
- The Edmunds.com replication found the opposite: substitution under 50%, paid brand traffic economically meaningful.
eBay's result is an upper bound driven by exceptional brand strength. The instruction is therefore **test, don't assume** - never a blanket "stop bidding on brand". Only a holdout or geo test detects non-incremental buying.
Scale on _marginal_ return, not average: a channel can hold a 4x average return while the marginal return on the next dollar has fallen below break-even. See `mbfinotti/advertising-skills@ad-attribution-gap` for the measurement side.
## Seasonality and demand swings
- **Short demand spike (roughly 1-7 days: sale, launch, event)**: use a scheduled conversion-rate adjustment where the platform offers one - documented as suited to short events - and size it to the expected _conversion-rate_ lift, not last year's conversion spike. (Documented cautionary case: a 100% adjustment for an expected doubling of conversions blew a full day's budget by late morning, because conversion _rate_ rose far less than conversion _count_.)
- **Long seasonal pattern (weeks-months)**: don't stretch a spike tool past its documented window - re-derive the target for the season from seasonal actuals, then restore.
- **Outage tooling ("data exclusions") is for broken tracking, not demand swings.** Do not conflate the two; frequent exclusions degrade the bidder.
- Distinguish a temporary demand swing (loosen for the window, then restore) from a real efficiency change (re-derive the target permanently).
## Portfolio / shared strategies
Pooling several campaigns under one shared target helps thin campaigns clear signal floors - and silently distorts spend when the pooled campaigns have different economics, because money migrates on blended rather than per-campaign returns. The test before pooling: **does the grouping contain genuinely compatible goals** - same conversion event, comparable margins, same target?
Pool thin campaigns that pass the test; never pool a brand line with prospecting, or high-margin with break-even product lines, just to share signal. Structural thinness is often better fixed by consolidation - see `mbfinotti/advertising-skills@ad-campaign-consolidation`.
## B2B and B2C
What genuinely differs:
| Dimension | B2B | B2C / e-commerce |
| ------------------- | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |
| Volume and lag | Low volume, deals close over months - in-platform conversion counts never tell the truth | High volume, short lag - value signals readable in days |
| Highest-impact move | Close the offline loop: push CRM stage outcomes back to the platform with real deal values | Feed real transaction values; audit them for refunds and margin variance |
| Optimization event | Deepest funnel stage with sufficient volume; below that, optimize an upstream event and import downstream outcomes | Purchase, with real values - return-goal bidding reachable much earlier |
| Conversion window | Match to the sales cycle (90 days is common) | Platform defaults usually fine |
| Canonical failure | Optimizing raw form-fills: cost per lead improves while pipeline dies | Blended return target averaging a high-margin and a break-even order into one meaningless number |
## The Bidding Policy
Deliver one policy per platform/goal pairing, as a short document the approver can act on and later audit:
```
BIDDING POLICY - <platform> / <goal>
Objective : volume | cost efficiency | value-return | visibility
Archetype : <archetype> + why, and why not the runner-up
Evidence : conversion event + depth check | value integrity | volume/period | lag
Target : <value> | economics derivation (break-even, buffer) | history derivation
(trailing actual, window) | refresh date
Evaluation : window in conversion cycles (= <n> days for this account)
Change rules : step size | wait per step | batching rule | who approves
Rollback trigger : the observable condition that reverts this policy
Switch triggers : what would move this to a different archetype
```
Present the policy section by section, validating each with the user before drafting the next:
1. Objective and archetype
2. Evidence
3. Target
4. Evaluation and change rules
5. Rollback and switch triggers
Finalize nothing without the user's explicit approval of the assembled policy.
If your harness has persistent memory, memorize the approved policy: archetype, target and both derivations, evaluation window, review cadence, and constraints - so later tactical runs start from the policy instead of re-litigating it. Otherwise, tell the user to keep the policy document where their next session can read it.
Worked B2B and B2C policies, plus an annotated negative example, live in [references/worked-examples.md](references/worked-examples.md).
## Pass Threshold
Ship nothing until all of these hold; iterate until they do:
1. Every recommended policy traces to a stated goal, a passed (or explicitly waived) measurement gate, and an economics-derived target boundary.
2. The target carries both derivations and a named margin buffer; the initial value sits at or near trailing actual, never at the aspirational number.
3. Every number cited carries its evidence tier, and no recommendation rests on an undocumented universal threshold presented as a rule:
- **documented** - vendor documentation, with as-of date
- **practitioner-convergent** - repeated across independent sources, no platform backing
- **folklore** - repeated without provenance
4. The evaluation window is expressed in conversion cycles, converted to days for this account's lag.
5. A rollback trigger, a switch trigger, and a named approver exist for every policy.
6. The user explicitly approved every section.
## Failure Modes
Each failure mode has a discriminating diagnostic - run it before touching the strategy. This table is deliberately left unranked: the diagnostic picks the row, not a value/effort ratio, and ordering symptoms not yet confirmed would be false precision.
| Failure | Discriminating diagnostic | Fix |
| ------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| Target too aggressive → delivery choke | _Under-delivery_, not bad efficiency: impression share lost to rank, spend well below budget, reported cost at/below an implausibly low target | Raise the target toward trailing actual in steps |
| Budget constrained | Budget-limited status; budget exhausts early in the day; delivery capped despite acceptable cost | Raise budget or lower the target - a different lever than the strategy |
| Wrong conversion event | Healthy platform conversions but a collapsing downstream lead-to-sale ratio; sales reports junk | Re-point to a deeper event; import offline outcomes - `mbfinotti/advertising-skills@ad-conversion-tracking` |
| Learning churn | Repeated re-entry into learning; a recent "last significant edit" before each instability | Stop editing; batch changes; wait out the window |
| Over-segmentation | Learning-limited across many thin ad sets/campaigns, each far under the signal floor | Consolidate - `mbfinotti/advertising-skills@ad-campaign-consolidation` |
| Portfolio pooling gone wrong | Spend migrating between pooled campaigns whose economics differ; blended target fine, per-campaign returns diverging | Split incompatible campaigns out of the pool |
| Attribution model changed under the bidder | Objective reshaped with no bid change made; conversion counts shift on the model-change date | Diagnose via `mbfinotti/advertising-skills@ad-attribution-gap` before blaming the target |
| Modeled values eroding a return target | Rising share of modeled/estimated conversions; value volatility without market cause | Lower confidence in the return target; widen the buffer; verify against business revenue |
| Non-incremental buying | Platform metrics healthy; holdout/geo test shows near-zero lift | Test brand and retargeting incrementality before scaling them |
| High cost blamed on the bidder | Cost high while landing page, offer, audience, creative, relevance unexamined | Run `mbfinotti/advertising-skills@ad-account-diagnostic` first; bid strategy is the late lever |
**Anti-pattern to refuse explicitly: hardcoded automation rules** ("auto-pause anything above $X cost per acquisition") shipped as if they were a feature. Never pause on a fixed multiple alone - check conversion lag, sample size, tracking health, seasonality, and active experiments first; a spike is a question, not a verdict. Immediate containment _is_ right for a runaway-spend ceiling, policy exposure, a broken destination, or confirmed tracking corruption - smallest reversible action, preserve the evidence.
## Invocation Examples
- "We're on manual bidding with about 40 conversions a month. Should we switch to automated, and to what?"
- "Our agency wants to move us from a cost target to a return target. What has to be true first?"
- "I set the target to our goal CPA and spend fell off a cliff. What happened?"
- "Black Friday is in three weeks - should I change my bid targets for it?"
Ships with 4 supporting files:
- evals/evals.json
- references/strategy-archetypes.md
- references/target-derivation.md
- references/worked-examples.md
Mirrored from the author's public source. Install counts from the open skills registry.