sms-best-practices.md
1 --- 2 title: 'Sms Best Practices' 3 category: 'outreach' 4 last_verified: '2026-02-15' 5 related_files: 6 - 'src/utils/compliance.js' 7 - 'src/outreach/sms.js' 8 - 'src/inbound/sms.js' 9 tags: ['sms', 'best', 'practices', 'testing', 'database', 'ai', 'llm', 'email'] 10 status: 'current' 11 --- 12 13 # SMS Best Practices (TCPA Compliance) 14 15 This document outlines best practices for SMS outreach, focusing on TCPA (Telephone Consumer Protection Act) compliance and effective messaging strategies. 16 17 ## Core TCPA Requirements 18 19 ### Prior Consent 20 21 TCPA requires **explicit prior written consent** before sending marketing SMS. For cold outreach: 22 23 - Initial SMS must be informational, not promotional 24 - Must provide opt-out instructions 25 - Cannot include hard sales pitches without consent 26 - Express written consent must be obtained before marketing messages 27 28 **Best Practice**: Frame initial SMS as informational value-add rather than direct sales pitch. 29 30 ### Opt-Out Instructions 31 32 **Every SMS must include clear opt-out instructions:** 33 34 - Standard: "Reply STOP to opt out" 35 - Must honor opt-outs immediately (within seconds) 36 - Store opt-outs permanently in database 37 - Never contact opted-out numbers again 38 - Process opt-outs automatically (STOP, UNSUBSCRIBE, CANCEL, END, QUIT) 39 40 **Example**: "Website audit results for yourbusiness.com - 3 quick wins identified. Reply STOP to opt out." 41 42 ### Business Hours 43 44 **SMS must be sent during reasonable hours:** 45 46 - 8am - 9pm in recipient's local timezone 47 - Avoid weekends for initial cold outreach 48 - Consider industry-specific work hours (e.g., restaurants: avoid lunch/dinner rush) 49 - Respect time zones across different regions 50 51 **Implementation**: Use timezone detection based on phone number area code or business location. 52 53 ### Sender Identification 54 55 **Clearly identify who is sending:** 56 57 - Include business name in first message 58 - Provide contact information 59 - Be transparent about purpose 60 - Use registered business phone number (not personal) 61 62 **Example**: "Hi [Name], this is [Your Name] from [Business]. I analyzed your website..." 63 64 ## Message Content Guidelines 65 66 ### Length Constraints 67 68 - **Aim for <160 characters** to avoid SMS segmentation 69 - Segmented messages cost more and appear as multiple texts 70 - Ultra-short, urgent, personal tone 71 - Single clear call-to-action 72 73 **Character Count Tips**: 74 75 - "Reply STOP to opt out" = 23 characters 76 - Leave ~135 chars for actual message 77 - Use URL shorteners if links needed 78 - Abbreviate where natural (but avoid txt spk) 79 80 ### Tone and Style 81 82 - **Ultra-short**: Every word must earn its place 83 - **Urgent**: Create FOMO without false urgency 84 - **Personal**: Use first name, reference their business 85 - **Conversational**: Write like a text to a friend (professional friend) 86 - **Action-oriented**: Clear next step 87 88 **Good Example** (158 chars): 89 90 ``` 91 Hi Sarah, found 3 quick wins on yoursite.com that could boost leads 30%. Want the free audit? Reply YES or STOP to opt out. - Mike 92 ``` 93 94 **Bad Example** (too long, not personal): 95 96 ``` 97 Hello, we are reaching out to inform you about our website conversion optimization services. We have analyzed your website and found several areas for improvement. Would you like to schedule a consultation to discuss how we can help? Reply STOP to unsubscribe. 98 ``` 99 100 ### Compliance Checklist 101 102 Before sending any SMS, verify: 103 104 - [ ] Explicit consent obtained (or informational-only content) 105 - [ ] Opt-out instructions included ("Reply STOP to opt out") 106 - [ ] Sent during business hours (8am-9pm local time) 107 - [ ] Sender clearly identified (business name + sender name) 108 - [ ] Message under 160 characters 109 - [ ] No misleading or deceptive content 110 - [ ] Opt-outs honored immediately 111 - [ ] Not sent to any numbers on opt-out list 112 - [ ] Using registered business phone number 113 114 ## Spam Triggers to Avoid 115 116 ### High-Risk Words/Phrases 117 118 Avoid these spam trigger words in SMS: 119 120 - **Financial**: "free money", "cash bonus", "$$$$", "credit" 121 - **Urgency**: "act now", "urgent", "limited time" (unless genuinely true) 122 - **Claims**: "guaranteed", "100%", "risk-free" 123 - **ALL CAPS**: Never use all caps (looks spammy and aggressive) 124 - **Excessive punctuation**: "!!!", "???", "..." 125 126 ### Deceptive Practices 127 128 Never use: 129 130 - Fake urgency ("offer expires in 1 hour" when it doesn't) 131 - Misleading sender names 132 - Hidden costs or fees 133 - False scarcity 134 - Impersonation 135 136 ## Response Handling 137 138 ### Positive Responses 139 140 When prospect replies YES/INTERESTED/MORE: 141 142 - Respond quickly (within 1-2 hours max) 143 - Provide promised information 144 - Move to longer-form channel (email/call) 145 - Thank them for engaging 146 147 ### Negative Responses 148 149 When prospect replies NO/NOT INTERESTED: 150 151 - Honor immediately 152 - Add to opt-out list 153 - Send polite acknowledgment: "No problem! Removed your number. Have a great day." 154 - Never contact again 155 156 ### Opt-Out Processing 157 158 Standard opt-out keywords (auto-processed): 159 160 - STOP 161 - UNSUBSCRIBE 162 - CANCEL 163 - END 164 - QUIT 165 166 **System Response**: "You've been unsubscribed. You won't receive any more messages from us." 167 168 ## Rate Limiting 169 170 ### Daily Limits 171 172 - **Recommended**: Maximum 50 SMS per day per number 173 - **Conservative**: 20-30 SMS per day for new numbers 174 - **Scaling**: Increase gradually based on response rates 175 176 ### Delivery Timing 177 178 - Spread sends throughout business hours 179 - Don't batch-send 100 messages at once 180 - Respect carrier rate limits (varies by carrier) 181 - Monitor delivery rates and bounce rates 182 183 ## Testing and Monitoring 184 185 ### Pre-Launch Testing 186 187 1. Test on your own phone first 188 2. Verify opt-out processing works 189 3. Check character count (use online SMS counter) 190 4. Test on multiple carriers (AT&T, Verizon, T-Mobile) 191 5. Verify timezone logic 192 6. Test business hours filtering 193 194 ### Ongoing Monitoring 195 196 Track these metrics: 197 198 - **Delivery rate**: % of messages successfully delivered 199 - **Opt-out rate**: % of recipients who opt out (aim for <1%) 200 - **Response rate**: % of recipients who engage 201 - **Complaint rate**: Carrier spam complaints (aim for 0%) 202 - **Bounce rate**: Invalid/disconnected numbers 203 204 **Red Flags**: 205 206 - Opt-out rate >2%: Message too aggressive or poor targeting 207 - Delivery rate <95%: Number quality issues 208 - No responses after 50 sends: Message not resonating 209 210 ## Legal Consequences of Non-Compliance 211 212 TCPA violations are serious: 213 214 - **$500-$1,500 per violation** (per message) 215 - Class-action lawsuit risk 216 - Carrier blocking (phone number blacklisted) 217 - FTC enforcement action 218 - Reputational damage 219 220 **Example**: Sending 100 SMS without consent = $50,000-$150,000 potential liability 221 222 ## Best Practices Summary 223 224 1. ✅ **Always include opt-out**: "Reply STOP to opt out" 225 2. ✅ **Keep it short**: <160 characters 226 3. ✅ **Business hours only**: 8am-9pm local time 227 4. ✅ **Identify yourself**: Business name + sender name 228 5. ✅ **Provide value first**: Informational before promotional 229 6. ✅ **Honor opt-outs immediately**: Automated processing 230 7. ✅ **Be personal**: Use names, reference their business 231 8. ✅ **Single CTA**: One clear next step 232 9. ✅ **Test everything**: Character count, opt-outs, delivery 233 10. ✅ **Monitor metrics**: Track opt-outs, responses, complaints 234 235 ## Example Templates 236 237 ### Initial Outreach (Informational) 238 239 **Template 1** (156 chars): 240 241 ``` 242 Hi {firstname}, quick heads up: {domain} homepage missing 3 key trust elements. Free 1-pg audit? Reply YES or STOP. -{sender_name} 243 ``` 244 245 **Template 2** (158 chars): 246 247 ``` 248 {firstname} - spotted {domain} on Google. Found simple fix that could boost leads 25%. Want details? Reply YES or STOP to opt out. -{sender_name} 249 ``` 250 251 **Template 3** (155 chars): 252 253 ``` 254 Hi {firstname}, {domain} loads slow on mobile (4.2s). Quick fix = 30% more leads. Free report? Reply YES or STOP to opt out. -{sender_name} 255 ``` 256 257 ### Follow-Up (After Interest) 258 259 **Template** (142 chars): 260 261 ``` 262 Great! Sending audit to your email now. Check spam folder. Best time for 10-min call this week? Reply day/time or STOP. -{sender_name} 263 ``` 264 265 ### Value-Add Follow-Up 266 267 **Template** (159 chars): 268 269 ``` 270 {firstname} - saw {competitor_domain} ranks higher for "{keyword}". Here's why: [shortlink]. Reply YES for your analysis or STOP. -{sender_name} 271 ``` 272 273 ## Resources 274 275 - [TCPA Compliance Guide](https://www.fcc.gov/consumers/guides/stop-unwanted-robocalls-and-texts) 276 - [Twilio TCPA Best Practices](https://www.twilio.com/en-us/legal/tcpa) 277 - [FCC Text Messaging Rules](https://www.fcc.gov/document/fcc-clarifies-text-messaging-rules) 278 - [SMS Character Counter](https://twilio.com/sms-character-counter) 279 280 ## Internal Implementation 281 282 Our system implements these best practices through: 283 284 1. **Compliance Module** (`src/utils/compliance.js`): 285 - `shouldBlockSMS()` - Checks opt-outs and business hours 286 - Automatic opt-out processing 287 288 2. **SMS Outreach Module** (`src/outreach/sms.js`): 289 - E.164 phone number formatting 290 - Twilio integration with circuit breaker 291 - Error handling and retry logic 292 293 3. **Inbound SMS Handler** (`src/inbound/sms.js`): 294 - Webhook processing for replies 295 - Automatic opt-out keyword detection (STOP, UNSUBSCRIBE, etc.) 296 - Conversation tracking in database 297 298 4. **Database Schema**: 299 - `opt_outs` table tracks opted-out numbers 300 - `conversations` table logs all SMS interactions 301 - `outreaches` table stores pending/sent messages 302 303 ## Updates and Maintenance 304 305 This document should be reviewed: 306 307 - Quarterly for TCPA regulation changes 308 - After any carrier policy updates 309 - When adding new SMS features 310 - Following any compliance incidents 311 312 Last updated: 2026-02-06