SKILL DETAIL
ad-audience-targeting
mbfinotti/advertising-skills/ad-audience-targeting
Turn a business's ICP and buying signals into a layered ad audience targeting plan - cold/broad prospecting, interest and in-market behavioural segments, lookalike/similar, first-party lists, and retargeting pools - each sized against platform audience floors, budgeted to the learning threshold, and kept from overlapping by exclusion rules. Use whenever the user mentions ad targeting, who to target with ads, audience tiers or layers, broad vs. layered targeting, audience overlap between campaigns, or mapping an ICP onto ad audiences - even if they never say 'audience'. Covers B2B and B2C. Do NOT use to pick the seed customers behind a lookalike (mbfinotti/advertising-skills@lookalike-audience-seeds) or to sequence retargeting messages (mbfinotti/advertising-skills@retargeting-funnel).
Installation
npx skills add https://github.com/mbfinotti/advertising-skills --skill ad-audience-targeting
技能文件
SKILL.md
最近同步 · 2026年9月24日
evals/evals.json›
{
"skill_name": "ad-audience-targeting",
"evals": [
{
"id": 1,
"prompt": "I'm the founder of Brightfell, a new SaaS that helps independent gyms manage class bookings and memberships. We're about to run our first ever paid ads, $4,500/month. We don't have any customer research or an ICP written down - we only have 22 paying gyms and honestly haven't analyzed them at all. Just sketch the buyer personas yourself from the product and build the full audience targeting plan around them. Also, when you rank gym prospects, a lot of the smaller ones have no public info about member counts or revenue - treat missing data as a red flag and push those to the bottom of the list.",
"expected_output": "A refusal to invent an ICP from the product description, a request for evidence (ICP document or derivation from the 22 existing customers), rejection of negative scoring for unknown attributes, and a list of the inputs still needed before any tier plan is written.",
"files": [],
"expectations": [
"Declines to invent buyer personas from the product description alone",
"States the reason: a plan built on an imagined customer optimizes toward fiction (or equivalent statement that an unevidenced ICP invalidates the plan)",
"Requests an ICP document or proposes deriving the ICP from the 22 existing paying gyms (customer list)",
"Does not deliver a funded tier plan before ICP evidence exists",
"Rejects the instruction to score gyms with missing member-count or revenue data negatively",
"States that unknown attributes score neutral, never negative",
"Explains that a thin public footprint correlates with business size, not with fit",
"Asks for (or lists as required inputs) the conversion definition and target CPA",
"Asks about first-party assets beyond the customer list (site traffic volume, engaged followers, CRM)",
"Asks for (or lists as a required input) the size of the addressable universe",
"States that evidence source and date must be recorded next to each tier in the eventual plan",
"Distinguishes attributes (what is true) from signals (why now) when describing what the ICP work must produce"
]
},
{
"id": 2,
"prompt": "We run paid social for Lumewick, a DTC candle brand. Mature account: about 380 purchases a week, $95k/month spend, blended CPA $24 against a $28 target. Current structure is five interest-stacked ad sets plus a lookalike, a retargeting campaign, and a past-buyers exclusion list. I watched three YouTube videos this week that all said interest targeting is dead and open targeting wins on mature accounts, so I want to switch the whole account to broad on Monday. Write up the new all-broad structure for me.",
"expected_output": "A refusal to flip the account wholesale, replaced by a parallel test design (duplicate one campaign, switch only the duplicate to broad) with the layered structure kept as control, warm tiers retained regardless, and a decision rule for adopting broad.",
"files": [],
"expectations": [
"Refuses to switch the whole account to broad in one move",
"Recommends the parallel test: duplicate one campaign and switch only the duplicate to broad",
"Keeps the existing layered structure running as the control during the test",
"States broad is adopted only if the duplicate wins the test",
"Notes the account qualifies for the parallel test because ~380 conversions/week comfortably clears the learning threshold",
"Retains the retargeting tier and the past-buyer suppression regardless of the broad decision (even broad-first accounts keep them)",
"Keeps at least one manually-defined tier alive as a research instrument even if broad wins",
"States that broad hides who the buyer is (costs attribution knowledge of which segment responds)",
"Frames broad-vs-layered as conditional on account data density, not as doctrine",
"Runs the broad-vs-layered comparison as its own experiment with one variable changed (audience posture), identical creative",
"Notes the test is reversible and buys an account-specific answer instead of someone else's general one",
"Rejects general advice (the YouTube videos) as sufficient grounds to change rungs wholesale",
"Flags the five interest-stacked ad sets as over-narrowing or precision theater, recommending ICP knowledge be spent on creative variants per segment rather than more filters"
]
},
{
"id": 3,
"prompt": "Review my planned Meta structure for Ferrowood, our $89-AOV cookware store. Target CPA is $42, total budget $120/day. I've split it into six ad sets: 'cast iron enthusiasts' $25/day, 'home chefs' $25/day, 'cooking show viewers' $20/day, 'wedding registry' $20/day, a 2% lookalike at $20/day, and a small 'competitor brand fans' set at $10/day - that last audience is only about 900 people but I want to keep it for coverage. Does this plan work?",
"expected_output": "A structural fail verdict: budget-floor math showing no ad set can exit learning, the merge-first fix order applied, the 900-person coverage tier cut, and a consolidated structure optimizing to a higher-funnel proxy event because even the full $120/day cannot fund purchases to threshold.",
"files": [],
"expectations": [
"Computes the per-ad-set daily budget floor as (target CPA x ~50 weekly optimization events) / 7, i.e. roughly $300/day at a $42 CPA",
"States every proposed ad set sits far below the budget floor and will not exit learning",
"Quantifies the shortfall (e.g. $25/day at a $42 CPA yields roughly 4 conversions a week versus the ~50 needed)",
"Delivers a fail verdict on the six-way split rather than approving or lightly tweaking it",
"Applies the fix order: merge tiers into their nearest neighbour first, before changing optimization events or cutting",
"Presents optimizing to a cheaper higher-funnel proxy event as the second-choice fix, with purchases still tracked as the true KPI",
"States that even one fully consolidated ad set at $120/day cannot reach ~50 purchase events a week at a $42 CPA, so recommends the higher-funnel optimization event",
"Cuts the 900-person competitor-fans tier as below the platform delivery floor",
"Explicitly rejects the 'keep it for coverage' rationale (never keep an unfundable tier for coverage)",
"Notes that very small audiences also pay more per impression",
"Notes that consolidation regularly halves cost per result on the same budget (over-segmentation failure mode)",
"Recommends an overlap audit between the interest-based ad sets before launch, not only when troubleshooting",
"Adds exclusions: existing customers excluded from prospecting, higher-intent pools excluded from lower-intent tiers",
"Identifies interest and affinity targeting as the least efficient tier, treated by the platform as suggestions rather than constraints"
]
},
{
"id": 4,
"prompt": "Our media buyer at Pellagrino Home (bath goods DTC) wants approval to change the budget split. Retargeting is doing 9.4x ROAS and prospecting only 1.8x. Retargeting is currently 42% of our $60k monthly spend and he wants to take it to 65%, cutting prospecting to fund it. Sounds obviously right to me - validate the change so I can approve it.",
"expected_output": "A refusal to validate: retargeting ROAS identified as structurally inflated and non-incremental, 42% flagged as already past the ~40% alarm, the 70-80/15-25 reference split cited, the pool-refill starvation mechanism explained, and an incrementality test recommended.",
"files": [],
"expectations": [
"Refuses to validate the shift of retargeting to 65% of spend",
"States retargeting's reported ROAS is structurally inflated and largely non-incremental (many of those users would have converted anyway)",
"Identifies the current 42% retargeting share as already above the ~40% alarm threshold",
"States that retargeting above ~40% of spend is a signal to grow prospecting, not evidence that retargeting works",
"Cites the reference starting split: 70-80% prospecting, 15-25% retargeting, remainder experimental",
"Explains that warm pools are refilled by colder tiers, so cutting prospecting starves the retargeting refill",
"Notes the retargeting pool decays to nothing within weeks once the refill stops",
"Recommends moving the split back toward prospecting (inside the 15-25% retargeting band) rather than further away",
"Warns that over-funding retargeting inflates blended ROAS",
"Recommends an incrementality check (e.g. a holdout) before crediting retargeting's ROAS",
"States retargeting must not be used to prove the plan works",
"Names prospecting share of spend (hold at or above ~60%) as an ongoing KPI"
]
},
{
"id": 5,
"prompt": "I run growth at Nestbird, a fintech offering personal-loan refinancing in the US. We have 18,000 happy borrowers on file - a great seed for a Meta lookalike, right? Here's the plan I want written up: a 1% lookalike from the borrower list, narrowed to ages 28-50, targeted at the 40 metro ZIP codes where we're licensed, plus an interest layer on 'personal finance'. Also, can we quietly exclude people whose profiles suggest they're struggling financially? Write it up.",
"expected_output": "A compliance-gated rewrite: the offer flagged as a regulated credit category, the lookalike and the age/ZIP narrowing identified as unavailable, the hardship exclusion refused as sensitive-trait inference, and a broad-plus-creative plan routed through legal before launch.",
"files": [],
"expectations": [
"Flags the personal-loan offer as a regulated category (credit/financial products) before designing any targeting",
"States the lookalike from the borrower list is disallowed under the restricted targeting mode and deletes it, rather than keeping it as a low-ranked option",
"States age narrowing to 28-50 is unavailable (age is fixed to the full 18-65+ range under the restricted mode)",
"States ZIP-code targeting is unavailable (no ZIP targeting; minimum 15-mile radius applies)",
"Notes US financial-product advertisers fall under the platform's special ad category rules (in force since January 21, 2025)",
"Refuses to exclude people who appear to be struggling financially: financial hardship is a sensitive trait that cannot be targeted or inferred, even from a public signal",
"Recommends planning the campaign as broad-plus-creative from the start",
"Routes the campaign through legal/compliance review before launch",
"Treats compliance as a hard gate before spend, not a post-launch review item",
"Notes first-party suppression of existing borrowers via an uploaded list remains allowed and standard",
"Notes the interest layer adds little precision because platforms treat interest inputs as suggestions, not constraints",
"Does not deliver the requested lookalike-plus-narrowing structure in any form",
"Names each deleted element in the plan together with the regulatory constraint that deleted it"
]
},
{
"id": 6,
"prompt": "Karvela Systems sells procurement software to hospital networks. Total addressable universe: about 24,000 relevant people across 600 US health systems. We're planning LinkedIn ads at $9k/month, conversion = demo request, target CPA $310, currently around 3 demos a week. My draft has six separate campaigns: exact job titles ('VP of Supply Chain', 'Director of Procurement', and similar), plus an interest-based set, plus broad prospecting with Audience Expansion switched on to grow reach, plus a lookalike, retargeting, and a customer-list tier. Can you finalize the audience structure?",
"expected_output": "A consolidated layered plan: the six-way split collapsed for a 24,000-person universe, titles broadened to function plus seniority, Audience Expansion off, the broad tier deleted by name with a revival condition, floors checked, and optimization moved to a higher-funnel proxy event.",
"files": [],
"expectations": [
"Consolidates instead of finalizing six campaigns: a universe of a few tens of thousands runs better as one (or very few) consolidated campaign(s)",
"Broadens exact job titles to function plus seniority targeting",
"States that job titles are freeform text and the platform recognizes only about 30% of them, so title-only targeting misses most of the real audience",
"Notes function plus seniority roughly triples the addressable audience",
"Turns Audience Expansion off for this defined-ICP B2B account (letting the platform broaden to anybody and everybody wastes budget)",
"Deletes the broad/algorithmic prospecting tier because the universe is too small, naming it as deleted rather than ranking it last",
"States the condition that would revive the broad tier (the universe or the geography widening)",
"Concludes layered, not broad: ~3 demos a week of conversion data plus a small universe put the account on the layered side of the conditional",
"Checks matched audiences (customer list, retargeting) against the 300-member platform floor",
"Notes practitioners run 5,000-30,000-person audiences for B2B conversion campaigns despite the platform recommending 50,000+",
"Computes that a $310 CPA cannot reach ~50 optimization events a week on $9k/month, so recommends optimizing to a higher-funnel proxy event with demos tracked as the true KPI",
"Notes title and seniority facets cannot be stacked together on the platform",
"Applies the standard exclusion set (current customers, employees, competitors) and notes exclusions run before inclusions",
"Judges tier success on downstream pipeline or lead quality, not on lead volume or cost per lead alone"
]
},
{
"id": 7,
"prompt": "Post-launch check on Duvette & Co, our linens brand on Meta. We measured pairwise audience overlap across our four funded ad sets: lookalike vs interest 8%, interest vs behavioral in-market 24%, lookalike vs behavioral 38%, behavioral vs broad prospecting 56%. Also, our retargeting pool and our customer list currently have no exclusions applied anywhere in the account. Our marketing lead says to just merge everything that overlaps into one ad set. What exactly should we do for each pair, and in what order?",
"expected_output": "Per-pair verdicts from the overlap thresholds (ignore / monitor / add exclusion / merge), rejection of the blanket merge, a full exclusion matrix with customer list and retargeting pool suppressed from prospecting, and a post-exclusion size re-check.",
"files": [],
"expectations": [
"8% pair: ignore (under the 10% threshold)",
"24% pair: monitor (10-30% band), no forced action",
"38% pair: act by adding an exclusion, not by consolidating",
"Justifies exclusion over consolidation in the 30-50% band: an exclusion is quick and reversible while consolidation destroys the per-tier read",
"States the only condition to consolidate instead: when the exclusion would push either tier near or below its size floor",
"56% pair: merge the two tiers (over the 50% threshold)",
"Rejects the blanket 'merge everything that overlaps' instruction",
"Explains the cost of overlap: two funded tiers bidding on the same person compete in the auction, inflating cost without adding reach",
"Requires the customer list excluded from every tier, plus employees and known competitors",
"Requires the retargeting pool excluded from every lower-intent tier so each person sits in exactly one tier",
"Uses first-party suppression lists for the exclusions, noting interest-based exclusion features are deprecated or removed",
"Re-checks every tier's post-exclusion size against the platform floor, since stacked exclusions can silently halt delivery",
"Sets the ongoing rule: audit overlap before launching any new tier, not only when troubleshooting",
"Notes exclusions run before inclusions, so the exclusion matrix is built first"
]
},
{
"id": 8,
"prompt": "Tallgrass Analytics sells inventory-forecasting software to mid-size grocery chains. The board wants readable pipeline results before our funding announcement in 5 weeks - hard date. Realities: it's just me executing, about 4 hours a week, and we have zero legal or privacy support - none, nobody can review data handling. Assets: a 3,100-contact customer and prospect CRM list, solid pixel traffic (25k site visits/month), and two signal lists I built: 45 grocery chains that raised money or got acquired 4-6 months ago, and 28 chains that posted supply-chain analyst roles in the last 3 weeks. Monthly budget $14k. Build the tier plan and tell me what runs first.",
"expected_output": "A re-ranked tier plan: CRM-upload and customer-seeded lookalike tiers deleted (no privacy review), retargeting promoted to run first under the 5-week date, cold broad demoted, the stale funding list downgraded to context, the fresh hiring list driving prospecting priority, with each move attributed to the answer that caused it.",
"files": [],
"expectations": [
"Deletes the first-party custom tier (CRM list upload) entirely because no privacy review exists - not an option, not merely ranked last",
"Deletes any customer-seeded lookalike tier for the same reason",
"Names each deleted tier in the plan with the constraint that killed it and what would bring it back (privacy/legal review becoming available)",
"Distinguishes deletion from demotion: a low effort ceiling alone would only demote those tiers; the absent privacy review is what deletes them",
"Promotes retargeting to run first: pixel-based, no data upload needed, returns readable evidence within days, fitting the 5-week hard date",
"Demotes or excludes cold broad from the 5-week window because it needs a full learning cycle before it says anything",
"Treats the 4-6-month-old funding/acquisition list as context, never a trigger (signal older than ~90 days)",
"Uses the 3-week-old hiring-signal list as the priority prospecting signal (fresh signal sets tier priority)",
"States which answer moved which tier (hard date, missing privacy review, effort ceiling each attributed to a specific re-rank or deletion)",
"Includes platform-native behavioral/in-market targeting as a viable prospecting tier requiring nothing to build or upload, fitting the 4-hour-a-week effort ceiling",
"Applies signal expiry going forward: the hiring list is refreshed and entries age out at ~90 days",
"Records evidence source and date next to each tier in the plan",
"States promote/hold/kill decision rules in the plan before launch"
]
}
],
"trigger_queries": [
{ "query": "Turn this ICP into ad audiences for our product launch", "should_trigger": true },
{ "query": "Who should we target with our Facebook ads?", "should_trigger": true },
{ "query": "Build a targeting plan for our paid social campaigns", "should_trigger": true },
{ "query": "How should I structure audience tiers for prospecting vs warm traffic?", "should_trigger": true },
{ "query": "Is broad targeting better than layered targeting for our account?", "should_trigger": true },
{ "query": "Should I stack interests or just go broad on Meta?", "should_trigger": true },
{ "query": "My prospecting and retargeting campaigns are bidding on the same people", "should_trigger": true },
{ "query": "How much overlap between two ad sets is too much?", "should_trigger": true },
{ "query": "What audiences should a B2B SaaS run on LinkedIn?", "should_trigger": true },
{ "query": "We have a customer list and decent site traffic, how do we use them in paid ads?", "should_trigger": true },
{ "query": "Map our ideal customer profile onto Meta audiences", "should_trigger": true },
{ "query": "How many audience tiers should a $10k/month ad account run?", "should_trigger": true },
{ "query": "What's the minimum audience size worth funding with ad budget?", "should_trigger": true },
{ "query": "How do I budget each audience so it actually exits the learning phase?", "should_trigger": true },
{ "query": "Which audience should get budget first when we launch our ads?", "should_trigger": true },
{ "query": "Do we need exclusions between our ad campaigns?", "should_trigger": true },
{ "query": "Set up audience exclusions so our campaigns stop competing with each other", "should_trigger": true },
{ "query": "How do I define cold, warm, and hot audiences for our ads?", "should_trigger": true },
{ "query": "We sell accounting software to restaurants, who should actually see our ads?", "should_trigger": true },
{ "query": "Everyone clicking our ads is the wrong kind of customer, rethink who we aim at", "should_trigger": true },
{ "query": "Should we use in-market segments or just let the algorithm pick people?", "should_trigger": true },
{ "query": "Are interest audiences still worth anything in 2026?", "should_trigger": true },
{ "query": "Plan our prospecting audiences for Q4", "should_trigger": true },
{ "query": "What signals should decide which accounts we advertise to first?", "should_trigger": true },
{ "query": "Our addressable market is only 30,000 companies, how do we target ads at it?", "should_trigger": true },
{ "query": "New ad account with no conversion data, how should we target?", "should_trigger": true },
{ "query": "Layered targeting vs letting Advantage+ do its thing?", "should_trigger": true },
{ "query": "How big should each audience be before I put money behind it?", "should_trigger": true },
{ "query": "I have an ICP doc from sales, turn it into campaign audiences", "should_trigger": true },
{ "query": "Where do lookalikes fit relative to retargeting and cold traffic in our media plan?", "should_trigger": true },
{ "query": "Design the audience structure for our lead gen campaigns", "should_trigger": true },
{ "query": "Which audience tiers does a DTC brand actually need?", "should_trigger": true },
{ "query": "Help me decide who to show our ads to, we've never run paid before", "should_trigger": true },
{ "query": "Do I need separate ad audiences per funnel stage or one big pool?", "should_trigger": true },
{ "query": "The same users are in three of our ad sets, is that a problem?", "should_trigger": true },
{ "query": "Turn our CRM data and site traffic into an audience plan", "should_trigger": true },
{ "query": "Should B2B ever run broad targeting?", "should_trigger": true },
{ "query": "What audience size floors do ad platforms enforce and do we clear them?", "should_trigger": true },
{ "query": "Sequence our audience tests, which audience do we test first?", "should_trigger": true },
{ "query": "Our universe is tiny, should we even split it into audience tiers?", "should_trigger": true },
{ "query": "Rebuild our ad targeting from scratch, the current setup is a mess of stacked interests", "should_trigger": true },
{ "query": "Fresh funding-round signals vs firmographics, how do we use both in our ads?", "should_trigger": true },
{ "query": "How do I keep my campaigns from cannibalizing each other in the auction?", "should_trigger": true },
{ "query": "What's a sensible audience plan for a $200/day ad budget?", "should_trigger": true },
{ "query": "Which buying signals justify their own ad audience?", "should_trigger": true },
{ "query": "Are 12 stacked interests plus age filters helping or hurting my ads?", "should_trigger": true },
{ "query": "Got told to go broad and trust the algorithm, is that right for us?", "should_trigger": true },
{ "query": "Prospecting audiences keep converting worse than warm, restructure the plan", "should_trigger": true },
{ "query": "We're launching ads in a regulated category, how does that change targeting?", "should_trigger": true },
{ "query": "How do I size the retargeting pool inside the overall targeting plan?", "should_trigger": true },
{ "query": "Advertise our HR tool: who sees the ads, in what order, with what budget per group?", "should_trigger": true },
{ "query": "Which customers should go into the seed list for our lookalike?", "should_trigger": false },
{ "query": "Our customer list upload only matched 40% of rows, is that normal?", "should_trigger": false },
{ "query": "My lookalike isn't working, I think the seed list is bad", "should_trigger": false },
{ "query": "Design the message sequence for cart abandoners, day 1 vs day 7", "should_trigger": false },
{ "query": "What frequency cap should each retargeting stage have?", "should_trigger": false },
{ "query": "People who already bought keep seeing our ads, fix my remarketing windows", "should_trigger": false },
{ "query": "Our retargeting pool is too small to deliver, which recency windows should I widen?", "should_trigger": false },
{ "query": "Map the buying committee for our data-warehouse deal, who blocks and who signs", "should_trigger": false },
{ "query": "What message angle should the CFO see versus the end user?", "should_trigger": false },
{ "query": "Our CPA doubled since March, audit the account and tell me why", "should_trigger": false },
{ "query": "Our ads used to work and now nothing converts, diagnose the account", "should_trigger": false },
{ "query": "How should I split $60k/month between our Google and Meta campaigns?", "should_trigger": false },
{ "query": "Which of our existing campaigns should get more money next month?", "should_trigger": false },
{ "query": "Which ad platforms fit a $3k/month budget for a B2C app?", "should_trigger": false },
{ "query": "Should we use target ROAS or max conversions bidding?", "should_trigger": false },
{ "query": "Are we on pace to hit month-end spend or are we overspending?", "should_trigger": false },
{ "query": "This campaign is crushing it, how fast can I raise its budget?", "should_trigger": false },
{ "query": "Is our ad creative fatigued or is it just seasonality?", "should_trigger": false },
{ "query": "When should I refresh the creative on an ad that's been running 8 weeks?", "should_trigger": false },
{ "query": "Design an A/B test for our new video creatives", "should_trigger": false },
{ "query": "Write me 10 headline variants for this value proposition", "should_trigger": false },
{ "query": "Brief a designer for our spring campaign statics", "should_trigger": false },
{ "query": "Mine the search terms report and build negative keyword lists", "should_trigger": false },
{ "query": "Check whether our pixel fires twice before we launch", "should_trigger": false },
{ "query": "Meta says 300 conversions, the CRM says 190, which is right?", "should_trigger": false },
{ "query": "Google Analytics shows different revenue than Shopify for our ads, reconcile it", "should_trigger": false },
{ "query": "Is a 3.1x ROAS good for ecommerce?", "should_trigger": false },
{ "query": "Set a maximum CAC and a kill-switch policy for the team", "should_trigger": false },
{ "query": "We get tons of ad clicks but the landing page won't convert", "should_trigger": false },
{ "query": "Score these five video hooks and tell me which deserves test budget", "should_trigger": false },
{ "query": "What ads are our competitors running right now?", "should_trigger": false },
{ "query": "Write a UGC script for a creator to film for our supplement brand", "should_trigger": false },
{ "query": "Plan ads that promote our CEO's LinkedIn posts", "should_trigger": false },
{ "query": "How do we advertise inside ChatGPT answers?", "should_trigger": false },
{ "query": "Plan the migration order so merging our campaigns doesn't reset learning", "should_trigger": false },
{ "query": "How do I become a media buyer with no experience?", "should_trigger": false },
{ "query": "Interview questions for hiring a performance marketer", "should_trigger": false },
{ "query": "Should our first ad hire be a media buyer or a growth marketer?", "should_trigger": false },
{ "query": "Which PPC newsletters and podcasts should I follow to stay current?", "should_trigger": false },
{ "query": "Carousel or video for the consideration stage, which format fits?", "should_trigger": false },
{ "query": "Segment our email newsletter list for better open rates", "should_trigger": false },
{ "query": "Define our ICP for outbound SDR prospecting", "should_trigger": false },
{ "query": "Who is the target audience for my book?", "should_trigger": false },
{ "query": "Build buyer personas for our website redesign copy", "should_trigger": false },
{ "query": "Keyword targeting strategy for our SEO content", "should_trigger": false },
{ "query": "How do I grow my podcast audience?", "should_trigger": false },
{ "query": "Recruit participants for a user research study", "should_trigger": false },
{ "query": "Pick target accounts for our ABM direct-mail campaign", "should_trigger": false },
{ "query": "What audience should our influencer campaign go after?", "should_trigger": false },
{ "query": "Choose the right customer segment for our new pricing tier", "should_trigger": false },
{ "query": "Which subreddits should we post in to reach developers?", "should_trigger": false }
]
}
references/platform-notes.md›
# Platform notes - vendor-specific floors, thresholds, and mechanics
Optional integration notes. Load only when the user names their platform. **Every number here has moved at least once in 2024-2026 - verify against current platform documentation before locking a plan.** Where platform docs and practitioner practice disagree, the platform states a general-case optimum; practitioners optimize for specific constraints.
## Table of Contents
- [Meta (Facebook/Instagram)](#meta-facebookinstagram)
- [Google Ads](#google-ads)
- [LinkedIn](#linkedin)
- [TikTok and other short-video platforms](#tiktok-and-other-short-video-platforms)
- [EU / regulatory quick reference (all platforms)](#eu--regulatory-quick-reference-all-platforms)
- [Sources](#sources)
## Meta (Facebook/Instagram)
- Learning threshold: ~50 optimization events per ad set per week; below it, ad sets stay "learning limited". Budget floor per ad set ≈ (target CPA × 50) ÷ 7 per day.
- Lookalike seed:
- Platform floor: 100 people from a single country ("Facebook requires a minimum of 100 people from a single country for a seed audience, we recommend using a list with at least 1,000 contacts" - Demand Curve).
- Practitioner recommendation: 1,000+ contacts.
- Lookalike % = similarity band: 1% = closest match to seed, larger % = broader.
- Custom audience delivery:
- Pools under ~1,000 people struggle to deliver.
- Use engagement audiences when pixel traffic is thin, in the fill-speed order the skill body sets: `video viewers > page/profile engagers > lead-form openers`.
- Audience size guidance:
- Meta currently recommends 2M+ ("Meta wants you to set your audience size to 2 million or more" - Ben Heath).
- Heath earlier used a 500,000 floor as his own rule of thumb.
- Heath's survey: open/broad 45%, detailed 34%, lookalike 21%.
- Retargeting windows:
- Website visitors: max 180 days.
- Video viewers and social engagers: up to 365 days.
- Ben Heath's practice: include the maximum inclusive pool, let algorithmic expansion work on top.
- Detailed targeting:
- Treated as suggestions, not constraints, for most performance goals.
- Detailed-targeting _exclusions_ were removed; campaigns using them stopped delivering from January 31, 2025.
- First-party suppression lists still work and remain best practice.
- Sensitive interest categories (health, race/ethnicity, political affiliation, religion, sexual orientation) removed in waves (January 2022, early 2024).
- Special Ad Categories (Housing, Employment, Credit, Financial Products, Social Issues/Elections/Politics) trigger:
- Age fixed 18-65+.
- Gender fixed all.
- No ZIP targeting.
- Minimum 15-mile radius.
- No lookalikes.
- No detailed-targeting exclusions.
- All US financial-product advertisers included since January 21, 2025.
- Audience Overlap tool:
- Suppresses results under 1,000 overlapping users.
- Least reliable when comparing two uploaded custom audiences.
- CBO/ABO:
- Meta self-reports CBO cutting CPA ~4.6% on average (self-reported, treat as marketing).
- One third-party test found fixed per-ad-set budgets perform better for prospecting tests.
- Practitioner default: test with fixed budgets, scale with pooled.
- Signal loss:
- Pixel-only accounts are estimated to miss 30-40% of iOS purchase signal.
- Run Conversions API alongside the pixel, deduplicated by event_id.
## Google Ads
- Customer Match: minimum cut from 1,000 to 100 active users across Search, Display, YouTube (rolled out from May 2024, standardized by late 2025) - a 90% cut that made older published advice stale.
- Lookalike segments:
- Similar Audiences were sunset.
- The successor lives in Demand Gen only.
- It requires a 1,000-user seed.
- It needs 2-3 days of processing before launch.
- Performance Max:
- Google claims "over 18% more conversions at a similar cost per action" (vendor self-reported).
- Audience signals are advisory inputs, not hard constraints.
- Practitioner floor: ~$50/day per PMax campaign, plus complete conversion tracking before launch.
- In-market/behavioral segments are the platform's native mid-funnel tier; keyword intent remains the dominant signal on Search, so the targeting-plan leverage there is lower than on social.
- Third-party cookies: Chrome deprecation was cancelled (July 2024, confirmed 2025), but ~17-20% of traffic (Safari, Firefox, Brave) blocks them regardless - plan EU/Apple-heavy audiences with that discount.
## LinkedIn
- Hard floor:
- 300 members per matched audience ("LinkedIn requires an audience size of at least 300 people (that the platform recognizes in its user base) in order to run a campaign" - B2Linked).
- Company lists need 300 rows and 300 matched accounts.
- Location is a mandatory facet.
- Recommended vs. practiced:
- LinkedIn suggests 50,000+ (300,000 for Sponsored Content).
- B2B SaaS practitioners commonly run 5,000-30,000 for conversion campaigns, because the recommended sizes dilute a narrow ICP.
- Targeting taxonomy and exclusions:
- Targeting taxonomy (B2Linked's framing): "Audiences" (matched: ABM lists, retargeting, lookalike-style) vs. "Audience Attributes" (profile-derived: title, function, seniority, company).
- Exclusions run first: "LinkedIn will prioritize exclusion before inclusion criteria."
- Standard exclusion set: current customers, employees, competitors.
- Job titles and function targeting:
- Job titles are freeform text, and LinkedIn recognizes only ~30% of them, so title-only targeting misses most of the real audience.
- Function + seniority typically triples the addressable audience at similar engagement.
- Title and seniority facets cannot be stacked together.
- Audience Expansion:
- Leave off for defined-ICP B2B ("It's a complete waste of ad budget to advertise to anybody and everybody, which is exactly what happens when Audience Expansion is enabled" - B2Linked).
- Lookalike Audiences were replaced by Predictive Audiences in February 2024.
- Retargeting pool build order:
- By efficiency: `video viewers > site visitors > lead-form openers`.
- By fill time: a video-view pool (targeting ≥50% viewers) fills in about a week.
- A lead-form-opener pool takes one to three months of continuous spend.
- B2Linked's benchmarks put the same gap at roughly $1,000 versus $6,000-9,000; use the ratio, not the figures, since both move with market and geography.
- Recency windows: 30/60/90/180/365 days.
- Small-audience cost: "SUPER small audiences will make you pay out the nose" (AJ Wilcox). Fix: run last-90-days with the last-30-days slice excluded rather than a bare 30-day pool.
## TikTok and other short-video platforms
- Broad targeting plus native-feeling creative is the norm.
- Interest layers behave as loose suggestions.
- Practitioner comfortable minimums run to the hundreds of thousands or millions.
- Verify current floors in platform docs; published third-party numbers for these platforms go stale fastest.
## EU / regulatory quick reference (all platforms)
- DSA:
- No profiling-based ads to known minors.
- No targeting on special-category data (ethnicity, religion, political views, sexual orientation).
- User consent cannot override either ban.
- Political/electoral/social-issue ads: non-deliverable in the EU since October 6, 2025 (TTPA).
- GDPR/Consent Mode: marketing-consent rates average 40-60%, so expect EU audience pools and tracked conversions to undercount accordingly.
## Sources
- Ben Heath (Heath Media): heathmedia.co.uk/best-audience-size-for-facebook-ads/ · heathmedia.co.uk/open-targeting-the-big-facebook-ads-debate/ · heathmedia.co.uk/facebook-ads-retargeting-strategy/
- AJ Wilcox / Eric Jones (B2Linked): b2linked.com/blog-page/linkedin-ads-how-to-effectively-target-your-audience · b2linked.com/blog-page/how-to-effectively-use-linkedin-ads-lookalike-audiences · b2linked.com/blog-page/the-fastest-ways-to-build-retargeting-audiences-on-linkedin-ads · b2linked.com/blog-page/linkedin-ads-exclusions-how-to-refine-your-targeting-to-reach-the-right-audience · b2linked.com/blog-page/start-retargeting-small-audiences-linkedin-ads · b2linked.com/blog-page/linkedin-audience-expansion-why-its-not-good-for-brand-awareness
- Demand Curve: demandcurve.com/blog/facebook-ads-targeting
- Google PMax claim: blog.google (official); Customer Match minimum change: searchengineland.com, ppc.land
- LinkedIn floors: LinkedIn Help articles a420864, a423690
- Meta policy changes (exclusion removal, sensitive categories, Special Ad Categories): searchengineland.com, socialmediatoday.com, adweek.com, jonloomer.com (Meta's primary newsroom pages were corroborated via these outlets)
references/worked-example.md›
# Worked examples - audience targeting plans
Two filled-in plans in the output shape (one B2B, one B2C), then a negative example annotated with what is wrong. Companies and numbers are illustrative composites, not real accounts.
## Table of Contents
- [Example 1 - B2B: compliance-training SaaS](#example-1-b2b-compliance-training-saas)
- [Example 2 - B2C: DTC skincare brand](#example-2-b2c-dtc-skincare-brand)
- [Negative example - what a bad plan looks like](#negative-example-what-a-bad-plan-looks-like)
## Example 1 - B2B: compliance-training SaaS
**Context from the clarifying questions:** sells safety-compliance training to mid-market manufacturers (200-2,000 employees, US). ACV $18k, sales-led. Conversion = demo booked; target CPA $220. Current volume: ~6 demos/week. Assets: 1,400-contact customer CRM list, ~9,000 site visits/month, 2,300 engaged followers. Budget $12,000/month (~$400/day). Addressable universe: ~28,000 accounts / ~190,000 relevant titles. No regulated category.
### 1. ICP summary (evidence-backed)
- Attributes: manufacturing industry; 200-2,000 employees; US; EHS/operations leadership roles. Evidence: closed-won analysis of 74 customers (CRM export, last 24 months).
- Signals: hiring for safety/EHS roles (why now: new leader builds the program); recent OSHA-citation press mentions; pricing-page visit. Evidence: 9 of last 20 closed-won accounts had posted an EHS role within 90 days of first touch (CRM + job-board cross-check, dated).
- Broad-vs-layered verdict: **layered.** 6 conversions/week is far below learning thresholds, and a ~190,000-person universe is too small for algorithmic expansion to help.
### 2. Tier table
| Tier | Defining signal (evidence) | Est. size | Exclusions applied | Test budget/day | Success criterion |
| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | -------------------------------- | ------------------ | --------------- | --------------------------------------------------------------------- |
| First-party: engagers + site visitors | 90-day site visitors + 365-day content engagers (analytics) | ~14,000 | E1, E2, E3 | $80 | ≤$180 cost/demo |
| Retargeting pool (sized here; sequence → mbfinotti/advertising-skills@retargeting-funnel) | Pricing/feature-page visitors, 30 days | ~1,900 | E1, E2, E3 | $50 | ≤$150 cost/demo |
| Signal-triggered account list | Accounts with fresh EHS hiring or citation signal, refreshed weekly, ≤90-day signal age (CRM cross-check) | ~1,100 accounts / ~8,000 members | E1, E2, E3, E4 | $90 | ≥2× demo rate of the firmographic tier |
| Firmographic prospecting (professional network) | Function: EHS/ops + manager-and-above seniority, manufacturing, 200-2,000 employees (closed-won analysis) | ~160,000 after exclusions | E1, E2, E3, E4 | $180 | ≤$260 cost/demo after 4 weeks; lead quality ≥ current channel average |
Rows sit in the default efficiency order, no re-rank applied. Note that budget runs the opposite way - the firmographic tier takes the largest share precisely because it is the least efficient and the slowest to read, so it needs the most spend to say anything. Efficiency orders the testing, not the budget split.
Tiers deliberately absent, with reasons:
- Broad/algorithmic: universe too small; the trap is the algorithm expanding past the real market.
- Interest/affinity: no interest maps to "buys compliance training"; no evidence.
- Lookalike: seed exists, but the universe is small enough that firmographic targeting already covers it. Revisit if the firmographic tier saturates; seed selection would go to mbfinotti/advertising-skills@lookalike-audience-seeds.
Budget check: $400/day total. Demo at $220 CPA can't hit ~50 events/week on this budget, so all tiers optimize to a higher-funnel proxy event (qualified landing-page action, ~$45 effective CPA, ~55/week plausible at full budget) with demos tracked as the true KPI offline.
### 3. Exclusion matrix
| Exclusion list | Source | Applied to |
| -------------------------------- | ------------------------------- | ---------------------- |
| E1 Customers | CRM upload, refreshed monthly | All tiers |
| E2 Employees + known competitors | Company exclusion list | All tiers |
| E3 Booked demos, 90 days | CRM upload, weekly | All tiers |
| E4 Higher-intent tiers | First-party + retargeting pools | Both prospecting tiers |
Post-exclusion size re-check: all tiers remain above the platform floor (smallest: retargeting at ~1,900).
### 4. Test sequence
1. Weeks 1-2: first-party + retargeting tiers only (fastest signal, cheapest evidence). Variable isolated: audience; one proven creative set.
2. Weeks 2-6: add both prospecting tiers at fixed per-tier budgets. Variable isolated: firmographic vs. signal-triggered audience, same creative.
3. Week 6: promote/hold/kill per the stated criteria. Kill = $440 spent per tier-week at 50%+ worse cost/proxy than the best tier, or delivery stalled.
4. On promote: scale ≤20%/week; revisit the lookalike tier only if the firmographic tier reaches ~35% audience penetration.
### 5. Compliance notes
None triggered. Note kept in plan: never target or infer health conditions of workers even though the product is safety-adjacent.
### 6. Review cadence
- Overlap audit before any new tier.
- Weekly floor check during weeks 1-6.
- Signal list refreshed weekly (90-day expiry enforced).
- Customer/demo exclusion uploads weekly-monthly as listed.
- Full plan review quarterly or when the ICP evidence changes.
## Example 2 - B2C: DTC skincare brand
**Context:** AOV $58, conversion = purchase, target CPA $29 (blended). Mature account: ~420 purchases/week. Assets: 92,000-customer list, ~310,000 site visits/month, large engaged social audience. Budget $150,000/month (~$5,000/day). Universe: tens of millions. No regulated category.
### 1. ICP summary
- Attributes: women 25-45, US/CA/UK, skincare-involved buyers. Evidence: customer survey (n=1,800) + purchase data.
- Signals: cart abandonment, product-page depth, seasonal spikes (gifting periods), repeat-purchase window at 60 days. Evidence: analytics cohort report.
- Broad-vs-layered verdict: **broad-first.** Conversion data is dense (420/week ≫ threshold) and the universe is huge. Explicit layers are kept for (a) research into who responds, (b) retargeting, (c) the parallel test control.
### 2. Tier table
| Tier | Defining signal (evidence) | Est. size | Exclusions applied | Test budget/day | Success criterion |
| ------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------- | ---------------- | ------------------ | --------------- | ------------------------------------------------------------------------ |
| Broad/algorithmic prospecting | None - delivery model on purchase signal | Tens of millions | E1, E2, E3 | $2,900 | ≤$29 blended CPA |
| Lookalike (top-LTV seed; seed selection → mbfinotti/advertising-skills@lookalike-audience-seeds) | Resemblance to top-quartile-LTV buyers, seed refreshed every 45 days | Millions | E1, E2, E3 | $900 | Within 15% of broad tier CPA; else fold into broad |
| Interest control (research instrument) | Skincare/beauty interest cluster (survey evidence) | ~8M | E1, E2, E3 | $400 | Not judged on CPA alone - reports segment response for creative planning |
| First-party: lapsed customers | 60-180 days since last purchase (purchase data) | ~38,000 | E2 only | $300 | ≤$18 cost/repeat purchase |
| Retargeting pool (sized here; sequence → mbfinotti/advertising-skills@retargeting-funnel) | Site visitors 30 days + cart abandoners 7 days | ~95,000 | E1, E2 | $500 | ≤$14 CPA; watched for incrementality, not celebrated for ROAS |
Rows are deliberately re-ranked away from the default order. This account already runs a mature retargeting pool and a 92,000-customer list, so the warm tiers need no proving and the whole open question sits on the cold side - cold tiers therefore lead both the table and the test sequence. The default order still governs any account without that head start.
Retargeting + lapsed = $800/day = 16% of spend - inside the 15-25% band; alarm threshold documented at 40%.
### 3. Exclusion matrix
| Exclusion list | Source | Applied to |
| ----------------------------- | --------------------------- | ----------------------------------- |
| E1 Purchasers, 30 days | Customer list, synced daily | All prospecting tiers + retargeting |
| E2 Employees | List upload | All tiers |
| E3 Retargeting + lapsed pools | First-party audiences | Broad, lookalike, interest tiers |
### 4. Test sequence
Ordered by the re-rank stated under the tier table, not by the default order.
1. Weeks 1-4: broad vs. lookalike vs. interest control at fixed per-tier budgets, identical creative. One variable: audience.
2. Week 4 decision: lookalike within 15% of broad → merge into broad and reassign budget; interest control never killed on CPA (it is the research instrument) but capped at ~8% of spend.
3. Winners move to algorithmic budget pooling; scale ≤20%/week, the widely treated (not platform-documented) learning-reset threshold.
4. Quarterly: a geo-holdout on the retargeting pool to estimate incrementality - reported retargeting ROAS is treated as inflated until tested.
### 5. Compliance notes
None triggered. EU expansion flagged: consent banners will cut tracked signal. Re-verify tier sizes and switch to server-side conversion feeds before extending the plan to the EU.
### 6. Review cadence
- Overlap audit before any new tier.
- Seed refresh every 45 days.
- Exclusion syncs daily/weekly as listed.
- Creative fatigue watch handed to mbfinotti/advertising-skills@ad-creative-fatigue.
- Full review quarterly.
## Negative example - what a bad plan looks like
The same B2B company as Example 1, planned badly:
| Tier | Definition | Budget/day |
| ------------------------ | ------------------------------------------------------------- | ---------- |
| "Ops leaders" | 12 stacked interests + job titles + age 30-55 + 3 metro areas | $40 |
| "Safety pros" | 9 stacked interests, overlapping the above | $40 |
| "Manufacturing interest" | Broad interest category, no exclusions | $40 |
| Lookalike | Seed = all page followers | $40 |
| Retargeting | All site visitors 180 days, same offer as prospecting | $180 |
| "Coverage" tier | Competitor-brand interest, est. 800 people | $20 |
Why it fails, line by line:
- **Every tier is below the funding floor.** $40/day against a $220 CPA is ~1-2 conversions/week per ad set; nothing exits learning. Six fragments where two consolidated tiers would work.
- **Interest stacking as precision theater.** 12 interests + demographics + geo shrinks the audience and raises cost without touching the actual lever (creative and offer). The ICP knowledge fed filters instead of messaging.
- **No exclusion matrix.** Tiers 1-3 overlap heavily and bid against each other; customers and open opportunities see prospecting ads.
- **Junk seed.** Page followers are engagement-selected, not purchase-selected; the lookalike inherits that bias.
- **Retargeting at 50% of spend, same offer.** Inflated blended ROAS while the prospecting refill starves - and the users it "converts" were largely converting anyway.
- **"Coverage" tier below the platform floor.** 800 people will not deliver; it exists to look thorough, not to work.
- **No evidence column, no success criteria, no kill rule.** Nothing here can be audited, promoted, or killed on data - the plan cannot fail visibly, which means it cannot be fixed.
SKILL.md›
---
name: ad-audience-targeting
description: "Turn a business's ICP and buying signals into a layered ad audience targeting plan - cold/broad prospecting, interest and in-market behavioural segments, lookalike/similar, first-party lists, and retargeting pools - each sized against platform audience floors, budgeted to the learning threshold, and kept from overlapping by exclusion rules. Use whenever the user mentions ad targeting, who to target with ads, audience tiers or layers, broad vs. layered targeting, audience overlap between campaigns, or mapping an ICP onto ad audiences - even if they never say 'audience'. Covers B2B and B2C. Do NOT use to pick the seed customers behind a lookalike (mbfinotti/advertising-skills@lookalike-audience-seeds) or to sequence retargeting messages (mbfinotti/advertising-skills@retargeting-funnel)."
license: MIT
metadata:
author: Maya-Beth Finotti
version: "1.1.4"
---
# Audience Targeting
Map who the customer is (ICP) and what they do that signals intent (buying signals) into a layered paid-media targeting plan: which audience tiers to run, how each is defined, sized, budgeted, sequenced for testing, and kept from bidding against the others.
The tier logic, exclusion discipline, overlap math, and funding floors are identical for B2B and B2C. What differs (see the B2B vs. B2C section for detail):
- Universe size: B2B ICPs are often smaller than platform minimums.
- Which tiers dominate: B2B leans firmographic and list-based; B2C leans broad, lookalike, and behavioral.
- Cycle length.
- Success metric: pipeline quality vs. volume CPA/ROAS.
This skill produces the plan, not the platform setup. It places and sizes the retargeting tier but does not design the per-stage retargeting sequence (mbfinotti/advertising-skills@retargeting-funnel), and it assumes a seed list exists but does not select or build it (mbfinotti/advertising-skills@lookalike-audience-seeds).
## Evidence gate
- Never assert an ICP, a buying signal, or a tier without sourced data behind it: an ICP document, customer/CRM data, analytics, or past campaign results.
- Missing ICP → stop and request one (or a customer list to derive it from). Never invent an ICP from the product description alone; a plan built on an imagined customer optimizes toward fiction.
- Unknown attributes score neutral, never negative. Absence of evidence is not a negative signal; scoring it negative systematically buries accounts with a thin public footprint, which correlates with size, not fit.
- Record the evidence next to each tier in the plan (source and date), so the plan can be audited when performance surprises.
## Clarifying questions
Ask once, briefly, before planning; skip anything already answered.
1. B2B or B2C, and what does the ICP say - who buys, and what evidence backs it?
2. What counts as a conversion, and what is the target CPA (or ROAS)?
3. Roughly how many conversions per week does the account currently produce? (Sets the broad-vs-layered default.)
4. What first-party assets exist: customer list (size), site traffic volume, CRM, engaged followers?
5. What is the total monthly budget for this plan?
6. How large is the addressable universe - thousands of accounts or millions of consumers?
7. Does the offer touch a regulated category (housing, employment, credit, financial products, health, politics)?
8. By what date must results land - is there a hard deadline (launch, quarter close, seasonal window), or is the timeline open?
9. Do you want a one-off win this cycle, or a compounding asset that keeps paying after the campaign ends?
10. What is your effort ceiling - hours per week, who executes, and whether legal/privacy review is available to you at all?
The last three re-rank the tier plan before it is written. Say in the plan which answer moved which tier:
- Hard near-term date promotes first-party and retargeting tiers - they return readable evidence within days - and demotes cold broad, which needs a full learning cycle before it says anything.
- Compounding mandate promotes first-party list growth and cold broad: one builds a seed and a suppression asset the business keeps, the other trains a delivery model that improves with every conversion. A retargeting pool decays to nothing within weeks of the refill stopping.
- No privacy review available at all deletes every tier that needs identifiable data uploaded - first-party custom, and lookalike built from a customer seed - rather than ranking them last; they are not options for this account. A low effort ceiling on its own only demotes them, and promotes platform-native behavioral and broad tiers.
## Attributes vs. signals
The translation step everyone skips: an ICP lists _attributes_, a targeting plan runs on attributes _and_ signals. Distinguish them explicitly.
| | Attribute - "what is true" | Signal - "why now" |
| ---------- | --------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
| Answers | Is this person/account a fit? | Why are they more likely to buy now? |
| Examples | industry, company size, role, age, geography, category interest | funding round, hiring spike, pricing-page visit, cart abandonment, seasonal trigger |
| Feeds | tier membership, exclusion lists, firmographic filters | tier priority, recency windows, test order |
| Goes stale | slowly - refresh quarterly | fast - has an expiry date |
- A signal older than ~90 days is context, never a trigger. Two fresh independent signals (e.g. funding + relevant hiring) outrank one stale one.
- Test for any candidate signal: given ten people/accounts that already pass the attribute filter, does it say which to reach first? If not, it's an attribute wearing a signal costume.
## The tier model
Every plan is assembled from these six tiers, ordered by efficiency - outcome bought per unit of effort - never by which is cheapest to stand up. Include a tier only when a real, evidenced signal defines it; an empty tier is a line item, not an audience.
- efficiency: `first-party custom > retargeting > lookalike > behavioral/in-market > cold broad > interest & affinity`
- value (volume of results the tier can produce at its ceiling): `cold broad > lookalike > behavioral/in-market > first-party custom > retargeting > interest & affinity`
- effort: `cold broad > retargeting > first-party custom == lookalike > behavioral/in-market == interest & affinity`
- compliance cost: `first-party custom > lookalike > retargeting > behavioral/in-market > interest & affinity == cold broad`
The axes disagree on purpose:
- Interest, the cheapest tier to stand up, is the least efficient one.
- Cold broad, the tier with the highest ceiling, is the most expensive to run and the slowest to read.
- First-party leads because a list the business already owns converts after an hour of setup. It also carries the heaviest consent, DPA and data-residency exposure of the six, which is what the compliance axis is there to price.
| Tier | Defining signal | Effort to stand up | Volume vs. intent | NOT for |
| ------------------------------------ | --------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | ---------------------------------------------------------- |
| First-party custom | Owned data: customer/CRM list, site visitors, content engagers | An hour - the list already exists; add a consent and data-residency check before upload | Mid-bottom funnel: low volume, high intent | Prospecting scale |
| Retargeting pool | Prior engagement with the business, graded by recency × depth | A week or more of traffic or spend to fill the pool; near-zero to maintain afterwards | Bottom: lowest volume, highest intent | Proving the plan works - its ROAS is structurally inflated |
| Lookalike / similar | Statistical resemblance to a seed list | An hour once a seed exists; sourcing the seed is a separate job | Top-mid: high volume, intent quality tracks seed quality | Replacing retargeting; seeds of engagement-bait clickers |
| Behavioral / in-market | Category-level purchase-intent actions tracked by the platform | An hour - platform-native segments, nothing to build or upload | Mid: medium volume, medium intent | Broad awareness reach |
| Cold prospecting (broad/algorithmic) | None - the delivery algorithm selects using the account's conversion signal | A standing job - budget held above the learning threshold plus a continuous creative supply | Top: highest volume, lowest intent | Learning who the buyer is; tiny addressable universes |
| Interest & affinity | Declared or inferred interests | An hour - and largely spent for nothing; major platforms treat interest inputs as suggestions, not constraints | Top: high volume, weak intent | Precision reach - largely deprecated as a precision tool |
- Default rung: fund first-party and retargeting first. Move up one rung - lookalike, then behavioral, then cold broad - as soon as the warm tiers saturate or the pipeline they draw on stops refilling. Warmer tiers are smaller and cheaper per result; colder tiers are what refills them, so a plan that funds only warm tiers eats its own pipeline within weeks.
- When site traffic is too thin for a retargeting pool, engagement audiences are the standard fallback seed, ranked by how fast they fill: `video viewers > content/profile engagers > lead-form openers`. A video-view pool reaches usable size in about a week of spend; a lead-form-opener pool can take one to three months of it.
- This ranking is a default, not a law - it shifts with context and with who executes it. Re-rank it against what you already know about the user before writing the plan:
- An owned list of tens of thousands of customers promotes first-party above everything else.
- Dense existing pixel traffic promotes retargeting.
- An in-house data or analytics team promotes lookalike.
- A constraint the user actually stated does something different from re-ranking: it removes the tier. Delete any tier the answers rule out, and name it as deleted in the plan with the constraint that killed it and what would bring it back, for example:
- "cold broad: deleted, addressable universe of a few tens of thousands, revive if the universe or the geography widens".
- No privacy review deletes first-party and customer-seeded lookalike.
- A regulated offer in a category that disallows lookalikes deletes that tier (see Compliance gate).
A ruled-out tier left sitting at the bottom of the table is indistinguishable from one nobody considered, and it comes back next planning cycle as a fresh idea.
## Broad vs. layered: the judgment call
The most contested decision in this domain - present it as a conditional, never a doctrine. The ranking flips on one input, account data density, so it is stated twice rather than blended into a single misleading order:
- efficiency (new or thin-data account, narrow ICP or small universe, small budget, regulated offer): `explicit layers > parallel test > broad`
- efficiency (dense conversion data, large universe, budget that feeds the algorithm, goal is efficient scale): `parallel test > broad > explicit layers`
Default rung: explicit layers. The one condition that moves the plan up a rung is a campaign comfortably clearing its learning threshold - then run the parallel test, and adopt broad only if the duplicate wins.
| Posture | You spend | You get | You give up |
| -------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
| Explicit layers | A week to define tiers, then a standing job maintaining exclusions and refreshing lists | Attribution - reveals which segment actually responds | Reach the algorithm would have found on its own, plus the over-narrowing risk |
| Parallel test (duplicate one campaign, switch only the duplicate to broad) | An hour of setup plus one test cycle of budget on the duplicate | An account-specific answer instead of someone else's general one, fully reversible | One cycle of delay before committing either way |
| Broad / algorithmic | Near-zero to set up, but sustained budget density across a full learning cycle | Efficient scale wherever the universe is genuinely large | Any knowledge of who the buyer is; wasted reach when the real market is small |
Where the evidence sits:
- **The broad camp:**
- Ben Heath reports open/broad targeting "often (but not always) outperforms interest targeting", especially on "mature ad accounts with decent conversion data".
- Demand Curve independently backs broad as "the opposite of traditional marketing wisdom" that works.
- Platform vendors publish self-reported data agreeing; treat those numbers as marketing.
- **The layered camp:** B2B practitioners (B2Linked among them) caution against automatic audience-expansion features - with a narrow, well-defined ICP, letting the platform broaden the audience "to anybody and everybody" wastes budget.
- **The middle:** Heath himself rejects the "kill retargeting entirely" camp as "the more extreme view" - even broad-first accounts keep first-party and retargeting tiers.
- Never flip an account wholesale on general advice; the parallel test is the only honest way to change rungs, and it keeps the layered control running while it decides.
- Broad hides who the buyer is. Keep at least one manually-defined tier alive as a research instrument even when broad wins on cost.
- Over-narrowing is the named failure mode of the layered camp: stacking many interests plus demographic filters produces a small, expensive audience that sees an unchanged ad. If the ICP knowledge is rich, spend it on creative variants per segment, not on more filters.
## Sizing and funding floors
A tier that can't be funded to significance doesn't belong in the plan.
1. Size each tier and check it against the platform's minimum audience size ([references/platform-notes.md](references/platform-notes.md) - load when the user names their platform; platform floors change without notice, so verify against current platform docs).
2. Compute each tier's budget floor from the platform's learning threshold: daily floor ≈ (target CPA × weekly optimization-event threshold) ÷ 7. The most widely cited threshold is ~50 events per ad set per week. An ad set at $30/day against a $50 CPA yields ~4 conversions a week - it will never exit learning; merge it, or optimize to a higher-funnel event.
3. Below the size floor or the budget floor, fix it in this order - efficiency: `merge upward > cheaper proxy event > cut`.
- **Merge the tier into its nearest neighbour** - an hour of rebuilding exclusions, and it keeps both the audience and the delivery. Try this first.
- **Optimize to a cheaper higher-funnel event** - an hour plus a relearning cycle, and it buys delivery at the price of a softer success metric to reconcile against the real one afterwards.
- **Cut it** - near-zero effort, buys nothing, but stops the waste. Never keep an unfundable tier "for coverage".
4. Small audiences also cost more per impression - AJ Wilcox's warning that "SUPER small audiences will make you pay out the nose" generalizes across platforms.
5. Starting split: 70-80% prospecting tiers, 15-25% retargeting, remainder experimental. Retargeting above ~40% of spend is a signal to grow prospecting, not evidence retargeting "works" - over-funding it inflates blended ROAS while starving the pool refill.
6. Splits shift by stage: launches run 80-90% prospecting; mature high-traffic brands can justify heavier warm spend.
## Overlap and exclusion discipline
Two funded tiers bidding on the same person compete against each other in the auction, inflating cost without adding reach.
- Exclusions run before inclusions - platforms prioritize exclusion criteria, so build the exclusion matrix first.
- Everywhere: exclude existing customers (unless the campaign is expansion/upsell), employees, and known competitors.
- Between tiers: exclude each higher-intent tier from every lower-intent tier - retargeting pool out of lookalike and prospecting, customer list out of everything. Each person sits in exactly one tier.
- Use first-party suppression lists for this. Interest-based _exclusion_ features are deprecated or removed on major platforms; customer/converter suppression via uploaded lists remains standard practice.
- Overlap thresholds between two funded tiers:
- Under 10%: ignore.
- 10-30%: monitor.
- 30-50%: act.
- Over 50%: merge the tiers.
Audit overlap before launching any new tier, not only when troubleshooting.
- In the 30-50% band, `add an exclusion > consolidate`: an exclusion is an hour of work and reversible in one click, while consolidating destroys the per-tier read the test budget was paying for. Consolidate only when the exclusion would push either tier near its size floor.
- The opposite failure exists too: stacking exclusions until the audience drops below the platform floor silently halts delivery. After building the matrix, re-check every tier's post-exclusion size.
## Test sequencing
1. Fund in the tier model's efficiency order, restated here because this is where the money actually moves - efficiency: `first-party > retargeting > lookalike > behavioral > cold broad` (an interest tier, if funded at all, goes last). Speed of signal ranks nearly the same, which is why the order holds under a deadline: `first-party == retargeting > lookalike > behavioral == cold broad`.
2. Test with a fixed budget per audience so every tier actually gets spend; move proven winners into algorithmic budget pooling to scale. Algorithmic pooling during testing starves the very tiers the test is meant to read.
3. Run the broad-vs-layered parallel test (above) as its own experiment - one variable at a time.
4. Scale winners at most ~20% budget per week; larger jumps are widely treated as learning-resetting edits, though no platform documents a fixed percentage.
5. Decision rule per tier after each cycle, stated in the plan before launch: promote (beats target, scale ~20%), hold (within ±20% of target or still learning, keep collecting), kill (2× target CPA spent with results 50%+ worse than the best funded tier, or delivery stalled below floors).
## Compliance gate
A hard gate before spend, not a review. Rules differ by jurisdiction and platform but converge on:
- Sensitive/protected traits - health, ethnicity, religion, political views, sexual orientation, financial hardship - cannot be targeted on or inferred, even from a public signal. Major platforms have removed these categories outright.
- Regulated offer categories (housing, employment, credit, financial products, politics) trigger restricted targeting modes: demographic and geographic narrowing disabled, lookalikes often disallowed. Plan those campaigns as broad-plus-creative from the start.
- EU delivery adds consent requirements (expect a meaningful share of tracking signal to be absent), a ban on profiling-based ads to minors, and a ban on sensitive-data targeting that user consent cannot override.
- Signal loss is structural: a share of conversions is invisible to pixels regardless of consent choices elsewhere. Prefer server-side conversion feeds where available, and never judge tiers on pixel-only numbers when a source-of-truth (CRM, orders) exists.
- Any regulated-category campaign routes through legal/compliance before launch.
## B2B vs. B2C
| Dimension | B2B | B2C |
| ------------------------ | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------- |
| Dominant tiers | Firmographic professional-network targeting, account lists, first-party CRM | Broad/algorithmic, lookalike, behavioral, retargeting |
| Universe | Small; often near or below platform floors | Large; feeds algorithms well |
| Broad-vs-layered default | Layered - a tiny universe makes algorithmic expansion wasteful | Broad, once conversion data is dense |
| Buyer | Committee, not an individual (map roles via mbfinotti/advertising-skills@ad-buyer-group-mapper) | Individual |
| Cycle | Weeks to quarters - judge on downstream pipeline quality, not lead volume | Hours to days - CPA/ROAS readable quickly |
| Known trap | Audiences too small to exit learning; cheap-lead optimization collapsing lead quality | Creative fatigue and seasonality, not targeting |
- B2B corollaries:
- Broaden role targeting from exact titles to function + seniority when the title universe is too small.
- A tiny universe (a few tens of thousands) often runs better as one consolidated campaign than as a tiered split.
- Everything else in this skill - evidence gate, attribute/signal translation, exclusion matrix, funding floors, test sequencing, compliance - applies to both unchanged.
## Output shape
Deliver the plan as one document:
1. ICP summary with evidence sources, split into attributes and signals.
2. Tier table: tier | defining signal (with evidence) | est. audience size | exclusions applied | test budget /day | success criterion - rows ordered by efficiency, with a line stating any re-rank and what in the answers caused it, and a line naming every tier deleted and the constraint that deleted it.
3. Exclusion matrix: each exclusion list × which tiers it applies to.
4. Test sequence: order, duration, the one variable each test isolates, and the promote/hold/kill rule. State why the order departs from the default whenever it does.
5. Compliance notes: regulated flags and what they force.
6. Review cadence:
- Overlap audit before any new tier launch.
- Tier performance vs. floors weekly during testing.
- Seed/list refresh every 30-60 days (stale seeds quietly degrade lookalikes).
- Full plan review quarterly or on ICP change.
See [references/worked-example.md](references/worked-example.md) for a filled-in B2B plan, a B2C plan, and a negative example.
## Failure modes
- Over-segmentation: many small ad sets below the learning floor. Consolidation regularly halves cost per result on the same budget.
- Interest over-stacking: precision theater - a small, costly audience and no better creative.
- Retargeting worship: its high reported ROAS is largely non-incremental (many of those users would have converted anyway); never let it crowd out prospecting.
- No exclusion matrix: tiers silently bid against each other and against the customer base.
- Exclusion overreach: stacked exclusions drop a tier below the floor and delivery stops.
- Stale inputs: signals older than 90 days treated as triggers; seed lists never refreshed.
- Attributing creative effects to targeting (and vice versa): change one variable per test, or the result teaches nothing.
- Trusting broad on a tiny universe: the algorithm expands to irrelevant reach because the real market can't absorb the spend.
## Objective and measurement
- Structural pass (before launch): 100% of funded tiers clear both the platform size floor and the budget floor, and no funded tier pair overlaps above 30% without a documented exclusion. If any tier fails, merge or cut and re-check - do not launch a plan that fails structurally.
- Outcome pass (after the first full test cycle): every funded tier has a promote/hold/kill verdict backed by data, and the cost-per-result spread between best and worst surviving tier exceeds ~30% - a spread that wide is actionable; a flat spread means the tiers weren't meaningfully different, so consolidate and re-plan.
- Ongoing KPIs:
- Blended CPA/ROAS against target.
- Prospecting share of spend (hold ≥60% unless deliberately harvesting).
- Overlap % between funded tiers.
- For B2B, downstream lead quality (MQL→SQL or equivalent) per tier - a tier winning on CPL and losing on quality is a kill, not a promote.
- Iterate the plan until both passes hold.
## References
- [references/worked-example.md](references/worked-example.md) - filled-in B2B and B2C targeting plans in the output shape, plus a negative example.
- [references/platform-notes.md](references/platform-notes.md) - vendor-specific size floors, learning thresholds, and mechanics, with sources. Load only when the user names their platform.
- mbfinotti/advertising-skills@lookalike-audience-seeds - seed list selection; this skill assumes a seed exists but does not select or build it.
- mbfinotti/advertising-skills@retargeting-funnel - retargeting sequence design (per-stage messaging, windows, frequency caps); this skill places and sizes the retargeting tier but does not design the messaging sequence.
- mbfinotti/advertising-skills@ad-buyer-group-mapper - B2B buying-committee mapping for multi-role audiences.
- mbfinotti/advertising-skills@thought-leadership-ads - person-fronted amplification campaigns that consume this plan's audience tiers.
- mbfinotti/advertising-skills@ad-spend-allocation - cross-campaign budget allocation across multiple initiatives.
- mbfinotti/advertising-skills@ad-platform-selection - channel choice and platform mechanics that affect tier-level targeting options.