skills/marketing-growth/sms-marketing/SKILL.md
Launch SMS marketing campaigns with opt-in flows, audience segmentation, and full TCPA/GDPR compliance to drive revenue through text messaging
npx skillsauth add finsilabs/awesome-ecommerce-skills sms-marketingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
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.
| Platform | Best For | Shopify | WooCommerce | BigCommerce | Price | |----------|---------|---------|-------------|-------------|-------| | Postscript | Shopify-native, segmentation + flows | App Store | — | — | Free tier; $100+/mo | | Attentive | Mid-market, advanced A/B testing | App Store | Via integration | Via integration | $400+/mo | | Klaviyo SMS | Already using Klaviyo for email | App Store | Plugin | App Marketplace | Adds to Klaviyo plan | | SMSBump (Yotpo SMS) | WooCommerce + Shopify | App Store | Plugin | — | Free tier; $19+/mo | | Twilio | Custom/headless, developer-controlled | Via API | Via API | Via API | Pay-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.
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.
TCPA (US) requirements — non-negotiable:
GDPR (EU) requirements:
All major SMS apps (Postscript, SMSBump, Klaviyo SMS) handle these compliance requirements automatically. If using Twilio directly, you must build this yourself.
The highest-ROI SMS segments:
| Segment | Message | Expected 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 arrivals | 20–30% | | Lapsed customers (60–90 days) | Win-back offer with discount | 8–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.
| Metric | Healthy Target | Where to Find | |--------|----------------|---------------| | Opt-in rate at checkout | 5–15% of customers | App 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–$10 | Calculate: SMS-attributed revenue ÷ subscribers | | Unsubscribe rate (total) | < 5% per month | App analytics |
| Problem | Solution | |---------|----------| | Messages blocked by carriers | Complete 10DLC brand and campaign registration through your SMS platform before sending | | STOP not being honored | Dedicated SMS apps handle this automatically; for custom Twilio, configure the inbound webhook | | Quiet hours violation | Use your SMS platform's built-in quiet hours setting; for Twilio, implement timezone-based scheduling | | Checkbox pre-checked at checkout | This violates TCPA — change to unchecked by default immediately; it is a legal requirement, not a preference | | Multi-part SMS for 161-character message | Count characters server-side before sending; use a URL shortener for cart links |
tools
Let shoppers save products to a wishlist, share it with friends, and get notified when saved items come back in stock or drop in price
development
Build a themeable storefront with design tokens and CSS custom properties that supports white-labeling, multi-brand variants, and dark mode
development
Speed up product discovery with instant search suggestions, fuzzy typo matching, and category-aware results powered by Algolia or Elasticsearch
development
Build a mobile-first storefront with thumb-friendly navigation, sticky add-to-cart buttons, and touch-optimized components for high mobile conversion