SMS marketing

01What is it?
SMS marketing achieves 98% open rates and click-through rates 5, 10× higher than email, making it one of the highest-performing direct channels for ecommerce. It stands out by giving SMS marketing a defined shape, so the agent asks for better context and returns a more usable result.
02Inputs
Context the agent needs: your goals, audience, constraints, and any source material the skill asks for.
03Output
A ready-to-use result: the analysis, copy, or recommendations the agent produces.
Paste-ready

Install as a package

Installs this one skill package for your coding agent, including any supporting files that skill ships with — not every skill in the repository. Read the tutorial.

Terminal
$ npx skills add finsilabs/awesome-ecommerce-skills --skill sms-marketing

Use in Profound

Copy this file into a new Profound Skill. That's it, nothing else to install.

Copy and create in Profound
SKILL.md

SMS Marketing

Overview

SMS marketing achieves 98% open rates and click-through rates 5–10× higher than email, making it one of the highest-performing direct channels for ecommerce. However, SMS is heavily regulated — TCPA in the US requires explicit written consent, and violations carry fines up to $1,500 per message. Dedicated SMS apps (Postscript, Attentive, Klaviyo SMS) handle compliance, opt-in flows, and 10DLC registration automatically. Custom Twilio implementation is only needed for headless stores.

When to Use This Skill

  • When launching an SMS marketing channel alongside existing email automation
  • When needing TCPA-compliant opt-in flows at checkout and via pop-ups
  • When wanting to segment SMS campaigns by purchase history, lifecycle stage, or location
  • When sending transactional SMS (shipping updates) vs. marketing SMS to different opt-in lists
  • When auditing an existing SMS program for compliance issues

Core Instructions

Step 1: Choose the right SMS platform

PlatformBest ForShopifyWooCommerceBigCommercePrice
PostscriptShopify-native, segmentation + flowsApp StoreFree tier; $100+/mo
AttentiveMid-market, advanced A/B testingApp StoreVia integrationVia integration$400+/mo
Klaviyo SMSAlready using Klaviyo for emailApp StorePluginApp MarketplaceAdds to Klaviyo plan
SMSBump (Yotpo SMS)WooCommerce + ShopifyApp StorePluginFree tier; $19+/mo
TwilioCustom/headless, developer-controlledVia APIVia APIVia APIPay-per-message

Recommendation: Use Postscript for Shopify and SMSBump for WooCommerce. If already using Klaviyo, add Klaviyo SMS to keep campaigns and flows in one platform. Use Twilio only for headless stores where you need full programmatic control.

Step 2: Set up SMS opt-in


Shopify with Postscript

  1. Install Postscript from the Shopify App Store
  2. Go to Postscript → Keywords and set up your opt-in keyword (e.g., "JOIN") — customers text this to your Postscript number to subscribe
  3. Go to Postscript → Sign-up Units to add opt-in forms:
    • Checkout opt-in: Postscript adds a checkbox at checkout automatically — configure the consent language under Settings → Checkout
    • Pop-up: create a timed pop-up offering a discount (e.g., "Get 10% off — text JOIN to [number]")
  4. Important compliance settings under Postscript → Settings → Compliance:
    • Confirm the consent language is displayed: "By subscribing, you agree to receive marketing texts. Reply STOP to unsubscribe."
    • Never pre-check the SMS opt-in box at checkout — TCPA requires un-checked by default
  5. Go to Postscript → Flows to build automated sequences:
    • Welcome series: triggered on opt-in — immediate welcome message + discount code
    • Cart abandonment: triggered when Shopify detects an abandoned checkout (different from email; can send even without email)
    • Browse abandonment: triggered by high-intent browsing + no purchase within 4 hours

