SKILL DETAIL
retargeting-funnel
mbfinotti/advertising-skills/retargeting-funnel
Design a multi-stage retargeting sequence from a site's own funnel data - recency windows and behavioural-depth tiers per stage, a message and offer ladder for each stage, mutually exclusive audiences with exclusion logic, and per-stage frequency caps. Use whenever the user mentions retargeting or remarketing, cart or form abandonment, how long a retargeting window should be, frequency caps, a retargeting audience that is too small, or ads still showing to people who already bought - even if they never say 'funnel'. Covers B2B and B2C, and produces a stage-by-stage plan rather than campaigns built inside an ad platform. Do NOT use to design cold prospecting audience tiers - use mbfinotti/advertising-skills@ad-audience-targeting instead.
Installation
npx skills add https://github.com/mbfinotti/advertising-skills --skill retargeting-funnel
スキルファイル
SKILL.md
最終同期 · 2026/09/24
evals/evals.json›
{
"skill_name": "retargeting-funnel",
"evals": [
{
"id": 1,
"prompt": "I run Emberline, a DTC scented-candle store. We get about 140k sessions a month and roughly 1,900 orders. I pulled the Google Analytics time-lag report like our consultant asked: 58% of purchases happen within 1 day of the first visit, 86% within 5 days, 96% within 12 days, and almost nothing converts after day 30. Here is the retargeting plan I sketched - five stages, each its own campaign: (1) all site visitors 0-30 days, (2) product page viewers 0-30 days, (3) cart abandoners 0-30 days, (4) checkout abandoners 0-60 days, (5) past buyers 0-180 days. Can you refine the windows and the messaging for each stage?",
"expected_output": "A redesigned sequence with the hot edge derived from the 80th converter percentile (about 5 days), fewer collapsed stages, windows assigned inversely to depth, mutual exclusion and converter suppression with an explicit written window, past buyers moved to a win-back tier, and a B2C message ladder with any incentive on the final stage only.",
"files": [],
"expectations": [
"Derives the hot-window edge from the converter time-lag percentiles, placing it at roughly 4-7 days (the ~80% point sits near 5 days), instead of keeping the proposed 30-day windows",
"States explicitly that stage boundaries come from Emberline's own lag distribution and that platform default retention windows are arbitrary relative to this specific business",
"Collapses the five-stage plan to fewer conversion stages (a hot/warm/win-back shape) because 80%+ of converters buy within 7 days",
"Gives the collapse reason: more stages than the conversion cycle supports produces empty or wasted stages",
"Rejects the 0-60-day window on checkout abandoners: deep-intent actions get the shortest windows because intent decays fast",
"Assigns windows inversely to behavioural depth: cart/checkout tiers get the shortest windows and shallow all-visitor tiers the longest",
"Claims stages deepest-first along the depth order cart or checkout start above product page viewer above any visitor",
"Moves past buyers out of the conversion ladder into a separate win-back or replenishment tier",
"Makes stages mutually exclusive - each stage excludes all deeper and fresher stages - and points out that in the draft one user sits in several stages at once",
"Names the self-competition mechanism: overlapping stages bid against each other in the same auction and inflate CPM with zero incremental reach",
"Excludes converters from every stage and writes an explicit converter-exclusion window as a number of days, not an open-ended exclusion",
"Proposes an auditable audience naming convention that distinguishes inclusion audiences from exclusion audiences (for example RTG_ and EXCL_ prefixes)",
"Plans at least 3 distinct creative concepts per stage",
"Gives each stage a distinct message job following the B2C slot order reminder, then social proof, then objection handling, then incentive, with any discount confined to the final stage"
]
},
{
"id": 2,
"prompt": "We're Corvid Systems - compliance software for mid-market banks, deals run 4 to 6 months with a security review in the middle. I'm setting up remarketing audiences this week and I just need the standard windows: what does everyone use for site visitors, feature page viewers, and demo requesters? We don't have a time-to-conversion report and honestly I don't have time to pull one before Friday.",
"expected_output": "A refusal to hand over generic windows: either the user exports lag data, or the plan proceeds on a named proxy (the CRM sales-cycle export, given the multi-month cycle) with every boundary flagged provisional, sized to the 4-6-month cycle, list-based at the long end, with a no-discount B2B ladder.",
"files": [],
"expectations": [
"Does not hand over generic industry-standard windows as the answer; states plainly it will not guess windows without time-lag data",
"Offers the two-way choice: export a time-to-conversion or sales-cycle report, or proceed on a named proxy with every boundary flagged as provisional",
"Names the proxy in the output rather than silently substituting it for real data",
"Ranks the CRM sales-cycle export above an analytics lag report for this account, because a 4-6-month cycle outruns what the pixel can see",
"Flags every proxy-derived boundary as provisional, to be re-derived once real lag data exists",
"Sizes windows to the multi-month cycle, on the order of 90/180/365 days, not 30-day defaults",
"Warns that a default-length window on a multi-month cycle silently drops most of the pipeline",
"Recommends list-based (CRM or first-party upload) audience membership rather than pixel-based at the long end, citing browser privacy limits on long cookie windows",
"Suggests CRM deal stage (evaluation, proposal, negotiation) as a depth signal, since the CRM knows more about depth than the pixel",
"Builds the B2B ladder with no discount rung; the incentive-equivalent rung is a lower-friction ask such as an assessment, audit, or tailored demo",
"States which mechanics stay identical to B2C (mutual exclusion, converter suppression, the after-exclusion size check) so the plan is not read as a softened B2C plan"
]
},
{
"id": 3,
"prompt": "Growth lead at Marrow & Sage here, DTC cookware. Cart abandonment sits at 74%, so we built a coupon ladder: 10% off the day after abandonment, 15% at day 7, 20% at day 14. The coupon ads convert great. One weird thing - since launching it three months ago, abandonment has climbed to 79%. My read is we need the discounts sooner and bigger to catch people before they cool off. Tighten up the ladder for me?",
"expected_output": "A rejection of sooner-and-bigger: the rising abandonment is diagnosed as discount-trained abandonment, the discount is pushed to the final stage only, earlier stages get reminder then social proof then objection messages, repeat abandoners are excluded from incentives, and the un-training timeline is stated.",
"files": [],
"expectations": [
"Does not recommend moving discounts earlier or making them bigger",
"Diagnoses the abandonment rise from 74% to 79% after coupon launch as trained abandonment: customers learned that abandoning triggers a coupon",
"Restricts the discount to the final stage of the sequence only",
"Makes the first stage a plain reminder or dynamic item ad with no incentive",
"Fills the middle stages with non-price messages in the B2C slot order: social proof, then objection handling (shipping, returns, guarantee)",
"Excludes repeat abandoners from every incentive-carrying stage",
"Names the discount's structural costs: it spends margin every time it runs and is the hardest offer to withdraw once the market has learned it",
"Applies the principle that re-showing the same offer harder is the weakest stage design - change the offer or the angle instead",
"States that un-training the coupon behaviour takes on the order of a quarter, while the ladder change itself takes minutes",
"Adds converter exclusion on every stage with an explicit written window",
"Makes the day-band stages mutually exclusive so one abandoner cannot sit in the 10%, 15%, and 20% pools at once",
"Derives or requests the brand's own time-to-conversion data to set the stage boundaries instead of keeping the arbitrary 1/7/14-day rungs"
]
},
{
"id": 4,
"prompt": "We're Quillhaven, sales-assisted procurement SaaS, ACV around $40k. Traffic is about 11k sessions a month - 65% blog, roughly 700 people a month hit pricing, 1.5% request demos. I want a five-tier LinkedIn retargeting build: pricing visitors 30d, feature-page visitors 30d, blog readers 90d, video viewers 30d, webinar attendees 180d, each in its own campaign with manual bids. Launch is next month - I'll create the audiences the day we go live. Also want to seed a LinkedIn lookalike from the pricing-page audience. Thoughts?",
"expected_output": "A size-checked redesign: tiers checked against LinkedIn's 300-member floor after exclusions, merges or a single warm pool presented as the correct outcome, audiences created immediately because LinkedIn collection is non-retroactive, the lookalike corrected to predictive audiences, automated bidding for thin pools, and a no-discount B2B ladder.",
"files": [],
"expectations": [
"Checks every proposed tier against LinkedIn's minimum matched-audience size (300 members), measured after exclusions are applied, not before",
"States that a tier clearing the floor before exclusions can fall under it once fresher and deeper tiers and converters are carved out",
"Does not ship the five-tier plan as-is on 11k sessions: recommends merging tiers, and presents a two-stage or single-pool outcome as a correct result, not a failure",
"Repairs under-floor tiers in the order: widen the window, then broaden the trigger, then merge adjacent stages, then collapse to one combined warm pool",
"Corrects the launch-day audience plan: LinkedIn audiences are non-retroactive, collection starts only at creation, so every audience should be created now, before launch",
"Corrects the lookalike request: LinkedIn lookalike audiences were discontinued (February 2024) and replaced by predictive audiences",
"Presents the single combined broad warm pool as the legitimate default below the floor, moving to stratified tiers only once each stage clears its floor with room to spare",
"Recommends automated bidding rather than the proposed manual bids, because small LinkedIn pools underdeliver on manual bidding",
"Uses a B2B ladder with no discount rung, ordered proof, then objection, then ROI content, then the direct ask",
"Writes mutual exclusion between surviving stages and excludes current customers and converters on every stage",
"Sets a small-pool creative discipline: 3-5 rotating creatives with refresh on the order of every 2-3 weeks",
"Considers CRM deal stage or uploaded account lists as the depth signal for the long-window end rather than web recency alone",
"Asks for or derives time-to-conversion data instead of accepting the arbitrary 30/90/180-day windows",
"Warns that an under-floor stage either serves nothing or serves at punitive CPMs while the learning phase never exits"
]
},
{
"id": 5,
"prompt": "Quick one - I run retargeting for Fernwell, home fitness gear, on Meta with the sales objective. Warm audience is about 3,200 people, one video ad running to it. What frequency cap should I set in Ads Manager so we don't burn the audience out? Last week frequency hit 9, CTR dropped from 1.8% to 1.1%, and CPM went from $14 to $19.",
"expected_output": "An answer that no cap field exists on Meta's sales objective: a cap-proxy is defined instead, the given CTR and CPM moves are read as breached decay thresholds, the single-creative small pool is named as the structural cause, 3+ rotating concepts are required, and replacements launch alongside rather than as edits.",
"files": [],
"expectations": [
"States that Meta exposes no impression-cap field on the sales/conversion objective (only on reach or awareness-type objectives) and therefore does not instruct the user to set a cap in Ads Manager for this campaign",
"Defines a cap-proxy instead: the frequency reading at which to intervene, plus decay signals",
"Names the decay thresholds: CTR falling 15-20% or more and CPM rising 10% or more, measured against a 7-day rolling baseline",
"Applies the thresholds to the given numbers: the CTR drop (1.8% to 1.1%, about 39%) and the CPM rise ($14 to $19, about 36%) both breach them, so the cap is already breached in effect",
"Places frequency 9 against the retargeting operating band (roughly 2-4 watch, 4-6 warning, above 6 act): the account is past the act threshold",
"Identifies the structural cause: a roughly 3,200-person pool with one creative is an uncapped frequency machine regardless of settings - audience size and creative rotation are the real cap",
"Requires at least 3 distinct creative concepts in rotation for the stage",
"Warns that editing the live ad resets Meta's learning phase while pausing does not, so replacement creative launches alongside, not as an edit",
"Lists rising negative feedback (hides, see-less-of-this) as a third breach signal to monitor",
"States that retargeting tolerates higher frequency than prospecting because the audience knows the brand, but tolerance is not immunity",
"Sets a review cadence for the frequency and decay readings rather than a set-and-forget answer",
"Treats published frequency bands as starting points to recalibrate against the account's own decay curve, not as evidence-based constants",
"Connects budget to the pool: spend beyond reachable pool times capped weekly impressions times CPM only buys frequency past the cap, so the stage's budget is capped at that ceiling rather than raised"
]
},
{
"id": 6,
"prompt": "Board meeting fallout at Lanternway Outfitters (outdoor apparel, $48k/month paid budget, currently 75/25 prospecting-heavy). Retargeting ROAS shows 11x on the platform versus 1.9x for prospecting, and blended revenue has been flat all year. The board wants at least 50/50 next quarter. Retargeting pool is about 8,000 reachable people, CPM runs around $16, and we hold frequency to roughly 6 per person per week. Draft the new split for me.",
"expected_output": "A refusal grounded in arithmetic: the retargeting ceiling computes to roughly $750-800 a week (about $3,000-3,500 a month), the 11x ROAS is flagged as the cannibalisation signature given flat blended revenue, and an incrementality test with a named design and decision rule is scheduled before any budget moves toward retargeting.",
"files": [],
"expectations": [
"Does not deliver the requested 50/50 split; states that retargeting spend is bounded by pool size times frequency ceiling, not by ambition or platform ROAS",
"Computes the ceiling from the given numbers: 8,000 people times 6 impressions per week times $16 CPM comes to roughly $750-800 per week, about $3,000-3,500 per month",
"Caps the retargeting budget at that computed ceiling and states that excess budget forced in only buys frequency past the cap",
"Flags the 11x platform ROAS as suspect on its face: retargeting targets exactly the people most likely to convert on their own",
"Reads the combination of high platform ROAS and flat blended revenue as the cannibalisation signature: paying to intercept conversions that were coming anyway",
"Cites the scale of overstatement from large-scale randomized experiments: observational or platform attribution overestimated measured lift by roughly 7x to 9.5x",
"Schedules an incrementality test with a named design before moving budget toward retargeting",
"Selects the design by availability: a platform ghost-ad style lift test where offered, otherwise a randomized audience holdout withholding 10-20% of each stage",
"Includes the blended-efficiency metric, total revenue divided by total marketing spend, as the account-level sanity metric that drops the attribution layer entirely",
"States the decision rule: if holdout-measured lift is indistinguishable from zero, the retargeting budget folds back into prospecting regardless of platform ROAS",
"Treats the common 70/30 practice and the 50/50 move as conditional heuristics (justified only when traffic is high and conversion is the bottleneck), overridden here by the pool-bound ceiling",
"Brings in the reach-over-frequency objection (growth comes from reaching light and non-buyers) as a ceiling argument on the retargeting share of budget"
]
},
{
"id": 7,
"prompt": "Two audience problems at Vessel & Vine - we sell specialty coffee gear and beans, and a typical customer reorders about every 2 months. First: customers keep getting our dynamic ads for the exact grinder they bought the week before, and we're getting angry emails about it. Second, and I don't get this one: our prospecting campaigns' reach has been shrinking quarter after quarter for a year even though site traffic is stable. Our agency did set up a past-purchasers exclusion on Meta ages ago. Can you sort out our audience setup?",
"expected_output": "A two-part diagnosis: the dynamic ads need purchase-event suppression plus catalogue exclusions (audience exclusion alone does not stop the catalogue), and the shrinking prospecting reach is an over-long converter exclusion accumulating buyers - aggravated by Meta's purchase-audience retention extension to 730 days - fixed with an explicit window sized to the roughly 2-month repurchase cycle, plus a win-back tier.",
"files": [],
"expectations": [
"Fixes the bought-grinder problem with purchase-event suppression on the dynamic ads, not with converter audience exclusion alone",
"Adds catalogue-level exclusions (including out-of-stock items) so the catalogue cannot serve items the user already bought or cannot buy",
"Distinguishes the two mechanisms: audience exclusion controls who sees ads, catalogue suppression controls which items are shown, which is why the existing past-purchasers exclusion did not stop the grinder ads",
"Audits that converter exclusion actually exists on every stage and every channel rather than trusting that the agency's old setup covers everything",
"Diagnoses the shrinking prospecting reach as an over-long converter exclusion: the buyer pool accumulates and silently suppresses prospecting quarter over quarter",
"Connects the shrinkage to platform retention changes: Meta extended purchase-event audience retention to 730 days, auto-applied to existing audiences, so a purchaser exclusion built on it now suppresses about two years of buyers",
"Sets an explicit written converter-exclusion window sized to the roughly 2-month repurchase cycle (on the order of 90-180 days), not an open-ended exclusion",
"Names both failure directions of the window: too short re-ads recent buyers, too long silently chokes prospecting reach",
"Adds a standing review note to re-audit exclusion windows whenever a platform extends its retention defaults",
"Moves past purchasers beyond the exclusion window into a win-back or replenishment tier (the 2-month reorder cycle is a cross-sell or refill opportunity), outside the conversion ladder",
"Orders the fixes by waste removed per unit of effort: the suppression and audience-definition edits (minutes per channel) come first, before any funnel redesign",
"Proposes an auditable naming convention separating inclusion and exclusion audiences so any stage reads as include X minus Y minus converters",
"Verifies that the purchase event itself fires correctly as a prerequisite, since both the dynamic-ad suppression and the exclusion depend on it"
]
},
{
"id": 8,
"prompt": "My CFO at Gladehouse Software (self-serve team-collaboration tool) doesn't buy our retargeting numbers. The platform dashboard says retargeting did 14x ROAS last quarter and drove 640 signups, but total new revenue barely moved versus the quarter before we launched the campaigns. She wants proof the ads work. I was going to build a before/after comparison and maybe a regression of weekly signups on weekly spend - will that convince a finance audience?",
"expected_output": "A measurement plan that rejects before/after and observational regression, cites the RCT evidence that observational methods overstate lift severalfold, reads the flat-revenue-high-ROAS pattern as cannibalisation, and schedules a randomized incrementality test with a named design, holdout share, duration, and a pre-agreed decision rule, plus a blended-efficiency metric.",
"files": [],
"expectations": [
"Rejects the before/after comparison and the spend regression as proof: observational methods overestimated experimentally measured lift by roughly 7x to 9.5x in large-scale randomized trials",
"Cites the research base by name - the Gordon and Zettelmeyer et al. RCT comparison and/or the Blake, Nosko and Tadelis eBay brand-search result - rather than a vague studies-show",
"States why retargeting is the highest-risk case for inflated attribution: it targets exactly the people most likely to convert on their own",
"Reads the given pattern, 14x platform ROAS beside flat total revenue, as the signature of paying to intercept conversions that were coming anyway",
"Proposes a randomized incrementality experiment with a named design as the proof the CFO gets",
"Chooses the design correctly: a platform ghost-ad style lift test where the platform offers one, otherwise an audience holdout withholding a random 10-20% of each stage",
"Positions the geo or matched-market design as the heavy option (roughly a quarter of coordination), not the default unless matched-market infrastructure already exists",
"Includes the blended-efficiency sanity metric: total revenue divided by total marketing spend, which drops the attribution layer entirely",
"Pre-registers the decision rule: any stage whose holdout-measured lift is indistinguishable from zero is cut or restructured, no matter its platform ROAS",
"Does not use platform-reported conversions or ROAS as the success metric of the new measurement plan",
"Tracks new-vs-returning conversion share among the per-stage metrics",
"Sets the expectation that the experiment needs weeks of elapsed time before it answers"
]
},
{
"id": 9,
"prompt": "Planning retargeting for Thornbury Analytics - B2B data-quality platform. Our CRM says median first-touch-to-close is 95 days, 80th percentile around 150. About 55% of our traffic is Safari/iOS (design-agency-heavy audience). My plan: one Meta website-visitor audience set to 365 days and one Google remarketing list at 365 days, and we run book-a-demo ads to everyone in both. Simple and wide - anything wrong with that?",
"expected_output": "A correction on three fronts: the Meta 365-day website audience silently truncates to the 180-day ceiling, pixel windows beyond about a week undercount the Safari-heavy majority so the long end moves to CRM-list audiences, and the single book-a-demo message is replaced by a staged B2B ladder with depth tiers, exclusions, and a scheduled incrementality check.",
"files": [],
"expectations": [
"Flags that Meta standard website custom audiences cap at 180 days, so the requested 365-day Meta audience silently becomes a 180-day one - the ceiling truncates, it does not error",
"Distinguishes Google's remarketing-list ceiling (540 days, so 365 is possible there) and/or instructs verifying each platform's current retention ceiling against official documentation before building",
"Flags the Safari/iOS constraint: first-party cookies are capped around 7 days on Safari, so pixel-based windows beyond about a week undercount the 55% Apple-heavy traffic",
"Moves long-window membership to CRM-list or first-party uploaded audiences, which persist until removed, instead of the pixel",
"Derives the horizon from the CRM lag data given: the 80th percentile near 150 days sets an active-evaluation window on that order, rather than 365 days chosen for width or a 30-day default",
"Rejects book-a-demo-to-everyone as the single message: the direct ask converts intent already present and buys no new belief, so it cannot be the whole sequence",
"Builds the B2B ladder in the order proof, objection handling, ROI content, then the direct ask, with no discount rung",
"Splits the single audience into behavioural-depth tiers claimed deepest first (pricing or trial signals above feature pages above all visitors), or sequences by CRM deal stage",
"Offers the ranked privacy mitigations: enhanced or first-party conversion matching as the cheap first move, CRM-list audiences for long windows, server-side event delivery as the heaviest",
"Excludes current customers on every stage via a list-based exclusion, and makes the surviving stages mutually exclusive",
"Schedules an incrementality check (for example a 10-20% holdout) as part of the delivered plan, not as an afterthought",
"Warns that the plan needs the after-exclusion size check against each platform's delivery floor before shipping"
]
}
],
"trigger_queries": [
{ "query": "How long should my retargeting window be for cart abandoners?", "should_trigger": true },
{ "query": "Design a remarketing sequence for our Shopify store", "should_trigger": true },
{ "query": "People who already bought from us keep seeing our ads - how do I stop that?", "should_trigger": true },
{ "query": "What frequency cap should I use on my warm audiences?", "should_trigger": true },
{ "query": "My retargeting audience is too small to deliver on Meta - what do I do?", "should_trigger": true },
{ "query": "Set up a win-back ad campaign for lapsed customers", "should_trigger": true },
{ "query": "How do I structure retargeting stages for a 6-month B2B sales cycle?", "should_trigger": true },
{ "query": "Cart abandonment is 78% and I want to chase abandoners with ads - what's the plan?", "should_trigger": true },
{ "query": "Should cart abandoners and product viewers be in separate ad sets?", "should_trigger": true },
{ "query": "How do I keep my retargeting audiences from overlapping each other?", "should_trigger": true },
{ "query": "What's the right lookback window for website visitors on Google Ads remarketing?", "should_trigger": true },
{ "query": "Build me a message ladder for warm audiences - what do we show them second and third?", "should_trigger": true },
{ "query": "Our remarketing ads show the same offer over and over and users are annoyed", "should_trigger": true },
{ "query": "whats a good exclusion setup so buyers stop getting our ads", "should_trigger": true },
{ "query": "People who started the demo form but never booked - how do we get them back with ads?", "should_trigger": true },
{ "query": "How many days after someone views pricing should we keep showing them ads?", "should_trigger": true },
{ "query": "We retarget everyone who visited in the last 30 days with 10% off - good idea?", "should_trigger": true },
{ "query": "How do I sequence ads so people see social proof after the first reminder?", "should_trigger": true },
{ "query": "Is 30 days the right membership duration for my website custom audience?", "should_trigger": true },
{ "query": "Plan remarketing for our SaaS free-trial dropouts", "should_trigger": true },
{ "query": "My warm audience frequency is at 8 per week - is that too much?", "should_trigger": true },
{ "query": "How should retargeting differ between our B2B product line and our consumer app?", "should_trigger": true },
{ "query": "Customers who purchased last week still show up in our dynamic product ads - seeing the exact item they bought", "should_trigger": true },
{ "query": "How do I build an exclusion audience of purchasers?", "should_trigger": true },
{ "query": "Abandoned checkout ads - at what point do we offer the discount?", "should_trigger": true },
{ "query": "What behavioural tiers should my remarketing use - pricing viewers vs blog readers?", "should_trigger": true },
{ "query": "Give me a stage-by-stage plan to re-engage site visitors who didn't convert", "should_trigger": true },
{ "query": "Our retargeting ad set never exits the learning phase and delivery is stuck", "should_trigger": true },
{ "query": "How long do people stay in my remarketing audience after they visit?", "should_trigger": true },
{ "query": "We sell enterprise software - should our retargeting audiences come from the pixel or from Salesforce lists?", "should_trigger": true },
{ "query": "Someone visited pricing twice this week - what ad should they get vs a first-time blog reader?", "should_trigger": true },
{ "query": "How long should we suppress existing customers from seeing our ads after they buy?", "should_trigger": true },
{ "query": "Map out which ads people should see in week 1 vs week 3 after visiting our store", "should_trigger": true },
{ "query": "Do retargeting windows need to match our sales cycle length?", "should_trigger": true },
{ "query": "How aggressive can ad frequency be for people who already know our brand?", "should_trigger": true },
{ "query": "I want a remarketing funnel: visitors, engagers, cart, checkout - sanity check it?", "should_trigger": true },
{ "query": "Best practice for excluding converters on TikTok retargeting?", "should_trigger": true },
{ "query": "Our retargeting audience on LinkedIn is 200 people and won't serve", "should_trigger": true },
{ "query": "Set up abandonment ads for our booking flow - people bail at the payment step", "should_trigger": true },
{ "query": "After what point is a site visitor cold again and not worth retargeting?", "should_trigger": true },
{ "query": "Should we show discounts to cart abandoners immediately or wait?", "should_trigger": true },
{ "query": "Structure our warm-audience campaigns so each person only ever sits in one", "should_trigger": true },
{ "query": "quick q - remarketing membership duration on meta vs google, same or different?", "should_trigger": true },
{ "query": "Trial users who never activated - can we run an ad sequence to bring them back?", "should_trigger": true },
{ "query": "How many creatives do I need per retargeting stage?", "should_trigger": true },
{ "query": "Design retargeting for a 90-day B2B evaluation with a buying committee involved", "should_trigger": true },
{ "query": "People are complaining our ads follow them everywhere - fix our retargeting", "should_trigger": true },
{ "query": "What events should define my deepest remarketing tier - pricing views or trial starts?", "should_trigger": true },
{ "query": "Is it worth splitting cart abandoners from checkout abandoners into different audiences?", "should_trigger": true },
{ "query": "How do I win back churned subscribers with paid ads?", "should_trigger": true },
{ "query": "Our remarketing keeps showing ads for out-of-stock products", "should_trigger": true },
{ "query": "Which visitors deserve the longest ad follow-up window - blog readers or almost-buyers?", "should_trigger": true },
{ "query": "I have funnel drop-off data from analytics - turn it into a retargeting plan", "should_trigger": true },
{ "query": "What frequency caps should each retargeting stage get?", "should_trigger": true },
{ "query": "Do we need separate campaigns for people who watched the demo video vs visited the site?", "should_trigger": true },
{ "query": "Build cold audience tiers for our new fitness app - interests, lookalikes, broad", "should_trigger": false },
{ "query": "How do I map our ICP onto Meta ad audiences for prospecting?", "should_trigger": false },
{ "query": "My interest-stack prospecting campaigns overlap each other - fix my cold audience structure", "should_trigger": false },
{ "query": "Which customers should seed our lookalike audience?", "should_trigger": false },
{ "query": "Our lookalike audience is too small - the seed list only matched 400 people", "should_trigger": false },
{ "query": "What match rate is normal for a customer list upload?", "should_trigger": false },
{ "query": "My Meta pixel isn't firing on the purchase page", "should_trigger": false },
{ "query": "Conversions stopped showing up in Google Ads yesterday - is the tag broken?", "should_trigger": false },
{ "query": "Pre-launch check: is our conversion tracking set up correctly?", "should_trigger": false },
{ "query": "Meta says 300 conversions and our CRM shows 120 - why don't the numbers match?", "should_trigger": false },
{ "query": "Platform-reported revenue is double what Shopify reports - is that normal?", "should_trigger": false },
{ "query": "Our prospecting ads' CTR has been sliding for three weeks - is the creative worn out?", "should_trigger": false },
{ "query": "When should I refresh creative on a cold traffic campaign?", "should_trigger": false },
{ "query": "Write me 10 headline variants for our spring sale ads", "should_trigger": false },
{ "query": "Our ads all sound the same - I need fresh copy angles", "should_trigger": false },
{ "query": "Draft a creative brief our designer can execute for the Q4 campaign", "should_trigger": false },
{ "query": "Script a 30-second UGC ad for our skincare serum", "should_trigger": false },
{ "query": "Rank these five video hooks and tell me which deserve test budget", "should_trigger": false },
{ "query": "Design an A/B test for two ad concepts - budget and sample size", "should_trigger": false },
{ "query": "How should I split $80k a month across Google, Meta, and TikTok?", "should_trigger": false },
{ "query": "What share of our ad budget should go to prospecting vs retargeting?", "should_trigger": false },
{ "query": "Our campaign is profitable - how fast can we scale the budget?", "should_trigger": false },
{ "query": "Are we on pace to spend our $30k monthly ad budget or under-pacing?", "should_trigger": false },
{ "query": "What's the maximum CAC we can afford before ads stop making sense?", "should_trigger": false },
{ "query": "Is 3.2x ROAS good for a DTC apparel brand?", "should_trigger": false },
{ "query": "Our whole ad account's CPA doubled since March - figure out why", "should_trigger": false },
{ "query": "Audit our ad account - something's off but I don't know what", "should_trigger": false },
{ "query": "We have 40 campaigns all stuck in learning limited - should we merge them?", "should_trigger": false },
{ "query": "Should we advertise on TikTok or LinkedIn for our B2B tool?", "should_trigger": false },
{ "query": "Mine our search terms report and build negative keyword lists", "should_trigger": false },
{ "query": "Ads get clicks but the landing page doesn't convert - audit the page", "should_trigger": false },
{ "query": "Carousel or single image for our awareness campaign?", "should_trigger": false },
{ "query": "Map the buying committee for our ERP deal and how to reach each role", "should_trigger": false },
{ "query": "We want to boost our CEO's LinkedIn posts as paid ads", "should_trigger": false },
{ "query": "How do we get our product recommended inside ChatGPT's sponsored answers?", "should_trigger": false },
{ "query": "How do I break into paid media as a career?", "should_trigger": false },
{ "query": "Interview questions for hiring a performance marketer", "should_trigger": false },
{ "query": "Which PPC newsletters and podcasts should I follow to stay current?", "should_trigger": false },
{ "query": "Starting a brand-new paid ads project - where do I even begin?", "should_trigger": false },
{ "query": "Target CPA or maximize conversions for our lead gen campaigns?", "should_trigger": false },
{ "query": "Set up an abandoned cart email flow in Klaviyo", "should_trigger": false },
{ "query": "Build a welcome email drip sequence for new signups", "should_trigger": false },
{ "query": "Design our SaaS onboarding funnel to reduce drop-off after signup", "should_trigger": false },
{ "query": "Improve our checkout flow UX to reduce cart abandonment", "should_trigger": false },
{ "query": "Map our full marketing funnel from awareness to purchase for the board deck", "should_trigger": false },
{ "query": "Create a sales funnel for my online course launch", "should_trigger": false },
{ "query": "How do I retarget my cold email list with a better follow-up sequence?", "should_trigger": false },
{ "query": "Analyze the signup funnel drop-off in Amplitude for our product team", "should_trigger": false },
{ "query": "Push-notification win-back campaign for dormant app users", "should_trigger": false },
{ "query": "SMS flow for customers who abandoned checkout", "should_trigger": false },
{ "query": "How long should our email nurture sequence run for MQLs?", "should_trigger": false },
{ "query": "What reach and frequency goals make sense for a TV-style brand awareness campaign?", "should_trigger": false },
{ "query": "Which keywords should we bid on for our brand search campaign?", "should_trigger": false },
{ "query": "Segment our customer base for the loyalty program tiers", "should_trigger": false },
{ "query": "Retention strategy to reduce churn for our subscription box", "should_trigger": false }
]
}
references/platform-constraints.md›
# Platform constraints for retargeting stage design
**Staleness warning - read first.** Every value in this file changes often and without notice: platforms revise minimums, retention ceilings, and cap mechanics several times a year. Treat this file as a map of _what to check_, not as current truth.
Verify each number against the platform's official documentation before building anything on it. Where a value below is dated, the date is the last point it was confirmed.
## Contents
1. Minimum audience sizes (delivery floors)
2. Retention ceilings (maximum lookback windows)
3. Impression-cap field availability
4. Practitioner frequency bands per platform and stage
5. Platform-specific gotchas
6. Privacy constraints that shrink pools
## 1. Minimum audience sizes (delivery floors)
The documented minimum is the point below which the platform refuses to serve or will not populate the audience. The practical floor is where practitioners report delivery becomes stable and CPMs normal - design stages to clear the practical floor after exclusions, not just the documented one.
| Platform | Documented minimum | Practical floor | Notes |
| --------------------------------------- | ----------------------------------------------- | ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Google Ads (Display / Search / YouTube) | 100 active users (standardised 2024-2025) | ~1,000 | Search remarketing (RLSA) historically required 1,000; dedicated search-remarketing campaigns are typically only worthwhile at 100k+ monthly site visits |
| Meta Custom Audiences | 100 people | ~1,000 | Below ~1,000 the delivery algorithm has too little room; learning phase may never exit |
| LinkedIn Matched Audiences | 300 matched members | 1,000-5,000 per segment | Below ~300 the campaign is flagged and will not deliver; the minimum is ANDed with a required location facet |
| TikTok Custom Audiences | 1,000 matched users | 1,000 | Highest documented floor of the majors |
| Microsoft Advertising | 300 (cookie pool) | 300 | 1,000 for similar-audience seeds |
| Reddit | 50 (pixel/engagement); 1,000 for uploaded lists | 50 | Lowest floor - useful overflow channel for thin B2B pools |
When a stage cannot clear its floor after exclusions, work down this order:
widen the window > broaden the trigger (e.g. all visitors instead of product-page viewers) > merge adjacent windows into one audience > fall back to a single combined warm pool
All four are minutes of work in the audience builder, so the ordering is value, not effort: each step down spends more of the stage's message distinctness to buy the same headroom. Re-rank when the account's own constraint is elsewhere - a platform at its retention ceiling cannot widen, so broadening the trigger becomes the first move available.
## 2. Retention ceilings (maximum lookback windows)
The ceiling silently truncates any longer window you request - a "365-day" stage on a 180-day platform is a 180-day stage.
| Platform | Audience type | Ceiling |
| ---------------------------------------- | ------------------------------------------ | ----------------------------------------------------------------------------------------------------------- |
| Meta | Website custom audiences (standard events) | 180 days |
| Meta | Website/app purchase-event audiences | 730 days (extended from 180, effective May 2026; existing purchase audiences auto-updated unless opted out) |
| Meta | Page / Instagram engagement audiences | 365 days |
| Meta | Lead-form engagement | 90 days |
| Google Ads / Analytics remarketing lists | All | 540 days |
| LinkedIn | Website / engagement audiences | Commonly run at 180 or 365 days to clear the 300-member floor |
The Meta 730-day purchase change is double-edged: it enables 2-year win-back stages, but any purchaser-_exclusion_ built on the same audience now suppresses two years of buyers from prospecting instead of six months. Audit converter-exclusion windows explicitly whenever a platform extends a retention default.
CRM-list (uploaded) audiences generally persist until manually removed on all platforms, which is why long-window B2B and win-back stages should be list-based rather than pixel-based.
## 3. Impression-cap field availability
| Platform | Cap field on conversion-type objectives? | What actually caps frequency |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
| Meta | No - cap field only on Reach / Awareness objectives | Audience size and creative rotation; monitor the frequency metric and intervene manually |
| Google Display / YouTube | Partial - viewable-frequency controls on some campaign types; verify per type | Campaign-level settings where exposed; otherwise audience size |
| LinkedIn | No user-set cap on most objectives; platform applies internal pacing | Audience size, creative rotation, and engagement-based exclusion tricks (see gotchas) |
| TikTok | Limited; verify per objective | Audience size and rotation |
| DV360 / programmatic | Yes - most granular: caps at campaign, insertion order, and line-item level, plus recency capping (e.g. max 1 impression/hour); strictest applicable cap wins | The configured caps |
Where no cap field exists, write the stage's cap as a _proxy_: the frequency reading at which you act, plus the decay signals (CTR down 15-20%+, CPM up 10%+, negative feedback rising against a 7-day rolling baseline).
## 4. Practitioner frequency bands per platform and stage
These are practitioner-published operating bands calibrated on agency account data - folklore with mileage, not RCT results. Recalibrate against the account's own decay curve. One large multi-account D2C dataset shows CTR roughly halving between frequency ~2 and ~5, with cost per purchase about 2x baseline by frequency 7.
| Platform | Prospecting (per user/week) | Retargeting (per user/week) | Reported fatigue onset |
| -------------------- | --------------------------- | ------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
| Meta | 2-3 | 5-7 | Prospecting decline from ~2.5, cliff past ~4; retargeting decline ~7-8 |
| YouTube | 2-3 | Higher tolerated | - |
| LinkedIn (B2B) | 3-4 | ~3/week per person in priority accounts; rotate 3-5 creatives | Small pools build frequency fast; refresh creative every 2-3 weeks |
| TikTok | 2-4 | 5-8 | Tolerates roughly 2x Meta's frequency before fatigue (~5 prospecting, ~10 retargeting) |
| Programmatic / DV360 | ~5-7 | 5-7 | Use recency caps to spread exposures |
Working bands by campaign type (watch / warning / act), from multi-account practitioner systems:
- Prospecting: 1-2.5 / 2.5-4 / >4
- Retargeting: 2-4 / 4-6 / >6
- Tiny ABM-style pools: 2-5 / 5-8 / >8
Retargeting's looser band exists because the pool is small and known-warm - expected impressions per person are structurally higher.
## 5. Platform-specific gotchas
- **LinkedIn audiences are non-retroactive.** Collection starts only when the audience is created - data before creation is gone permanently. Create every retargeting audience you might ever want (site visitors, video viewers, ad engagers, form openers, company-page visitors) before launching anything.
- **LinkedIn small-pool bidding:** small retargeting/ABM audiences deliver better on automated bidding. Manual bids underdeliver on thin pools.
- **LinkedIn lookalikes were discontinued (February 2024)**, replaced by predictive audiences - relevant if a stage plan assumed lookalike expansion from a retargeting seed.
- **Meta learning phase:** editing a live ad resets learning. Pausing does not. Launch replacement creative alongside, not as edits.
- **Sequential delivery:** true creative sequencing (ad A then ad B to the same user) is only natively enforced on DV360-style programmatic. On social platforms, sequence is approximated by the windowed mutually exclusive stages this skill designs.
- **Dynamic/catalogue ads:** suppress purchased items via the purchase event and exclude out-of-stock items at the catalogue level, or the deepest stage will advertise things the user already bought or cannot buy.
## 6. Privacy constraints that shrink pools
- **Safari/Firefox cookie limits:** first-party JavaScript cookies are capped at 7 days on Safari (24 hours when a click-tracking parameter is present), so Safari-heavy traffic largely cannot populate pixel-based windows beyond a week. Any window longer than ~7 days undercounts these users.
- **iOS App Tracking Transparency:** opt-in rates around 25-40% mean app/social pixel pools shrank roughly 10-30% versus pre-2021. Plan stage sizes with that haircut.
- **Consent Mode (EEA/UK):** denied-consent users drop out of retargetable pools. Platforms backfill measurement with modelled conversions, which affects the measurement plan more than the audience plan.
- **Mitigations**, ranked by pool recovered per unit of effort:
1. Enhanced / first-party conversion matching - a console setting plus a tagging check, an hour. Compliance: consent-mode wiring and a privacy-notice line, reversible by switching it off.
2. CRM-list audiences for anything beyond a 30-day window - an hour to export, then a standing weekly refresh job. Compliance: a lawful basis for pushing customer records to an ad platform, suppression of anyone who opted out, and a deletion path once uploaded.
3. Server-side event delivery, conversions-API-style - a week of engineering, then permanent ownership of an endpoint. Compliance: the heaviest - the endpoint handles personal data directly, so data residency, processor terms and hashing rules all apply, and it is the hardest to unwind.
- effort and compliance cost both run down that list while value runs up it: server-side delivery recovers the most signal and costs the most to stand up. So the order is a default for a team without spare engineering, and flips as soon as one is available or a server-side gateway is already deployed for another site. Chrome retained third-party cookies (2024-2025 decisions), so the worst-case shock did not land - but the Safari/iOS shrinkage is permanent.
references/worked-sequences.md›
# Worked retargeting sequences
Three end-to-end examples: a B2C e-commerce sequence, a B2B SaaS sequence, and a broken sequence with the diagnosis. Figures are illustrative composites, not client data - the method is the point.
## Contents
1. B2C e-commerce: mid-priced skincare store
2. B2B SaaS: sales-assisted analytics platform
3. Negative example: a plausible-looking sequence that fails
## 1. B2C e-commerce: mid-priced skincare store
### Data pulled
- Traffic: 220k monthly sessions - 55% content/landing, 30% product pages, 9% cart or checkout start, 6% other. ~2,600 purchases/month.
- Cart abandonment 72% (near the widely cited ~70% e-commerce average from Baymard Institute's meta-analysis).
- Time-lag report: 52% of purchases within 1 day of first visit, 81% within 7 days, 93% within 21 days, 99% within 45 days.
### Boundaries chosen
The 80th converter percentile lands at ~7 days → hot-window edge = 7 days. The tail to 21 days holds another 12% of converters → warm window 8-21 days. Beyond 45 days almost nobody converts from the original visit, so anything longer is win-back, not conversion retargeting.
### Stages
| Stage | Inclusion rule | Window | Message intent / offer rung | Concepts |
| --------------- | ---------------------------------------------------------- | ---------------------- | ------------------------------------------------------------------------------------ | -------- |
| S1 Hot-cart | Cart or checkout start, no purchase | 0-7 d | Reminder: show the exact item; no incentive | 3 |
| S2 Warm-product | Product-page view, no cart | 0-14 d | Social proof: reviews, UGC, before/after | 3 |
| S3 Objection | Union of S1/S2 members aged past their window, no purchase | 8-21 d | Objection handling: shipping, returns, guarantee | 3 |
| S4 Last-call | Any of the above, no purchase | 22-45 d | Incentive + urgency - the only discount rung | 3 |
| S5 Replenish | Purchasers | 30-90 d after purchase | Post-purchase cross-sell/refill (separate budget; not part of the conversion ladder) | 3 |
### Exclusions
- `RTG_CART_0-7` excludes `EXCL_PURCH_180`.
- `RTG_PRODUCT_0-14` excludes `RTG_CART_0-7` and `EXCL_PURCH_180`.
- `RTG_OBJECTION_8-21` excludes both fresher stages and `EXCL_PURCH_180`.
- `RTG_LASTCALL_22-45` excludes all above and `EXCL_PURCH_180`.
- `RTG_LASTCALL` additionally excludes `EXCL_REPEAT_ABANDON` (3+ abandonments, no purchase, 90 d) so serial abandoners cannot farm the discount.
- Converter exclusion window: 180 days (repurchase cycle ~60-90 days; 180 gives margin without choking prospecting).
### Size check (after exclusions)
Cart pool: ~9% of 220k sessions ≈ deduplicated ~11k people/month; minus purchasers ≈ 8k over 7 days ≈ ~1.9k - clears the ~1,000 practical floor. S3 and S4 inherit aged members and also clear. All five stages ship.
### Caps
- S1: no platform cap field on the conversion objective. Cap-proxy: act at frequency >6/week or CTR −20% vs 7-day baseline.
- S2-S4: proxy 4-5/week.
- S5: 2/week.
- Review cadence: every 2-3 days for S1, weekly for the rest.
### Measurement
- Per-stage: spend, reach, frequency, CTR, CPM, platform CPA, new-vs-returning share.
- Blended: monthly revenue ÷ total marketing spend, trended.
- Incrementality: 15% audience holdout on S1 and S4 (the two stages carrying the strongest "would have bought anyway" risk) for 6 weeks. Decision rule: if S1's holdout-measured lift is indistinguishable from zero, fold S1's budget into prospecting regardless of its platform ROAS.
## 2. B2B SaaS: sales-assisted analytics platform
### Data pulled
- Traffic: 38k monthly sessions - 60% blog/content, 22% feature pages, 8% pricing, 3% trial start. ~85 closed-won deals/quarter.
- CRM sales-cycle report (used as the lag source - the pixel cannot see a 4-month cycle): median first-touch-to-close 74 days. 80th percentile ~110 days.
- No discount is ever offered (question 7: no).
### Boundaries chosen
80th percentile ≈ 110 days → the "active evaluation" horizon is ~120 days, not 30. Pixel-based windows beyond ~30 days undercount Safari/iOS users, so stages past 30 days are built from CRM-list audiences (uploaded contacts and accounts), refreshed weekly.
### Stages
| Stage | Inclusion rule | Window / source | Message intent | Concepts |
| ---------------------- | ----------------------------------------- | ------------------------------------ | -------------------------------------------------------------------------------- | -------- |
| S1 High-intent | Pricing view or trial start | 0-14 d, pixel | Proof: named-customer case study | 3 |
| S2 Evaluators | Feature-page view, no pricing view | 0-30 d, pixel | Objection handling: security, integrations, comparison | 3 |
| S3 Open-deal air cover | CRM deals in evaluation/proposal | List, weekly refresh | ROI content, analyst comparison - aimed at the buying committee, not one visitor | 3 |
| S4 Direct ask | S1/S2 members aged 15-120 d, no open deal | List (CRM-matched) + pixel remainder | Direct demo ask; lower-friction fallback: tailored assessment | 3 |
No discount rung exists. The ladder ends on the hardest direct ask.
### Exclusions
Each stage excludes all deeper/fresher stages. Every stage excludes `EXCL_CUSTOMERS` (all current customers, list-based, no expiry) and `EXCL_CLOSEDLOST_90` (closed-lost under 90 days - sales asked for a cooling-off period). Naming: `RTG_PRICING_0-14`, `RTG_FEATURE_0-30`, `RTG_DEAL_LIST`, `RTG_ASK_15-120`.
### Size check (after exclusions)
Pricing pool: 8% of 38k ≈ ~2.4k dedup/month → over 14 days ≈ ~1.1k, minus customers/open deals ≈ ~900. On a 300-minimum professional platform this clears. On a 1,000-floor platform it does not, so S1 runs only where the floor allows, and elsewhere S1 and S2 are merged (`RTG_INTENT_0-30`).
This collapse is recorded in the plan, not improvised later. S3 has ~140 open-deal accounts - below every social floor as a company list, so it runs on the professional platform (account targeting) only.
### Caps
- Professional platform: no cap on the objective used. Cap-proxy ~3/person/week via an engagement-based rotation exclusion. Creative refreshed every 2-3 weeks because small pools build frequency fast.
- Other channels: proxy 4/week.
### Measurement
- Per-stage KPIs plus pipeline metrics: influenced opportunities, cost per engaged account, account penetration on S3.
- Blended: quarterly pipeline ÷ paid spend.
- Incrementality: hold out a random 20% of the S3 account list for one quarter, and compare opportunity creation between held-out and targeted accounts. Decision rule: S3 survives only if targeted accounts open opportunities at a meaningfully higher rate.
## 3. Negative example: plausible-looking but broken
A DTC supplements brand (60k sessions/month, ~700 orders) ships this:
| Stage | Audience | Window | Offer | Cap |
| ----- | ----------------- | ------- | --------------------- | -------- |
| A | All site visitors | 0-30 d | 10% off, urgency copy | none set |
| B | Product viewers | 0-30 d | 10% off, urgency copy | none set |
| C | Cart abandoners | 0-30 d | 15% off | none set |
| D | Past buyers | 0-180 d | 15% off "come back" | none set |
Looks like a funnel - four tiers, deeper stages get bigger discounts. Five faults:
1. **No mutual exclusion.** Every cart abandoner is simultaneously in A, B and C: three ad sets bid on the same user in the same auctions, inflating CPM against themselves - and the platform reports each stage's "conversions" from the same purchase.
2. **No converter suppression on A-C.** A buyer stays in "all visitors" for 30 days and keeps seeing 10%-off ads for what they bought at full price - brand damage plus pure waste. Stage D then _targets_ buyers with a discount they did not need.
3. **Discount on every rung.** The first touch a first-day visitor sees is a coupon. Within weeks, abandonment rises: customers learn that abandoning triggers 15%. The ladder trains the behaviour it exists to fix.
4. **Identical windows regardless of depth, never checked against lag data.** The brand's own time-lag report (never pulled) shows 85% of orders convert within 4 days. Days 5-30 of stages A-C mostly re-serve people who were never going to convert from that visit, while there is no stage at all for the 0-4-day window where conversion actually happens.
5. **No caps, no size check.** Stage C holds ~600 people after dedup - under the practical floor. It underdelivers erratically, and the users it does reach see the ad 15+ times a week. No measurement plan exists beyond platform ROAS, which looks excellent, because stages A-D are collectively claiming credit for most of the 700 orders that direct and email traffic would have produced anyway.
**The repair** is the skill's workflow in miniature:
1. Pull the lag report and set the hot edge at 4 days.
2. Collapse to three stages (hot 0-4 cart/checkout, warm 0-14 product-view, last-call 15-30).
3. Make each stage exclude deeper/fresher ones and all purchasers (180 d).
4. Move the discount to last-call only and exclude repeat abandoners from it.
5. Set cap-proxies with decay signals.
6. Schedule a 15% holdout on the hot stage before trusting any ROAS number it reports.
SKILL.md›
---
name: retargeting-funnel
description: "Design a multi-stage retargeting sequence from a site's own funnel data - recency windows and behavioural-depth tiers per stage, a message and offer ladder for each stage, mutually exclusive audiences with exclusion logic, and per-stage frequency caps. Use whenever the user mentions retargeting or remarketing, cart or form abandonment, how long a retargeting window should be, frequency caps, a retargeting audience that is too small, or ads still showing to people who already bought - even if they never say 'funnel'. Covers B2B and B2C, and produces a stage-by-stage plan rather than campaigns built inside an ad platform. Do NOT use to design cold prospecting audience tiers - use mbfinotti/advertising-skills@ad-audience-targeting instead."
license: MIT
metadata:
author: Maya-Beth Finotti
version: "1.4.9"
---
# Retargeting Funnel
Design a multi-stage retargeting sequence from the client's own conversion data: stage boundaries, per-stage message intent, exclusion logic, frequency caps, and a measurement plan.
## Scope and handoffs
This skill decides stage boundaries, per-stage message intent, exclusion logic, caps, and the measurement plan. It does not build campaigns inside any ad platform, and it hands off neighbouring work:
- Working event tracking is a hard prerequisite - retargeting audiences cannot be built without it. Verify first via `mbfinotti/advertising-skills@ad-conversion-tracking`.
- The broader targeting plan across interest/lookalike/retargeting layers → `mbfinotti/advertising-skills@ad-audience-targeting`.
- Ongoing creative-decay monitoring after launch → `mbfinotti/advertising-skills@ad-creative-fatigue`.
- Writing the per-stage ads themselves → `mbfinotti/advertising-skills@ad-copy-variants` and `mbfinotti/advertising-skills@ad-creative-brief`.
- Splitting the total budget across campaigns and channels → `mbfinotti/advertising-skills@ad-spend-allocation`.
If you draft any customer-facing copy while illustrating a stage, route it through your preferred humanizer skill before the user ships it - this is not a copywriting skill.
## Interview
Ask these questions one at a time, multiple-choice where possible. Stop asking as soon as you have enough to design; do not batch all of them into one wall of questions.
1. Business model: (a) B2C / e-commerce, (b) B2B, (c) hybrid (e.g. PLG SaaS with self-serve and sales-assisted tiers)?
2. Typical time from first visit to conversion: (a) under 3 days, (b) 3-14 days, (c) 2-8 weeks, (d) 2 months or more, (e) unknown?
3. Monthly site traffic and monthly conversions, roughly? (Order of magnitude is enough.)
4. Which behavioural events are actually tracked today: page views only, product/feature views, pricing views, cart or checkout starts, trial starts, purchases, CRM stages?
5. Which paid channels are in use or planned?
6. Offer type: (a) transactional purchase, (b) free trial, (c) demo request, (d) lead form / gated content?
7. Is a discount ever available as an incentive? (Many B2B businesses: no - that removes a rung of the ladder, not the ladder.)
8. Total monthly paid budget and the current prospecting-vs-retargeting split, if one exists?
9. Does a converter-suppression / exclusion audience already exist on any channel?
10. By what date must this be live and producing, and is that date hard? (The creative ladder in step 5 spans near-zero to a quarter in time-to-effect, so its ordering cannot be picked without this.)
11. Do you want the fastest revenue available this quarter, or durable assets that keep paying - a proof library, an incrementality baseline? (The first favours the cheap rungs, the second the slow ones.)
12. Effort ceiling: who can produce creative and how often, and can you actually obtain customer consent and legal sign-off? (A "no" removes the top rungs of the ladder rather than delaying them.)
Refuse to invent stage boundaries without time-lag data. If the user answered "unknown" to question 2, say explicitly: "I will not guess your windows - either export a time-to-conversion report, or I will use <named proxy> and flag every boundary as provisional." Acceptable proxies - always named as a proxy in the output, never silently substituted for real data:
- Ranked by evidence bought per unit of effort: analytics lag report > CRM sales-cycle export > sector-typical figure for the vertical.
- effort (heaviest first): CRM export (an hour, plus whoever owns the CRM) > analytics export (an hour, self-serve) > sector figure (near-zero, one search).
- The cheapest proxy is also the weakest. The CRM export overtakes the analytics one only when the cycle outruns what the pixel can see (B2B, multi-month).
- This is a default, not a law - re-rank against what the user already holds. A lag report exported last month beats a better one nobody will pull.
## Workflow
### 1. Pull the funnel data
Gather these, in order:
1. Traffic by page type (content / product or feature / pricing / cart or signup)
2. Conversion rate by funnel stage
3. The time-to-conversion lag distribution
4. The main drop-off points
5. The abandonment rate at the deepest pre-conversion step
If your harness can read files, ask the user to export these reports and drop them where you can read them; otherwise ask them to paste the key numbers. If you can browse the web, you may fetch published benchmarks to sanity-check their figures - but the client's own numbers always win over benchmarks.
### 2. Set stage boundaries from converter recency percentiles
This is the core move: derive windows from the client's own converters, not from platform defaults. From the lag distribution, find the recency point by which roughly 80% of converters had converted - that is the edge of the hot window. Then:
- If 80%+ convert inside 7 days, collapse to fewer stages (often just hot / warm / win-back). More stages than the cycle supports produces empty stages.
- If the cycle runs 60-90 days (typical B2B, high-ticket), stretch every window and plan for list-based rather than pixel-based membership at the long end, since browser privacy limits make long cookie windows unreliable.
- Default retention windows on ad platforms are arbitrary relative to any specific business. A default-length window on a 90-day cycle silently drops most of the pipeline; the same default on a 2-day impulse cycle wastes weeks of spend on cold traffic.
### 3. Build the two-axis grid: recency × behavioural depth
Cross the recency windows with the behavioural-depth axis. Claim grid cells deepest first, in this order:
cart, checkout or trial start > pricing page viewer > product or feature page viewer > any visitor / content viewer
Past customer and churned customer sit outside the conversion ladder, as win-back tiers. Assign windows inversely to depth: deep actions get short windows (intent decays fast), shallow actions get long windows (they were never hot, so staleness costs less). Not every grid cell becomes a stage - take the 3-5 deepest cells where the client has volume and a distinct message.
That order is value, not effort: every tier costs the same to build - one audience definition, minutes - so nothing separates them but the intent they capture. Effort splits them only where the event is not tracked yet (question 4): an untracked depth signal costs an engineering ticket and a wait, which can drop it below a shallower tier for this quarter. Re-rank on what the account already owns - a CRM deal stage already synced outranks a pricing-view pixel that needs a sprint.
### 4. Size-check every stage after exclusions
Check each stage against the platform's documented minimum audience size, measured **after** the exclusions from step 6 are applied - a stage that clears the floor before exclusions can fall under it once fresher stages and converters are carved out. Current floors and retention ceilings are in [references/platform-constraints.md](references/platform-constraints.md); verify against official documentation before building, because these values change often.
Collapse rule: if a stage cannot clear its floor after exclusions, repair it in this order:
widen the window > broaden the trigger > merge adjacent stages > collapse to one combined warm pool
All four cost minutes in the audience builder, so effort does not separate them. The ordering is value: what each step spends is message distinctness (widening keeps the stage's job intact, merging fuses two jobs into one, the single pool gives up sequencing entirely).
Never ship a stage that will not deliver - an under-floor stage either serves nothing or serves at punitive CPMs while the learning phase never exits. Thin-traffic sites often end with two stages, or one (see the Ben Heath position below); that is a correct output, not a failure.
### 5. Assign message intent and offer per stage
Each stage gets a distinct job, not a louder version of the previous ad. Re-showing the identical offer harder is the weakest stage design - if they saw it and did not act, either the offer or the angle was wrong, so change one of the two.
One menu of rungs, in build order: what each buys per unit of effort to produce it. Build top-down and fill the stages with whatever is ready.
Slot is separate information: where a built rung sits in the funnel sequence, not when to make it.
- B2C slot order: reminder, social proof, objection, incentive.
- B2B slot order: proof, objection, ROI, ask. B2B has no discount rung. Its incentive equivalent is a lower-friction ask, such as an assessment, an audit, or a tailored demo.
| Rung (build order) | Slot | What it buys | Effort to produce | Compliance cost |
| ------------------------------------------------------------------------------------- | ------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
| Objection handling - shipping, returns, guarantee; security, integrations, comparison | B2C 3rd / B2B 2nd | Removes the stated blocker; the only rung that answers a known "no" | An hour - the policy facts already exist in writing | A claims check against the published policy; fully reversible |
| Reminder / dynamic item ad | B2C 1st | Re-presents the exact item; converts the almost-decided | Near-zero - the catalogue writes it | Catalogue accuracy, on the consent basis the pixel already needs |
| Direct ask - demo, trial, assessment, audit | B2B 4th | Converts intent already present; buys no new belief | Near-zero | None beyond standard ad review |
| ROI or comparison content | B2B 3rd | Arms the internal champion for a committee decision | A week - data pull, sometimes customer interviews | Claim substantiation, and legal review where naming a competitor is restricted |
| Social proof - reviews, UGC | B2C 2nd | Borrowed credibility at scale; strongest on unfamiliar brands | A week - sourcing reviews or creators | Creator usage rights, testimonial and paid-partnership disclosure |
| Named-customer proof - case study, named results | B2B 1st | The strongest evidence available; unlocks committee trust | A quarter - customer consent, legal sign-off, political capital with the account team | Written approval per use and logo rights, revocable by the customer |
| Discount + urgency | B2C 4th, final stage only | Buys the last conversion, and only the last | Near-zero to make; spends margin every time it runs | Promotion terms, price-display rules in some markets, urgency claims that must be true |
- efficiency (build first) = the row order above.
- value (strongest first): named-customer proof > social proof > ROI content > objection handling > discount > reminder > direct ask - near enough the reverse of effort at the top of the table, which is why the axes are split instead of blended.
- compliance cost (heaviest first): named-customer proof > social proof > discount > ROI content > objection handling > reminder == direct ask. That last tie is a real equality at the floor of the axis: both run on material the advertiser already publishes, neither makes a new claim nor uses anyone else's likeness, so neither needs more than the standard ad review every rung gets.
The discount is the one rung whose real cost is not production:
- It spends margin every time it runs.
- It trains deliberate abandonment: people park carts to farm the coupon.
- It is the hardest thing here to withdraw once the market has learned it.
That is why it ranks last despite costing nothing to make, and why it runs on the final stage only. If no discount exists (question 7), the final rung is the hardest direct ask instead.
The order is a default for a team starting from nothing. It moves with context and with who executes it.
Re-rank against questions 10-12, and name which answer moved which rung:
- A hard near-term date promotes objection handling and the reminder.
- A durable-asset mandate promotes named-customer proof and social proof.
- No route to legal sign-off deletes the proof rungs outright, rather than delaying them.
Re-rank again on what the user already owns:
- A stocked review corpus drops social proof to near-zero effort and pulls it forward.
- An approved case study makes proof the cheapest strong rung there is.
- An in-house video team collapses UGC to a day.
Ship each stage on the best rung available now, and upgrade it later - a stage running an hour-old objection ad beats a stage waiting a quarter for a case study.
What this efficiency order starves is the belief-building end of the ladder. Named-customer proof, social proof and ROI content top the value axis and sit at the bottom of the build order. A sequence built on the ratio alone ships reminders and objection ads, then reaches for the discount when those stop converting - near-zero to make, margin spent every time it runs, and the hardest rung here to withdraw.
Promote a proof rung against the ratio when any of these holds:
- The objection rung has already run and the stage still does not convert, so the blocker is belief rather than friction.
- Question 11 was answered "durable assets".
- The sequence is B2B and the decision needs an internal champion to carry it through a committee.
- The final-stage discount is what is doing the converting, which means nothing above it built belief.
Start the quarter-long rung the week you notice, and run the hour-long rung in that stage meanwhile.
Delete, don't demote, every rung the answers rule out, and name each deletion in the stage table:
- No route to customer consent or legal sign-off deletes named-customer proof.
- No discount policy (question 7) deletes the discount rung.
- No budget for creator usage rights deletes UGC-based social proof.
A deleted rung is not the bottom of the build order - write the ladder without it, or a stage ends up planned around a rung nobody can produce.
Per stage, plan at least 3 distinct creative concepts - small retargeting pools burn through creative fast, and rotation is part of the frequency cap (step 7). Hand the actual production to `mbfinotti/advertising-skills@ad-creative-brief` and `mbfinotti/advertising-skills@ad-copy-variants`.
### 6. Write the exclusion logic
Every stage excludes all deeper and fresher stages, and every stage excludes converters (the burn/exclusion-audience pattern). Without this, one user occupies several stages at once and the account's own ad sets bid against each other in the same auction - self-competition that inflates CPM with zero incremental reach.
Make the exclusions auditable with a naming convention, e.g. `RTG_<depth>_<window>` for inclusion audiences and `EXCL_<what>_<window>` for exclusions, so anyone can read a stage's definition as "include X minus Y minus converters" without opening each audience. Also set an explicit converter-exclusion window, and write it down:
- Too short: re-ads recent buyers.
- Too long: silently suppresses prospecting reach as the buyer pool accumulates (see failure modes).
### 7. Set the frequency cap per stage
Retargeting tolerates higher frequency than prospecting - the audience already knows the brand - but tolerance is not immunity. Check whether your platform exposes an impression-cap field on the objective in use; many only expose it on awareness-type objectives. Where no cap field exists, audience size and creative rotation are the real cap: a small pool with one creative is an uncapped frequency machine regardless of settings.
Define per stage either a hard cap (where the platform allows) or a cap-proxy: the frequency reading at which you intervene.
Detection signals that a cap is being breached in effect, measured against a 7-day rolling baseline:
- Click-through rate falling 15-20%+.
- CPM rising 10%+ with unchanged targeting.
- Rising negative feedback (hides, "see less of this").
Vendor-specific cap mechanics and practitioner frequency bands per platform and stage are in [references/platform-constraints.md](references/platform-constraints.md). Ongoing monitoring after launch belongs to `mbfinotti/advertising-skills@ad-creative-fatigue`.
### 8. Set the prospecting-vs-retargeting budget split
Common practice splits roughly 70/30 prospecting-to-retargeting, moving toward 50/50 only when traffic is high and conversion is the bottleneck. But the binding constraint runs the other way: retargeting spend is bounded by pool size × frequency ceiling, not by ambition.
Compute the ceiling as reachable pool × capped weekly impressions × expected CPM, and cap retargeting budget there, whatever split was wanted. A small pool caps retargeting spend regardless of strategy. Excess budget forced into it just buys frequency past the cap.
Route the account-wide allocation through `mbfinotti/advertising-skills@ad-spend-allocation`.
### 9. Write the measurement plan
Track these metrics per stage:
- Spend
- Reach
- Frequency
- CTR
- CPM
- Platform-reported conversions and CPA
- New-vs-returning conversion share
At account level, track a blended-efficiency sanity metric: total revenue (or pipeline) divided by total marketing spend, which drops the attribution layer entirely.
Then schedule at least one incrementality test, because platform-reported conversions overstate incremental lift, and not by a little.
- Across 15 large-scale RCTs, Gordon, Zettelmeyer et al. (2019) found observational methods overestimated experimentally measured lift by factors of roughly 7 to 9.5, depending on funnel position.
- Blake, Nosko and Tadelis (2015) showed brand-keyword ads at eBay largely cannibalised traffic that would have arrived anyway.
Retargeting is the highest-risk case: it targets exactly the people most likely to convert on their own. Acceptable designs, ranked by evidence bought per unit of effort:
- efficiency, run first: ghost-ad style lift test (where the platform offers one) > audience holdout (withhold a random 10-20% slice of each stage) > geo/matched-market holdout.
- evidence (strongest first): ghost ads > geo/matched-market holdout > audience holdout.
- effort (heaviest first): geo/matched-market (a quarter - market pairing, spend coordination across regions, and a whole region's revenue riding on the design) > audience holdout (an hour of audience setup, then wait) > ghost ads (near-zero where the platform exposes them, impossible where it does not).
- Ghost ads lead because they top both axes where they exist. The audience holdout leads everywhere else, since the geo design buys somewhat cleaner evidence for an order of magnitude more coordination.
That default moves with the account: re-rank the geo design upward if the user already runs matched-market tests for other channels, because the coordination cost is already paid and only the analysis is new. If your harness can browse the web, verify the platform's current lift-test availability; if not, default to a 10-20% audience holdout, which needs no platform feature.
## Design gate
The plan must pass every item before handoff - 100%, not most:
- [ ] Tracking verified for every event a stage depends on (`mbfinotti/advertising-skills@ad-conversion-tracking`).
- [ ] Stage boundaries derived from the client's lag data, or the proxy used is named in the output.
- [ ] Every stage clears its platform delivery floor **after** exclusions.
- [ ] No user can occupy two stages at once (exclusion map is complete and mutually exclusive).
- [ ] Converters excluded on every stage, with an explicit, written exclusion window.
- [ ] Discount, if any exists, appears only on the final stage.
- [ ] A frequency cap or cap-proxy with detection signals is defined per stage.
- [ ] At least 3 distinct creative concepts staged per stage.
- [ ] An incrementality test is scheduled with a named design and date.
Running threshold after launch: cut or restructure any stage whose holdout-measured incremental lift is indistinguishable from zero - no matter how good its platform-reported ROAS looks. High platform ROAS with zero incremental lift is the signature of paying to intercept conversions that were coming anyway.
## B2B vs B2C
These mechanics are identical for both:
- Two-axis grid construction.
- Mutual exclusion and converter suppression.
- The after-exclusion size check.
- The discount-last rule (where a discount exists at all).
- The measurement plan.
State this to the user, so they do not assume the B2B plan is a softened B2C plan.
What genuinely differs:
| Dimension | B2C / e-commerce | B2B |
| ------------------------------- | ---------------------------------------- | ---------------------------------------------------------------------------------------- |
| Windows | Short; hot window often 1-7 days | Long; 90/180/365 days to match multi-month cycles |
| Pool size | Usually clears floors easily | Chronically small; expect stage merges |
| Offer ladder | Reminder → proof → objection → incentive | Content ladder: proof → objection → ROI → demo ask; no discount rung |
| Audience source at long windows | Pixel-based mostly works | Shift to CRM-list/first-party audiences; browser privacy limits kill long cookie windows |
| Unit of targeting | The person | Increasingly the account/buying committee - multiple stakeholders see different stages |
| Deep-intent trigger | Cart or checkout start | Pricing page, trial start, or CRM deal stage |
For B2B, also consider sequencing by CRM deal stage (evaluation / proposal / negotiation) rather than web recency alone - the CRM knows more about depth than the pixel does.
## Failure modes
Rows run in fix order - waste removed per unit of effort first, with the effort in the last column. Suppression fixes lead because they are audience-definition edits that take minutes and stop the bleeding on contact. The incrementality test comes last because it repairs nothing by itself, it only names the stage to cut.
Re-rank against the account in front of you: a single-stage account has no overlap to fix, and an account already suppressing converters starts at the windows.
| Failure | What it looks like | Fix | Effort |
| --------------------------------------------- | ----------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------- |
| Retargeting past converters | Buyers keep seeing "buy it" ads; complaints, wasted spend | Converter exclusion on every stage; audit it exists on each channel | Minutes per channel |
| Over-long converter exclusion | Prospecting reach quietly shrinks quarter over quarter | Set an explicit exclusion window sized to the repurchase cycle; review when platforms extend retention defaults | Minutes, plus a diary note |
| Overlapping stages self-competing | CPMs inflate; same user reported in several ad sets | Mutually exclusive windows + exclusion map (step 6) | An hour to map, minutes to apply |
| Dynamic ads showing bought/out-of-stock items | Post-purchase ads for the purchased item | Purchase-event suppression + catalogue exclusions | An hour, plus catalogue feed access |
| Stale default windows | Window length matches platform default, not the sales cycle | Re-derive from lag data (step 2) | An hour, once the lag export exists |
| Too-small pools | Delivery stalls or CPM spikes; learning phase never exits | Collapse rule (step 4): widen, broaden, merge, or pool | Minutes, but only after the windows are right |
| Creative fatigue / stalking backlash | CTR sags, negative feedback climbs at high frequency | Caps + 3+ rotating concepts; hand monitoring to `mbfinotti/advertising-skills@ad-creative-fatigue` | A standing job - rotation never finishes |
| Discount-trained abandonment | Abandonment rate rises after coupon retargeting starts | Discount only on final stage; vary the offer; exclude repeat abandoners from incentives | Minutes to change, a quarter to un-train |
| Cannibalisation | Great platform ROAS, flat blended revenue | Incrementality test (step 9); cut stages with zero measured lift | Weeks of elapsed test time before it answers |
## Positions worth knowing
Present these honestly as a live disagreement, not a settled prescription.
- **Burn/exclusion audience** - popularised by Ryan Deiss and DigitalMarketer: fire a suppression event on conversion so every stage stops targeting buyers immediately. This is baseline practice. Step 6 assumes it.
- **Effective frequency** - contested, with three positions on how many exposures actually work: Herbert E. Krugman's three-exposure theory (1972) underlies most "cap at ~3" advice. Colin McDonald's single-source work and John Philip Jones argued one well-timed exposure near purchase carries most of the effect. Modern digital studies have found effects growing past 10+ exposures. No single frequency number is evidence-based across contexts - treat published bands as starting points and steer by the decay signals in step 7.
- **Reach over frequency** - Byron Sharp and the Ehrenberg-Bass school object to heavy retargeting altogether: growth comes from reaching light and non-buyers, not from re-hitting a warm pool. Take it as a ceiling argument for the retargeting share of budget (step 8).
- **Anti-stratification** - Ben Heath argues (verified, heathmedia.co.uk) for a single broad warm pool combining site visitors, engagers, video viewers, and lists at maximum windows, instead of fine-grained tiers. Combining every warm signal, in his words, gives the platform "the data it needs to optimize your ad delivery".
Ranked by return per unit of setup effort, that posture leads:
one combined warm pool > stratified stages, until every stage clears its floor with room to spare
The pool costs one audience and no exclusion map. Stratification costs a map, a cap sheet and per-stage creative, and repays that only once each stage has enough people to learn on.
Default to the single pool below the floor, and move up one rung when step 4's size check passes comfortably - or immediately, where a maintained exclusion map and creative pipeline already exist and make the stratified version nearly free. The step 4 collapse rule converges toward Heath's design as traffic shrinks.
## Output shape
Deliver four artifacts (full worked examples in [references/worked-sequences.md](references/worked-sequences.md), including a required negative example):
1. **Stage table** - one row per stage: name, inclusion rule (depth event + window), message intent, offer rung, creative-concept count, expected pool size after exclusions.
2. **Exclusion map** - per stage: what it excludes (deeper stages, fresher windows, converters), with audience names following the naming convention.
3. **Cap sheet** - per stage: hard cap or cap-proxy, detection signals, review cadence.
4. **Measurement plan** - per-stage KPIs, the blended-efficiency metric, and the scheduled incrementality test (design, holdout share, start date, decision rule).
Integration note: platform-specific floors, retention ceilings, cap mechanics, and frequency bands for Meta, Google, LinkedIn, TikTok, Microsoft, Reddit and DV360 live in [references/platform-constraints.md](references/platform-constraints.md) - read it when mapping this plan onto concrete channels, and verify its values against current official documentation.
## Memory
If your harness has persistent memory, record the chosen stage boundaries, windows, caps, exclusion windows, and the reasoning (which percentile, which proxy, which collapse decisions) - so later sessions tune the design against results instead of re-deriving it. If not, put the same rationale block at the top of the delivered plan.
## References
- [references/platform-constraints.md](references/platform-constraints.md) - per-platform minimum audience sizes, retention ceilings, cap-field availability, practitioner frequency bands. Load when translating the plan to specific channels.
- [references/worked-sequences.md](references/worked-sequences.md) - one worked B2C sequence, one worked B2B sequence, one broken sequence with the diagnosis. Load when producing the deliverable or when the user wants an example.
- `mbfinotti/advertising-skills@thought-leadership-ads` - person-fronted amplification campaigns that feed engagers into this sequence's warm stages; that skill routes the downstream funnel design here rather than duplicating it.