SMS marketing delivers open rates above 90% and click-through rates that dwarf email, but ecommerce brands consistently struggle with two problems: writing messages that feel valuable rather than spammy within the 160-character constraint, and staying compliant with TCPA, CTIA, and carrier filtering rules that can get your number blacklisted. SMS Optimizer solves both by generating high-converting SMS copy that respects character limits, includes required compliance elements, and uses proven psychological triggers calibrated to your specific campaign type.
DecisionStrongAcceptableWeakMessage openingPersonalized hook referencing behavior or segmentBenefit-first generic openerBrand name first with no hookCharacter allocationHook 60 + offer 50 + CTA 20 + link/footer reservedHook 80 + offer 50 + link/footer reservedEntire 160 used for copy, no room for link or footerUrgency languageSpecific deadline ("ends midnight EST")Relative urgency ("today only")Vague urgency ("limited time") or no urgencyCTA styleSingle clear action verb ("Shop now", "Claim it")Two-option CTA ("Shop or reply STOP")No CTA or passive phrasingEmoji usage1–2 emojis that match brand voice and reinforce message3 emojis, non-redundant4+ emojis or emojis duplicating words already writtenCompliance footerPlatform-native opt-out via append settingManual "Reply STOP to opt out" at endNo opt-out language or opt-out buried mid-messageSend timing10am–12pm or 6pm–8pm subscriber local time9am–10am or 5pm–6pm localBefore 9am, after 9pm, or platform default without reviewLink domainBranded short domain (e.g. brand.co/spring)Trusted full URLbit.ly, tinyurl, or other generic shorteners
Collect all required inputs before writing a single character: campaign type, product or offer details, SMS platform, brand voice preference, and the link destination. If any required input is missing, ask before proceeding. Incomplete inputs produce copy that fails compliance checks or requires full rewrites.
Before writing copy, calculate available characters:
Write the primary message using the character budget from Step 2. Apply the following structure:
[LINK] notation so the user can see where the tracking URL fitsWrite a second version of the same message with a materially different hook angle. Do not just swap one word — change the psychological approach entirely (e.g., primary uses urgency, variant uses social proof; or primary uses discount framing, variant uses curiosity framing). Both variants must fit the character budget.
Before presenting output, check every compliance item in the SMS Quality Checklist (assets/sms-quality-checklist.md). Pay particular attention to:
Present the full output package in this structure:
For multi-message sequences (cart abandonment, welcome series, win-back), deliver messages in send order with recommended delay intervals between each. Label each message with its position (Message 1 of 3) and its behavioral trigger (e.g., "Sends 1 hour after cart abandonment if no purchase").
Inputs:
Character budget:
Primary Message (134 characters):
text
Spring drop is here 🌸 30% off skincare bundles ends midnight — grab yours before it's gone [LINK]
Character count: 97 + link = 120 ✓ (17 buffer for personalization prefix if added)
A/B Variant (curiosity hook):
text
Your skin's going to thank you for this one 💚 SPRING30 = 30% off bundles today only [LINK]
Character count: 88 + link = 111 ✓
Character Budget Breakdown:
Compliance Checklist:
Send Timing Recommendation: Tuesday–Thursday, 10am–12pm subscriber local time for highest open rates on promotional sends.
Inputs:
Message 1 of 3 — 1 hour after abandonment (reminder only, no discount):
text
You left something behind. Your cart is saved and ready when you are. [LINK]
Character count: 68 + link = 91 ✓ Note: No discount in Message 1 — preserves margin for subscribers who convert without incentive.
Message 2 of 3 — 6 hours after abandonment (soft incentive):
text
Still thinking it over? Use SAVE10 for 10% off your order — good for the next 24 hours. [LINK]
Character count: 88 + link = 111 ✓
Message 3 of 3 — 22 hours after abandonment (urgency + final offer):
text
Last call: SAVE10 expires in 2 hours. Don't leave 10% off on the table. [LINK]
Character count: 72 + link = 95 ✓
Cadence Recommendation:
Including the compliance footer in the character count — Postscript and Attentive append footers automatically. If you write "Reply STOP to opt out" in your message body AND the platform appends it, your subscribers receive duplicate opt-out language and the message splits across two segments.
Using bit.ly or tinyurl links — Generic URL shorteners are flagged by carrier filtering algorithms and dramatically reduce deliverability. Use branded short domains or the platform's built-in link shortener.
Writing urgency without specifics — "Limited time offer" is a spam trigger phrase in carrier filtering systems. "Ends tonight at 11:59pm EST" is specific, credible, and passes filtering.
Sending transactional messages with promotional angles — Shipping notifications with a discount code appended violate TCPA transactional message rules. Keep transactional and promotional content in separate sends with separate consent paths.
Ignoring subscriber local time — Sending at 8am platform time when half your list is in PST means sending at 5am. Most SMS platforms support send-time optimization or time zone bucketing — use it.
Not reserving characters for the link — Writing exactly 160 characters of copy with no room for the tracking link forces the platform to either truncate your message or create a second segment, doubling cost.
Using ALL CAPS for urgency — ALL CAPS is one of the most reliable carrier filtering triggers. Use italics equivalents ("flash sale"), exclamation points sparingly, or time-specificity to convey urgency instead.
Testing only one variant — A single copy test wastes send volume. Always prepare two variants with materially different hooks. Even a 5% CTR improvement on a 10,000-subscriber list compounds significantly over an annual send calendar.
Forgetting suppression lists — Sending promotional SMS to subscribers who already purchased during the same campaign window is the fastest way to drive opt-outs. Always configure active-purchaser suppression before campaign launch.
Writing for desktop reading — SMS is consumed on mobile lock screens in 2–3 seconds. Long sentences, complex punctuation, and multi-clause offers all hurt mobile readability. Write for a lock screen glance, not a full read.
references/output-template.md — Standard output format for all SMS Optimizer deliverablesreferences/compliance-guide.md — TCPA, CTIA, and platform-specific compliance requirements by campaign typereferences/carrier-filtering-guide.md — Known spam trigger words, prohibited link domains, and carrier filtering avoidance techniquesassets/sms-quality-checklist.md — 40-point quality checklist covering copy, compliance, character budget, and deliverability