WooCommerce with SMSBump

  1. Install SMSBump (now Yotpo SMS) from the WordPress plugin directory
  2. Go to SMSBump → Settings → Compliance and configure the checkout opt-in field
  3. Go to SMSBump → Automations to enable:
    • Cart abandonment SMS
    • Order confirmation and shipping update SMS (transactional)
    • Win-back SMS (customers who haven't purchased in 60+ days)
  4. For GDPR compliance: SMSBump includes a double opt-in flow for EU subscribers — enable this under Settings → Compliance → Double Opt-in

BigCommerce with Klaviyo SMS

  1. Install Klaviyo from the BigCommerce App Marketplace
  2. Go to Klaviyo → SMS → Getting Started and complete the 10DLC registration (Klaviyo walks you through this)
  3. Add an SMS opt-in field to your checkout via BigCommerce Admin → Store Setup → Checkout
  4. Build SMS flows in Klaviyo → Flows — SMS can be added to any existing email flow as an additional channel

Custom / Headless

For headless stores, use Twilio. Compliance must be built into your application logic:

import twilio from 'twilio';

const client = twilio(process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_AUTH_TOKEN);

async function sendMarketingSMS(phone: string, body: string, customerId: string): Promise<boolean> {
  // ALWAYS check consent before sending — never skip this check
  const consent = await db.smsConsent.findActive(phone, 'marketing');
  if (!consent) {
    console.warn(`SMS suppressed for ${phone} — no active marketing consent`);
    return false;
  }

  // TCPA: no marketing SMS before 8am or after 9pm in recipient's local time
  if (isQuietHours(phone, consent.zipCode)) {
    await smsQueue.add('send', { phone, body, customerId }, { delay: msUntilMorning(phone, consent.zipCode) });
    return false;
  }

  await client.messages.create({
    from: process.env.TWILIO_PHONE_NUMBER,
    to: phone,
    body: `${body}\n\nReply STOP to unsubscribe`,
  });

  return true;
}

// Handle STOP/HELP/UNSTOP via Twilio webhook — required by carriers
export async function handleInboundSMS(req: Request, res: Response) {
  const { From: from, Body: body } = req.body;
  const keyword = body.trim().toUpperCase();

  if (['STOP', 'STOPALL', 'UNSUBSCRIBE', 'CANCEL', 'END', 'QUIT'].includes(keyword)) {
    await db.smsConsent.deactivateAll(from);
    // Twilio also auto-handles STOP at the carrier level for registered numbers
  } else if (keyword === 'HELP') {
    // Required: explain how to opt out
    await client.messages.create({
      from: process.env.TWILIO_PHONE_NUMBER,
      to: from,
      body: `${process.env.STORE_NAME} alerts. Msg&Data rates apply. Reply STOP to unsubscribe.`,
    });
  } else if (['START', 'UNSTOP', 'YES'].includes(keyword)) {
    await db.smsConsent.reactivate(from, 'marketing');
  }

  res.sendStatus(200);
}

Important for custom Twilio implementations: Register your brand and campaign through the Campaign Registry (TCR) before sending. US carriers block unregistered 10DLC traffic. Twilio's console guides you through this under Messaging → Regulatory Compliance → 10DLC.

Step 3: Consent compliance requirements

TCPA (US) requirements — non-negotiable:

  1. Opt-in checkbox must be unchecked by default at checkout
  2. Consent language must appear adjacent to the checkbox (not in fine print)
  3. Required consent language: "By checking this box, you agree to receive marketing texts from [Store Name] at the number provided. Message frequency varies. Message and data rates may apply. Reply STOP to unsubscribe."
  4. You must honor STOP within 10 business days (dedicated SMS apps do this automatically)
  5. No marketing SMS before 8am or after 9pm in the recipient's local timezone

GDPR (EU) requirements:

  • Same opt-in standards as TCPA plus explicit consent documentation
  • Provide a data export mechanism (consent record with timestamp, IP, exact consent language)
  • Double opt-in is required for EU subscribers in many countries

All major SMS apps (Postscript, SMSBump, Klaviyo SMS) handle these compliance requirements automatically. If using Twilio directly, you must build this yourself.

Step 4: Campaign segmentation

The highest-ROI SMS segments:

SegmentMessageExpected CTR
Cart abandoners (1–4 hours)"You left something behind: [cart link]"15–25%
VIP customers (top 20% LTV)Early access to sales and new arrivals20–30%
Lapsed customers (60–90 days)Win-back offer with discount8–15%
Post-purchase cross-sell (7 days after delivery)"Other customers who bought X also love Y"10–20%

In Postscript: build segments under Postscript → Segments using order history, purchase frequency, and LTV filters. In Klaviyo SMS: add an SMS step to your existing email segments — the audience targeting is identical.

Step 5: Measure SMS performance

MetricHealthy TargetWhere to Find
Opt-in rate at checkout5–15% of customersApp analytics
Click-through rate (campaigns)8–20%App analytics
Opt-out rate per campaign< 2%App analytics — pause if above 3%
Revenue per subscriber per month$3–$10Calculate: SMS-attributed revenue ÷ subscribers
Unsubscribe rate (total)< 5% per monthApp analytics

Best Practices

  • Separate marketing and transactional consent — customers who opt out of marketing SMS should still receive order confirmation and shipping texts; these are different consent types
  • Never send more than 2–3 marketing SMS per week — SMS is the most intrusive channel; high frequency causes unsubscribes faster than any other channel
  • Keep messages under 160 characters to avoid multi-part messages — emoji count as 2 characters and trigger UCS-2 encoding, halving the 160-character limit
  • Always include STOP instructions in every marketing message — most apps do this automatically; verify it is there
  • Register 10DLC before going live — US carriers block unregistered traffic; registration takes 1–2 weeks through your SMS platform

Common Pitfalls

ProblemSolution
Messages blocked by carriersComplete 10DLC brand and campaign registration through your SMS platform before sending
STOP not being honoredDedicated SMS apps handle this automatically; for custom Twilio, configure the inbound webhook
Quiet hours violationUse your SMS platform's built-in quiet hours setting; for Twilio, implement timezone-based scheduling
Checkbox pre-checked at checkoutThis violates TCPA — change to unchecked by default immediately; it is a legal requirement, not a preference
Multi-part SMS for 161-character messageCount characters server-side before sending; use a URL shortener for cart links

Related Skills

  • @email-marketing-automation
  • @cart-abandonment-recovery
  • @cart-recovery-sms
  • @push-notifications
  • @customer-segmentation

How do I install SMS marketing in Cursor, Claude Code, or Codex?

Run npx skills add finsilabs/awesome-ecommerce-skills --skill sms-marketing in the project where you want it, then ask your agent for the skill by name. The --skill flag installs only SMS marketing, not every skill in the repository.

Where does SMS marketing come from and what license is it under?

SMS marketing comes from the finsilabs/awesome-ecommerce-skills repository on GitHub. That repository has 34 GitHub stars. The skill is published under the MIT license.

Prefer plain text? Read the SMS marketing guide as markdown.