evals/evals.json
{
"skill_name": "ad-bidding-strategy",
"evals": [
{
"id": 1,
"prompt": "We run Google Search ads for Corvid Systems, a B2B compliance software company. We get about 9 demo-request conversions a month from search, at roughly $370 per demo, on a $120/day budget. Our new agency says we have to stay on manual CPC until we hit 15 conversions in a 30-day window because that's Google's requirement for Target CPA, and ideally 50 before it works properly. Is the agency right, and what should we do in the meantime?",
"expected_output": "Corrects the threshold folklore (Target CPA has no conversion minimum; 15/30d belongs to Target ROAS; 50 is guidance), reframes low volume as a variance problem, derives what the budget can support, and lays out ranked options for thin volume with a trailing-actual starting target.",
"files": [],
"expectations": [
"States that the cost-goal strategy (Google Target CPA) has no documented minimum conversion volume and can be started with no conversion history",
"Attributes the '15 conversions in 30 days' minimum to Target ROAS (the return-goal strategy), not to Target CPA",
"Identifies '50 conversions' figures as reliability recommendations or guidance, not enablement gates",
"Distinguishes enablement thresholds from evaluation samples as two different kinds of published number that folklore merges",
"Does not advise waiting until 15 or 50 conversions before adopting Target CPA",
"States that low conversion volume costs variance and slow diagnosis (a bad target cannot be separated from bad luck), not eligibility or access",
"Applies the volume-budget derivation (required budget ≈ target cost × volume threshold ÷ period) to the account's own numbers, e.g. showing what $120/day at ~$370 supports",
"Presents consolidation, optimizing an upstream event with downstream outcome import, and accepting slower diagnosis as the options for thin volume",
"Ranks those thin-volume options rather than listing them flat, with consolidation leading on efficiency",
"Notes that importing downstream outcomes requires consent/privacy/legal review before customer or deal data is sent to a platform",
"Recommends setting the initial Target CPA at or near the trailing actual (~$370), not at a goal or aspirational number",
"Labels cited thresholds with an evidence tier or as-of date, or advises re-verifying them against live platform documentation",
"Treats manual CPC as a durable strategy with legitimate long-term uses rather than dismissing it as only a bootstrapping phase"
]
},
{
"id": 2,
"prompt": "I manage Meta ads for Loam & Ember, a DTC candle brand. Three weeks ago I set a Cost Per Result Goal of $28 on our main purchase campaign. Looking at individual purchases in the export, several cost $47 and one even $63. The average across the campaign is $29.50. This looks broken to me - the whole point of the setting is that results stay under $28, right? I'm about to open a support ticket, or switch to Bid Cap at $28 so Meta actually respects the number. Which should I do?",
"expected_output": "Explains average-based control vs hard per-auction ceiling, concludes the campaign is working as designed, and warns against the Bid Cap swap and the learning reset it would trigger.",
"files": [],
"expectations": [
"Explains that Cost Per Result Goal is an average-based control: individual conversions can and will exceed the target while the average lands near it",
"Concludes the campaign is working as designed (average $29.50 near the $28 target), not malfunctioning",
"Does not endorse opening a support ticket or the bug framing",
"Distinguishes average-based cost goals from hard per-auction ceilings as two structurally different control types",
"Identifies Bid Cap as the hard per-auction ceiling that never bids above the cap in any single auction",
"Warns that a hard cap at $28 carries under-delivery risk (delivery can drop sharply)",
"Notes that platforms position hard bid caps as expert-only controls",
"States this misreading ('my cost cap was exceeded') is a common conflation rather than a rare malfunction",
"Does not recommend switching to Bid Cap as the fix for the observed spread",
"Warns that a strategy switch is a material change that restarts a learning period",
"Advises judging the target over an evaluation window expressed in conversion cycles, not on individual conversions",
"Treats the platform label as an observed capability (noting label churn such as Cost Cap being renamed) rather than assuming the name describes a hard cap"
]
},
{
"id": 3,
"prompt": "Finance at Pellwright, our B2B payroll software company, set next quarter's plan around a $95 cost per demo. Our trailing 60-day actual is $240 per demo, and the best month we've ever had was $210. Last Tuesday I changed our search campaign's target from $240 to $95, and since then spend has dropped almost to zero while the platform reports a beautiful $102 CPA on the trickle that's left. Finance says the target is working and we should keep it. For context: a closed deal is worth about $3,500 in contribution and roughly 4% of demos become customers. What do I do?",
"expected_output": "Diagnoses a target-choke delivery collapse, computes break-even at $140, declares economics and history irreconcilable (unit-economics problem, not a bidding problem), restores the target to trailing actual, and sets change discipline.",
"files": [],
"expectations": [
"Diagnoses the spend collapse as a target-too-aggressive delivery choke: the platform stops bidding rather than lose money",
"Identifies the reported ~$102 CPA on near-zero spend as the signature symptom of the choke (under-delivery with great-looking reported efficiency), not as success",
"Names the discriminating under-delivery signals to check, such as spend well below budget or impression share lost to rank",
"Computes break-even cost per demo as $3,500 × 4% = $140",
"Compares the $140 break-even against the $210-240 achieved history and states the account has never operated at or below break-even",
"Declares this a unit-economics problem (offer, pricing, funnel conversion, or channel fit), not a bidding problem",
"Refuses to pursue the $95 target through any bid-strategy change",
"Recommends restoring the target to or near the trailing actual ($240) to recover delivery",
"Recommends tightening only in modest steps (about 10-15%), labelled as practitioner convention rather than platform documentation",
"Requires a full evaluation window between steps, expressed in conversion cycles",
"Names or quantifies a margin buffer between break-even and the live target",
"Corrects finance's reading rather than endorsing 'the target is working'",
"Attaches a refresh cadence or date to the derived inputs (e.g. re-derive the close rate from CRM actuals quarterly)"
]
},
{
"id": 4,
"prompt": "Velora Home, our e-commerce store, does a big Black Friday-Cyber Monday sale - conversions usually triple that weekend, and November overall runs hot compared to October. My plan: apply a +200% seasonality adjustment in Google Ads for all of November, and add a data exclusion over the sale weekend itself so learning doesn't get polluted by the unusual data. We also run 25% off sitewide during the sale. Sanity-check this before I set it up?",
"expected_output": "Resizes the adjustment to conversion-rate lift, limits the spike tool to the short event window, re-derives the seasonal target for the month-long pattern, rejects data exclusions for demand swings, and flags the discount's effect on margin-derived targets.",
"files": [],
"expectations": [
"Sizes the seasonality adjustment to the expected conversion-rate lift, not the conversion-count multiple",
"Explains that conversions tripling does not mean conversion rate triples, since traffic also rises during the sale",
"Warns an oversized adjustment causes overspend or budget exhaustion early in the day",
"Restricts the seasonality-adjustment tool to a short event window (roughly 1-7 days), not a full month",
"For the month-long November pattern, recommends re-deriving the target from seasonal actuals instead of stretching the spike tool",
"Rejects using data exclusions for a demand swing",
"States data exclusions exist for broken or corrupted tracking, not unusual demand",
"Warns that frequent data exclusions degrade the bidder",
"Recommends restoring normal targets/settings after the sale window ends",
"Distinguishes a temporary demand swing (loosen, then restore) from a permanent efficiency change (re-derive the target permanently)",
"Flags that the 25% sitewide discount changes contribution margin and therefore the break-even/target derivation for the promo period",
"Advises against other concurrent target changes during the promo window"
]
},
{
"id": 5,
"prompt": "Our CEO at Brightquay, a marketplace for boat rentals, read that eBay proved brand search ads are a waste because organic picks up the clicks anyway, and he wants all brand bidding stopped this week. Meanwhile our retargeting campaigns show a 5.8x ROAS, the best in the account, and he wants that budget doubled instead. Our agency says brand always pays. Who's right, and what do I tell him?",
"expected_output": "Refuses both blanket positions, frames eBay as an upper bound against the opposing replication, prescribes a holdout/geo incrementality test for brand and retargeting alike, and moves scaling decisions to marginal rather than average return.",
"files": [],
"expectations": [
"Refuses both blanket positions (stop all brand bidding, and 'brand always pays')",
"Frames the eBay finding as an upper bound driven by exceptional brand strength, not a general law",
"Cites the replication that found the opposite (Edmunds: substitution under 50%, paid brand traffic economically meaningful)",
"States the operative instruction as 'test, don't assume'",
"Recommends a holdout or geo test as the way to detect non-incremental buying",
"Explains that a bidder rewarded on attributed conversions will buy conversions that would have happened anyway",
"States a strategy can perform well against its own objective while destroying money (platform metrics healthy, lift near zero)",
"Applies the same incrementality gate to retargeting before doubling its budget, treating the 5.8x attributed ROAS as unproven lift",
"Advises scaling decisions on marginal return, not average return",
"Notes average return can hold high while the marginal return on the next dollar sits below break-even",
"Requires incrementality or attribution measurement before any budget move rather than deciding this week from platform reporting alone"
]
},
{
"id": 6,
"prompt": "Halden Grove Software sells facilities-management software to universities. Six months ago we moved our search campaigns to automated bidding on demo-request form fills. Cost per form fill is down 30% and volume is up, but our SDR team says most of the new leads are students and job seekers, not facilities directors. Half the marketing team wants to go back to manual bidding because the algorithm is a black box we can't trust; the other half says never fight the machine. Sales cycle is about 4 months. How should we settle this?",
"expected_output": "Applies Vallaeys' Pilot/Doctor/Teacher framework, diagnoses a failing Teacher job (junk signal), fixes the optimization event and offline loop before touching the strategy, and rejects the manual revert while layering monitoring on the bidder.",
"files": [],
"expectations": [
"Applies the automation-layering framework of the three human jobs: Pilot, Doctor, and Teacher",
"Attributes the framework to Frederick Vallaeys (or Optmyzr)",
"Reframes the manual-vs-automated debate into which of the three jobs the account is currently failing",
"Diagnoses this account as failing the Teacher job: junk conversion signal feeding the bidder",
"States the fix is the signal/optimization event, not the bid strategy",
"States that an improving cost per form fill alongside junk leads means the tracked event is wrong, not the bidder",
"Does not recommend reverting to manual bidding as the remedy",
"Requires measurement repair (a deeper funnel event or offline outcome import) before any bidding change",
"Identifies closing the offline loop - pushing CRM stage outcomes with real deal values back to the platform - as the highest-impact B2B move",
"Recommends matching the conversion window to the ~4-month sales cycle rather than platform defaults",
"Recommends monitoring rules layered on top of the automated bidder as a complement, not a competition",
"Acknowledges legitimate durable homes for manual bidding (e.g. brand-defense terms, tiny audiences) while rejecting them as grounds in this case"
]
},
{
"id": 7,
"prompt": "Tinderbox Apparel is a DTC clothing brand. Our premium line runs about a 55% contribution margin, our basics line about 22%, and blended it's roughly 40%. Our new agency wants one account-wide target ROAS of 4x because that's the industry standard for e-commerce. We're currently at 2.6x trailing 30 days, and the founder wants 10% net profit on ad-driven revenue. Purchase values flow back server-side. What target should we actually set?",
"expected_output": "Derives break-even ROAS from margin instead of accepting 4x, splits the blended target by margin band, starts at trailing actual and tightens toward the profit-goal number with a named buffer, refund netting, and a refresh trigger.",
"files": [],
"expectations": [
"Rejects 4x as an industry standard: break-even return depends on margin, not convention",
"States or shows that the folk 4x figure is correct specifically for a 25%-margin business",
"Computes blended break-even ROAS as 1 ÷ 0.40 = 2.5x",
"Computes per-line break-evens (premium ≈ 1.8x, basics ≈ 4.5x)",
"Flags that one blended target averages a high-margin and a near-break-even line into one meaningless number",
"Recommends splitting the policy or campaign structure by margin band before tightening",
"Applies the profit-goal form 1 ÷ (margin − desired net margin) = 1 ÷ 0.30 ≈ 3.3x as the tightening destination",
"Sets the initial target at trailing actual (2.6x), not at 4x or the 3.3x goal",
"For a return target, starts at or slightly below trailing actual (the looser-than-achieved direction)",
"Names the margin buffer between the live target and blended break-even (~0.1x) and flags it as thin",
"Tightens toward the profit-goal number in modest steps with a full evaluation window per step",
"Requires values net of refunds (or checks refund materiality) before trusting a return target",
"Attaches a margin refresh trigger: re-derive on any pricing change and at least quarterly"
]
},
{
"id": 8,
"prompt": "I run marketing at Ferrostat, a B2B industrial-sensors company. On Google Search we have three campaigns: branded (120 conversions/month), competitor prospecting (14/month), and a generic demand campaign (9/month). Our agency proposes one portfolio Target ROAS across all three so the small campaigns can learn from the big one. They also want to mirror value-based bidding on our LinkedIn campaigns using deal values from Salesforce. Nothing flows from the CRM to either platform yet. Green-light both?",
"expected_output": "Runs the pooling compatibility test and rejects mixing brand with prospecting, blocks any return-goal until real values flow and legal review clears, and states LinkedIn offers no value-based bidding at all.",
"files": [],
"expectations": [
"Applies the pooling compatibility test before any portfolio: same conversion event, comparable margins, same target",
"Rejects pooling the brand campaign with prospecting campaigns",
"Explains that pooled spend migrates on blended rather than per-campaign returns, distorting allocation when economics differ",
"Acknowledges pooling legitimately helps thin campaigns clear signal floors when the pooled goals are genuinely compatible",
"Names the diagnostic for pooling gone wrong: blended target looks fine while per-campaign returns diverge, so incompatible campaigns get split out",
"Suggests consolidation as the alternative fix for structurally thin campaigns",
"States that LinkedIn does not offer value-based / return-goal bidding",
"Treats bidding capabilities as observed per platform rather than assuming feature parity across platforms",
"Notes Google's return-goal (Target ROAS) carries a documented minimum for Search (15 conversions in the past 30 days) with an as-of or re-verify caveat",
"Blocks any return-goal recommendation until real differentiated values actually flow back, since nothing flows from the CRM yet",
"Requires legal/privacy/consent review before Salesforce deal values are sent to any platform",
"Runs the value-integrity check (values differentiated, net of refunds/rejects, timely relative to lag) as a prerequisite",
"Notes the 9-14 conversion/month campaigns clear no documented return-goal minimum on their own"
]
},
{
"id": 9,
"prompt": "Over the last two weeks at Nockboard, our B2B webinar platform, I've adjusted our Meta cost per result goal three times ($60 to $48 to $55 to $50), refreshed the creative, and narrowed the audience, because results kept swinging. It's still volatile. Typical lag from click to a qualified signup is about 3 weeks, plus a few days before it shows in reporting. I want to write down bidding rules so the team stops improvising - including an automated rule that pauses any ad set above $90 CPA. Can you draft the rules?",
"expected_output": "Diagnoses learning churn, freezes edits and batches changes, defines the window in conversion cycles converted to this account's ~3.5-week lag, refuses the hardcoded auto-pause rule, and drafts a policy with rollback trigger, switch trigger, and named approver, validated section by section.",
"files": [],
"expectations": [
"Diagnoses learning churn: each edit re-enters a learning period, and the induced instability provoked the next edit",
"Instructs to stop editing and wait out a full window before any further change",
"Requires batching pending changes into a single change to trigger one relearn instead of a chain of resets",
"Prohibits concurrent confounding changes (target, creative, and audience moved in the same week)",
"Defines the evaluation window in conversion cycles (click-to-conversion lag plus reporting delay), not calendar days",
"Converts the window to days for this account (one cycle ≈ 3.5 weeks, so 1-2 cycles ≈ 4-7 weeks)",
"Cites vendor guidance of 1-2 conversion cycles after a target change as the documented unit",
"Refuses the hardcoded auto-pause rule based on a fixed CPA threshold alone",
"Lists the checks required before pausing on a spike: conversion lag, sample size, tracking health, seasonality, active experiments",
"States that a cost spike is a question, not a verdict",
"Names the containment exception (runaway spend, policy exposure, broken destination, confirmed tracking corruption) where an immediate hold is right",
"Drafts the policy with a rollback trigger stated as an observable condition",
"Includes a switch trigger and a named approver in the drafted rules",
"Presents the policy sections for the user's validation/approval rather than finalizing unilaterally"
]
},
{
"id": 10,
"prompt": "Cindercart runs both a shopping app and a web store. Our app UA agency reports ROAS at 160% and calls it strong; our web team reports 4.2x and calls the app numbers a disaster in comparison. Meanwhile our Google reps are pushing us to move most of the web budget into Performance Max, and my boss's take is that it's just another campaign type, so flip it on. Two questions: which team is actually performing better, and do we do the PMax move?",
"expected_output": "Normalizes the ROAS unit conventions before comparing (160% = 1.6x vs 4.2x), then evaluates Performance Max adoption as delegating the whole bidding policy - signal given, control surrendered, written exit criterion, guardrails, and a clean conversion signal first.",
"files": [],
"expectations": [
"Normalizes the ROAS units before comparing: mobile-UA tooling reports a percentage, web platforms report a multiplier",
"Converts 160% to 1.6x and compares like units (making the web store's 4.2x materially ahead on reported figures)",
"Warns that comparing the two conventions raw produces a large misread",
"Treats adopting Performance Max as delegating the bidding policy to the platform, not as a campaign-type checkbox",
"Notes AI-default campaign types use automated bidding exclusively, so adoption is itself the bid-strategy decision",
"Asks or answers what signal the platform gets under the delegation",
"Asks or answers what control is given up by delegating",
"Requires a written exit criterion: what would justify taking control back",
"Requires guardrails and exclusions configured before adoption",
"Requires a clean, valid conversion signal as a precondition for delegating",
"Recommends cross-checking platform-attributed return against MER or blended business revenue before trusting either team's number"
]
}
],
"trigger_queries": [
{ "query": "Should we switch from manual CPC to Target CPA on Google Ads?", "should_trigger": true },
{ "query": "What bid strategy should I use for our new Meta prospecting campaign?", "should_trigger": true },
{ "query": "Our agency wants to move us from tCPA to tROAS - what has to be true first?", "should_trigger": true },
{ "query": "Is my account ready for value-based bidding?", "should_trigger": true },
{ "query": "How do I pick a target CPA number?", "should_trigger": true },
{ "query": "What should our target ROAS be if our margin is 35%?", "should_trigger": true },
{ "query": "I set the CPA target to our goal and spend fell off a cliff overnight", "should_trigger": true },
{ "query": "Why did delivery collapse after I lowered my target ROAS?", "should_trigger": true },
{ "query": "cost cap vs bid cap on meta - which one do I want", "should_trigger": true },
{ "query": "Some conversions cost more than my cost per result goal - is that a bug?", "should_trigger": true },
{ "query": "Should Black Friday change my bid targets?", "should_trigger": true },
{ "query": "How do I set a seasonality adjustment for a 3-day sale?", "should_trigger": true },
{ "query": "Is smart bidding worth it or should we keep bidding manually?", "should_trigger": true },
{ "query": "When is it safe to raise a target CPA and by how much?", "should_trigger": true },
{ "query": "How long should I wait after changing a bid target before judging it?", "should_trigger": true },
{ "query": "Should I pool my campaigns into a portfolio bid strategy?", "should_trigger": true },
{ "query": "Google keeps recommending I switch to Maximize conversions - should I?", "should_trigger": true },
{ "query": "We only get 12 conversions a month - can we even use Target CPA?", "should_trigger": true },
{ "query": "Do I have enough conversion volume for tROAS?", "should_trigger": true },
{ "query": "What's the difference between Highest Volume and Cost Per Result Goal on Meta?", "should_trigger": true },
{ "query": "My boss wants a $50 CPA but we've never been under $110 - can the bidder get us there?", "should_trigger": true },
{ "query": "How aggressive can I set my target before delivery suffers?", "should_trigger": true },
{ "query": "Should we stop bidding on our own brand keywords?", "should_trigger": true },
{ "query": "Is Performance Max a good idea for us or are we giving up too much control?", "should_trigger": true },
{ "query": "The learning phase reset after I edited my target - now what?", "should_trigger": true },
{ "query": "Our tROAS campaign stopped spending after we raised the target to 5x", "should_trigger": true },
{ "query": "How do I move my CPA target down without breaking the campaign?", "should_trigger": true },
{ "query": "What bidding approach makes sense for a tiny niche B2B audience on LinkedIn?", "should_trigger": true },
{ "query": "Our CFO wants to know how we chose our ROAS target - help me write it up", "should_trigger": true },
{ "query": "Draft a bidding policy for our Google search campaigns", "should_trigger": true },
{ "query": "When should a B2B account move from lead-gen bidding to value-based bidding?", "should_trigger": true },
{ "query": "Should we send our deal values back to Google and bid on those?", "should_trigger": true },
{ "query": "Manual bidding vs automated - settle the debate for our team", "should_trigger": true },
{ "query": "Should I use a bid cap to keep Meta under $30 a purchase?", "should_trigger": true },
{ "query": "How do I bid during a one-week flash sale?", "should_trigger": true },
{ "query": "Google says start tROAS with 15 conversions - do we qualify?", "should_trigger": true },
{ "query": "What happens if I set my target below what the account has ever achieved?", "should_trigger": true },
{ "query": "Our reported CPA looks amazing but the campaign barely spends - what gives?", "should_trigger": true },
{ "query": "How often should we update our bid targets?", "should_trigger": true },
{ "query": "Is our target CPA stale? Pricing changed last quarter", "should_trigger": true },
{ "query": "Which campaigns should share one portfolio target and which shouldn't?", "should_trigger": true },
{ "query": "The platform exceeded my cost target on individual sales - working as intended?", "should_trigger": true },
{ "query": "Set up bidding for our new campaign - we have zero conversion history", "should_trigger": true },
{ "query": "Everyone says wait for 50 conversions before automated bidding - true?", "should_trigger": true },
{ "query": "Should the holiday spike change what I tell the algorithm to aim for?", "should_trigger": true },
{ "query": "My agency wants to turn on value optimization on TikTok - are we ready?", "should_trigger": true },
{ "query": "How do I keep an automated campaign's average cost near a number I choose?", "should_trigger": true },
{ "query": "Explain when a bid cap beats a cost target", "should_trigger": true },
{ "query": "We're switching bid strategies - split test or just flip it?", "should_trigger": true },
{ "query": "Spend dropped 80% after our target change last Tuesday - walk me through recovery", "should_trigger": true },
{ "query": "quarterly review: are our bidding targets still right?", "should_trigger": true },
{ "query": "What's a safe step size for tightening a ROAS goal?", "should_trigger": true },
{ "query": "Should brand campaigns and prospecting share the same bidding target?", "should_trigger": true },
{ "query": "Can I use last year's Black Friday conversions to set this year's bid adjustment?", "should_trigger": true },
{ "query": "LinkedIn doesn't seem to have target ROAS - what do we use instead?", "should_trigger": true },
{ "query": "I want rules for when we're allowed to touch bid targets - write them", "should_trigger": true },
{ "query": "Google rep says folding everything into PMax will fix our CPA - trust it?", "should_trigger": true },
{ "query": "Do seasonal businesses need different bid strategies in peak months?", "should_trigger": true },
{ "query": "Our delivery is fine but finance wants a tighter target - how do we decide?", "should_trigger": true },
{ "query": "How should I split $60k a month between Google and Meta?", "should_trigger": false },
{ "query": "What share of budget should go to prospecting vs retargeting?", "should_trigger": false },
{ "query": "We're 10 days into the month and 60% of the budget is gone - are we on track?", "should_trigger": false },
{ "query": "Set up a weekly spend-pacing report against our quarterly budget", "should_trigger": false },
{ "query": "Our ROAS dropped 40% last month - figure out what's wrong with the account", "should_trigger": false },
{ "query": "The ads just stopped working and CPL doubled - where do I start?", "should_trigger": false },
{ "query": "Google Ads says 90 conversions, our CRM shows 61 - explain the gap", "should_trigger": false },
{ "query": "Which attribution model should we report on?", "should_trigger": false },
{ "query": "Are our conversion events firing twice? Check dedup before launch", "should_trigger": false },
{ "query": "Verify our purchase pixel is set up right before we scale", "should_trigger": false },
{ "query": "Should I merge my 40 ad sets into 5?", "should_trigger": false },
{ "query": "Plan a campaign consolidation without resetting learning everywhere", "should_trigger": false },
{ "query": "Is 3.2x ROAS good for DTC skincare?", "should_trigger": false },
{ "query": "Compute our blended CAC from this spend data and tell me if it's healthy", "should_trigger": false },
{ "query": "Define a company-wide maximum allowable CAC and a kill-switch policy", "should_trigger": false },
{ "query": "What ROAS floor should the org never cross, and who owns the override?", "should_trigger": false },
{ "query": "Our campaign is crushing it - how fast can we ramp the budget?", "should_trigger": false },
{ "query": "Double the budget in one go or step it up weekly?", "should_trigger": false },
{ "query": "Is our best ad fatiguing or is something else causing the CTR drop?", "should_trigger": false },
{ "query": "How do I tell creative wear-out from audience saturation?", "should_trigger": false },
{ "query": "Design an A/B test plan for five new ad concepts", "should_trigger": false },
{ "query": "How much budget does each test cell need for significance?", "should_trigger": false },
{ "query": "Should we be on TikTok or LinkedIn for B2B?", "should_trigger": false },
{ "query": "Which paid channels fit a $5k/month budget?", "should_trigger": false },
{ "query": "Build negative keyword lists from this search terms report", "should_trigger": false },
{ "query": "Cut wasted spend from irrelevant search queries", "should_trigger": false },
{ "query": "How many customers do I need to seed a lookalike audience?", "should_trigger": false },
{ "query": "Should the lookalike seed be all purchasers or high-LTV only?", "should_trigger": false },
{ "query": "Design our retargeting funnel with recency windows", "should_trigger": false },
{ "query": "What frequency caps should each retargeting stage get?", "should_trigger": false },
{ "query": "Audit the landing page our ads send traffic to", "should_trigger": false },
{ "query": "Why do our ads get clicks but the page doesn't convert?", "should_trigger": false },
{ "query": "Turn our ICP into a targeting plan across platforms", "should_trigger": false },
{ "query": "What interest segments should we layer for cold prospecting?", "should_trigger": false },
{ "query": "Which ad formats work for an awareness objective?", "should_trigger": false },
{ "query": "Write 10 ad copy variants from this value prop", "should_trigger": false },
{ "query": "Score these five video hooks and tell me which to test", "should_trigger": false },
{ "query": "Write a UGC script for our skincare product", "should_trigger": false },
{ "query": "Build a creative brief for our Q4 campaign", "should_trigger": false },
{ "query": "Map the buying committee for a $100k ACV deal", "should_trigger": false },
{ "query": "Set up a competitor ad swipe file", "should_trigger": false },
{ "query": "Promote our founder's LinkedIn posts as paid ads - plan it", "should_trigger": false },
{ "query": "How do I prepare for a media buyer interview?", "should_trigger": false },
{ "query": "Write a job description for a performance marketer", "should_trigger": false },
{ "query": "What should I read to stay current on PPC?", "should_trigger": false },
{ "query": "Where do I start with paid ads for my startup?", "should_trigger": false },
{ "query": "What's a good bidding strategy for eBay auctions so I win at the last second?", "should_trigger": false },
{ "query": "How should we price our bid for the city construction tender?", "should_trigger": false },
{ "query": "Tips for bidding on Upwork projects without racing to the bottom", "should_trigger": false },
{ "query": "Explain how bid shading works in the DSP we're building", "should_trigger": false },
{ "query": "Design the real-time bidding exchange architecture for our ad server", "should_trigger": false },
{ "query": "How do header bidding auctions work for publishers?", "should_trigger": false },
{ "query": "What's a smart bidding strategy for storage unit auctions?", "should_trigger": false },
{ "query": "How do I win a house bidding war without overpaying?", "should_trigger": false },
{ "query": "Our nonprofit is running a silent auction - how should we set minimum bids?", "should_trigger": false },
{ "query": "My Google ad got disapproved - fix the policy violation so it runs again", "should_trigger": false },
{ "query": "Reconcile our monthly Google Ads invoice with actual spend", "should_trigger": false },
{ "query": "Forecast next quarter's ad spend for the budget planning meeting", "should_trigger": false },
{ "query": "Our Merchant Center feed is disapproved so shopping ads won't run - help", "should_trigger": false }
]
}
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.7"
---
# 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?"