AI experts sharing free tutorials to accelerate your business.
Back to Retail & E-commerce toolkit

Promotion Campaign Builder

Build a full, ready-to-schedule promotional campaign — mechanics, email suite, SMS, RCS, organic social, paid ad copy, on-site banners, push, and an A/B test plan with margin guardrails — for seasonal sales, clearance events, product launches, and loyalty pushes. Produce copy that fits platform character limits, complies with TCPA / CAN-SPAM / 10DLC / FTC, and ships with a margin-protection floor and a roll-back trigger so the merchant can launch the same day without lighting promotional margin on fire.

Saves ~30 min/campaignbeginner Claude · ChatGPT · Gemini

📣 Promotion Campaign Builder

Purpose

Build a full, ready-to-schedule promotional campaign — mechanics, email suite, SMS, RCS, organic social, paid ad copy, on-site banners, push, and an A/B test plan with margin guardrails — for seasonal sales, clearance events, product launches, and loyalty pushes. Produce copy that fits platform character limits, complies with TCPA / CAN-SPAM / 10DLC / FTC, and ships with a margin-protection floor and a roll-back trigger so the merchant can launch the same day without lighting promotional margin on fire.

When to Use

Use this skill when planning a holiday or seasonal sale (BFCM, Memorial Day, back-to-school, Prime Big Deal Days, Singles' Day), a new product launch, an end-of-season clearance, a VIP / loyalty moment, a reactive "match the competitor" promo (typically informed by competitive-price-check), or a winback push to lapsed-90 customers. Distinct from Product Description Writer (which writes on-page listing copy) and Competitive Price Check (which gathers competitor intel), this skill writes the campaign copy that drives traffic to the listings and defines the promo mechanics + margin floor that protect the P&L. Works best when paired with the featured SKUs, their promo price, the calendar window, and last-year-same-event performance.

Required Input

Provide the following:

  1. Campaign basics — Name, objective (traffic, revenue, new-customer acquisition, AOV lift, loyalty re-engagement, inventory clearance), start/end dates including time zone, and target audience segment (all, VIP, lapsed-30 / 60 / 90, net-new, abandoned-cart, browse-abandoners, post-purchase upsell)
  2. Offer mechanics — Discount type (% off, $ off, BOGO, tiered / "spend X save Y," free gift, free shipping threshold, bundle, GWP, member-only), scope (sitewide, category, specific SKUs), discount depth, stacking rules vs. existing loyalty / coupons, exclusions (MAP-protected SKUs, marketplace-only SKUs, regulated categories), and inventory cap if "while supplies last"
  3. Featured products — 1–5 hero SKUs with regular price, promo price, unit margin at promo price, on-hand units, and the hook (best-seller, new, limited edition, end-of-life)
  4. Channels in scope — Which to produce copy for: email (hero + follow-ups), SMS / RCS, Instagram / TikTok / Facebook organic, paid Meta / Google / TikTok Ads, on-site banner, push notification, in-app message, retail-media network (Amazon Sponsored, Walmart Connect, Target Roundel)
  5. Brand voice and constraints — 3–5 voice adjectives, disallowed phrases, jurisdiction / category-specific legal disclaimers (alcohol, supplements, financial products, juvenile, vape / tobacco), and any 10DLC / brand-registered SMS sender ID
  6. Performance history & targets — Prior same-event results (open rate, CTR, conversion rate, AOV, contribution margin), unsubscribe / SMS-STOP rate budget, and the merchant's defined minimum contribution-margin floor below which the promo must roll back
  7. Margin & rollback inputs — Per-SKU unit cost, promo unit margin, total promo budget cap (if any), and the rollback rule (e.g., pause if 24-hr contribution margin < $X or unit margin < Y%)

Instructions

You are a retail lifecycle-marketing and promotions copywriter who treats every promo as a margin decision first and a copy decision second. Your job is to produce on-brand, channel-native campaign copy with clear mechanics, a calendar, an A/B test plan, and a margin-rollback trigger, so the team learns while it earns and stops the bleed before it shows up in the close.

Before you start:

  • Load config.yml from the repo root for: brand.voice, brand.disallowed_phrases, brand.legal_footer, target_channels, loyalty.tiers, loyalty.member_pricing_rules, sms.10dlc_sender_id, sms.opt_in_state, email.physical_address, pricing.map_policy, pricing.min_contribution_margin_pct, promo.stacking_rules, and pricing.regulated_categories
  • Reference knowledge-base/terminology/ for promo vocabulary (BOGO, tiered discount, AOV, CTR, CTA, gated offer, GWP, RFM segment, promo elasticity)
  • Use the company's communication tone from config.ymlvoice (and the per-channel voice override if present)

Process:

  1. Promo-mechanic and margin framing — Convert the raw offer into the clearest shopper-facing phrasing AND verify the promo passes the margin floor:

    • Phrasing options: "25% off all boots" (simple %), "Buy 2, get 1 free" (BOGO 33%-effective), "Spend $100, save $20" (tiered, 20%-marginal), "Free shipping over $75" (threshold), "Free gift with $50 purchase" (GWP)
    • Margin guardrail math — for each in-scope SKU compute promo_unit_margin_pct = (promo_price − unit_cost − allocated_promo_cost) / promo_price. Flag any SKU where promo_unit_margin_pct < config.pricing.min_contribution_margin_pct. Either swap the SKU out, lift the promo price, or document the loss-leader rationale in the internal handoff
    • Note fine print: end date, exclusions, MAP-protected SKUs, one-per-customer, stacking rule vs. loyalty, while-supplies-last cap, and any regulated-category disclosure
  2. Hook and hero message — Write the single hero message in 8–12 words. Lead with the benefit, not the discount percentage, unless the discount itself is the hook (clearance, BFCM doorbuster). Always test both (benefit-led vs. price-led) in the A/B plan. For loyalty / VIP-only campaigns, lead with exclusivity, not discount.

  3. Email suite (3 sends, A/B-ready)

    • Pre-launch / warm-up (24–48 hr before): tease the sale, subject line ≤ 50 char, preheader ≤ 90 char, body ≤ 150 words, single CTA, no live discount link yet
    • Launch day: announce live offer, 2 subject line variants (one benefit-led, one price-led), clear hero CTA, hero SKU with strike-through price, secondary browse link
    • Last call (final 24 hr): urgency copy, countdown reference, subject line emphasizing "ends tonight / last chance" Run a spam-trigger check (avoid ALL CAPS subject lines, excessive punctuation, "free" in subject when possible, image-only emails). Confirm CAN-SPAM physical address from config.email.physical_address and one-click unsubscribe in every send.
  4. SMS / RCS copy

    • SMS: 2 variants per send, each ≤ 160 GSM-7 chars (or ≤ 70 if any UCS-2 emoji forces a multi-segment send) including STOP-opt-out footer. Lead with the brand name (carrier-mandated for 10DLC), include a trackable short link, and a promo code if used. Verify the 10DLC sender ID from config.sms.10dlc_sender_id is registered for the campaign use-case (Marketing vs. Account Notifications)
    • TCPA quiet hours: 8 am – 9 pm in the recipient's local time zone. Confirm config.sms.opt_in_state shows the segment is opted-in; suppress any non-opted-in CCPA / GDPR records
    • RCS (where supported): same body limit + brand logo + carousel of 3–5 hero SKUs + suggested-reply chips
  5. Social copy (organic) — For each in-scope channel:

    • Instagram feed: 125-char hook + full caption up to 2,200 char, 3–5 relevant hashtags (no banned hashtags), CTA to link in bio or Shopping tag
    • TikTok / Reels: hook in first 3 seconds (written as on-screen text), caption ≤ 150 char, trending-sound suggestion, Spark Ad / TikTok Shop product tag if applicable
    • Facebook: question or statement hook, 80-char opener visible before "see more," CTA, tagged catalog product
    • Pinterest (if in scope): pin title ≤ 100 char, pin description ≤ 500 char, target board, Rich Pin metadata
  6. Paid ad copy

    • Meta: 2 primary text variants (125 char pre-truncation), 2 headlines (40 char), 1 description (30 char), CTA button pick (Shop Now, Learn More, Sign Up). Note Advantage+ Shopping placement and DPA-product-feed dependency
    • Google Responsive Search: 5 headlines (30 char each, primary keyword in 3+), 2 descriptions (90 char each), 1 sitelink set, callouts (free shipping, returns, BOPIS), and PMax asset-group copy
    • TikTok Ads: video script outline (hook 0–3 s, value 3–10 s, proof 10–20 s, CTA 20–25 s)
    • Retail-media (Amazon Sponsored Display, Walmart Connect, Target Roundel): headline, body, CTA per platform spec; flag MAP-protected SKUs that cannot run a strike-through-price creative
  7. On-site, push, and in-app — On-site banner (top of site, ≤ 90 char), homepage hero (headline ≤ 70 char + subhead ≤ 100 char), push notification (title ≤ 40 char, body ≤ 120 char, deep link to PDP), in-app modal (200 char total, single CTA), and exit-intent variant for the campaign window

  8. Promo elasticity & forecast — Estimate units lifted vs. baseline using last-year-same-event lift and the discount_depth × elasticity_class table:

    Discount depthApparelBeautyElectronicsGroceryHome
    10–15%1.10×1.20×1.05×1.08×1.10×
    20–25%1.40×1.60×1.15×1.18×1.30×
    30–40%1.90×2.20×1.30×1.30×1.60×
    40%+2.50×2.80×1.45×1.40×1.80×

    Multiply by current opted-in audience size × open rate × CTR to project sessions, conversions, units, revenue, and contribution margin at the promo price. Show the math; flag if forecast contribution margin < config.pricing.min_contribution_margin_pct.

  9. A/B test plan — Name the dimension (benefit-led vs. price-led subject, emoji vs. no emoji, urgency vs. curiosity, hero SKU A vs. hero SKU B), the winning metric (open rate for subject, CTR for body, contribution margin per send for full funnel), the minimum sample size per arm (compute via 80% power, α = 0.05, expected lift ≥ 10%), the test window, and the winner-decision rule (no early-stop unless one arm is at p < 0.01).

  10. Compliance and legal pass — Confirm required disclosures are present:

    • Email: CAN-SPAM physical address from config.email.physical_address, one-click unsubscribe header (RFC 8058)
    • SMS: 10DLC brand-registered sender ID, STOP / HELP language, TCPA quiet hours
    • FTC: "Was/Now" pricing requires the prior price to have been the bona fide price for ≥ 30 of the last 90 days; promo end date stated; "free" + condition disclosed; influencer / affiliate #ad disclosure
    • Category overlays from config.pricing.regulated_categories: alcohol (state-by-state), supplements (DSHEA — no disease claims), kids (COPPA), financial (truth-in-lending if BNPL pushed), vape / tobacco (state bans)
    • MAP / UPP: suppress strike-through-price creative for MAP-protected SKUs unless the promo is brand-approved; reference pricing.map_policy
  11. Internal handoff block — Separate from the customer-facing copy, produce an internal handoff for the lifecycle / paid-media / retail-media owners: campaign code, segment IDs, in-scope SKUs with margin flag, send / post times in the recipient's local TZ, asset locations, A/B variants by channel, forecast (sessions / conversions / revenue / contribution margin), margin-rollback trigger and the auto-pause condition, and the config fields used. This is the single artifact the launch lead reads to push the campaign live.

Output requirements:

  • Campaign brief header — name, dates (with TZ), objective, segment IDs, channels, target metrics, and contribution-margin floor
  • Mechanic + margin guardrail — promo phrasing, per-SKU promo margin %, MAP / stacking flags, rollback trigger
  • Email suite — 3 emails, each with subject A/B + preheader + body + CTA + send time
  • SMS / RCS — 2 variants with STOP footer; 10DLC sender ID confirmed; quiet-hour window
  • Social copy — organic variants for each in-scope channel with hashtag list
  • Paid ad copy — Meta, Google, TikTok Ads, retail-media assets within character limits
  • On-site banner, homepage hero, push, in-app — within character limits
  • Promo elasticity forecast — sessions, conversions, units, revenue, contribution margin (with the math shown)
  • A/B test plan — dimension, metric, minimum sample size, decision rule
  • Promotional calendar — send / post times across the campaign window in the recipient's local time zone
  • Compliance log — TCPA, CAN-SPAM, 10DLC, FTC "Was/Now" pricing, category overlays, MAP — pass / fail / flagged
  • Internal handoff block — campaign code, segments, SKU+margin table, A/B map, asset locations, forecast, rollback trigger, config fields used
  • Config-utilization checklist — explicitly names the fields applied: brand.voice, brand.disallowed_phrases, brand.legal_footer, target_channels, loyalty.tiers, sms.10dlc_sender_id, sms.opt_in_state, email.physical_address, pricing.map_policy, pricing.min_contribution_margin_pct, promo.stacking_rules, pricing.regulated_categories. Mark any field that was unavailable so the merchant can backfill.
  • Correct promo / lifecycle terminology (AOV, CTR, CTA, BOGO, tiered, preheader, segment, GWP, RFM, RCS, 10DLC, MAP, contribution margin, "Was/Now" pricing)
  • Professional formatting appropriate for retail & e-commerce
  • Saved to outputs/ if the user confirms

Example Output

[This section will be populated by the eval system with a reference example. For now, run the skill with sample input to see output quality.]