Skip to main content
Compliance is critical in SMS marketing. Trackly SMS provides tools to manage opt-outs and stay within regulations.

Opt-Out Handling

Trackly evaluates every inbound message for opt-out intent before it reaches your inbox. A matched opt-out takes effect immediately — the contact is unsubscribed and every future send to that number is blocked automatically.

Detection layers

Opt-out intent is matched in priority order; the first layer to match wins. Opt-out, spam, complaint, and abuse signals always take precedence over re-subscribe (START) and HELP keywords, and are evaluated before any custom keyword auto-responses.
1

Exact keywords

A message that is only a recognized keyword (after normalization) is an instant opt-out.All seven per-se revocation keywords from the FCC’s 2025 revocation rule (47 CFR § 64.1200(a)(10)) — stop, quit, end, revoke, opt out, cancel, unsubscribe — are honored.
2

Glued STOP variants

Any single-word message that starts with stop is an instant opt-out — STOP2END, STOPEND, STOP2, STOPTEXTING. This catches recipients who run the words together and campaigns whose copy instructs a nonstandard keyword. (Longer sentences are not affected: “stopwatch sale today” does not opt out.)
3

Common misspellings

Fat-finger and autocorrect variants of STOP are caught — STPO, STORP, STTOP, STP, STIP, SUTOP, ETOP, and ~15 more.
4

Natural-language phrases

Free-text opt-outs are matched by pattern: “stop texting me”, “do not text”, “no more texts”, “take me off your list”, “remove me from your list”, “why are you texting me”, “you keep texting me”.
5

Obfuscated variants

Character-swapped and spaced evasions such as st0p and sto p are normalized and caught.
6

Spam, complaint & abuse

“spam”, “scam”, “junk”, “stop spamming”, “reporting you”, “do not call”, “speak with a representative”, and profanity are treated as opt-outs by default and labeled for reporting.

Matching rules

Text is Unicode-normalized, lowercased, trimmed, and stripped of surrounding punctuation before matching. STOP, Stop!, and stop all match.
Emoji-only replies and iPhone tapbacks (e.g. Loved "…", 👍 to "…") are ignored — even when they quote one of your messages that contains the word STOP. Only text the recipient actually types is evaluated.
If a reply quotes a previous message (lines beginning with >, “On … wrote:”, email headers), the quoted block is removed before matching, so a quoted “Reply STOP to opt out” does not cause a false opt-out. The recipient’s own added text is still checked.
To stay on the safe side of TCPA, any message containing the word “stop” is treated as an opt-out — including phrases like “stop by”, “stop in”, or “stop over”. Trackly always errs toward honoring the opt-out.
HELP and INFO trigger the help auto-response only when sent on their own. Conversational phrases like “please help” or “help me” are treated as normal replies.

What happens on opt-out

  1. The inbound message is classified as an opt-out.
  2. The contact is marked unsubscribed on that list (consent_status becomes opted_out) with the reason and timestamp recorded.
  3. Trackly sends the carrier-mandated opt-out confirmation reply.
  4. The number is added to the suppression list — all future sends are blocked, and an unsubscribe webhook fires.
Global opt-out. Account owners can turn on Enable Global Opt-Out under Account Settings > Contact Rules. While it is on, a contact who opts out by replying to one of your lists is also unsubscribed from every other list in the account that they are on, including paused and deleted lists. Each of those lists records the reason replied stop, blocks future sends to the contact, and fires its own unsubscribe webhook, but does not send a confirmation message. The setting is off by default, does not change opt-outs received before it was turned on, and applies only to the account it is turned on in, not to its parent account or sub-accounts. A contact who later signs up again or texts START to a list rejoins only that list, under that list’s re-subscribe rules.

Re-Subscription

A previously unsubscribed contact can opt back in by texting a START keyword: START, UNSTOP, SUBSCRIBE, RESUBSCRIBE, OPTIN, or OPT IN. This reactivates the contact (consent_status = re_opted_in) and clears the suppression entry.
YES is intentionally not a re-subscribe keyword — it’s too common in normal conversation to safely treat as renewed consent. Re-subscription requires an explicit START-family keyword.
Contacts can also re-subscribe by signing up again through your opt-in forms, or by an admin re-adding them with documented consent.
Opt-out (exact): STOP, STOPALL, STOP ALL, END, QUIT, CANCEL, REVOKE, UNSUBSCRIBE, UNSUB, OPT OUT, OPTOUT, STOP2END, STOPTOEND, REMOVE, REMOVE ME, STOPPED, STOPS, STOPPING, BLOCK, BLOCKED, BS, BULLSHIT, WRONG, DO NOT TEXT, DONT TEXT, DO NOT CONTACT, DONT CONTACT, DON’T CONTACT, DON’T CALL, DONT CALL, DON’T CARE, DONT CARE, DON’T SEND, DONT SEND, DON’T BOTHER, DONT BOTHEROpt-out (misspellings): ETOP, DTOP, STPO, STORP, STOD, STOL, STOLP, STOM, STON, STOO, STOOP, STOT, STP, STTOP, STUP, STIP, SUTOP, SYTOPSpam / abuse: SPAM, SCAM, JUNK (plus profanity, “reporting you”, “do not call”, “speak with a representative”)Re-subscribe (START): START, UNSTOP, SUBSCRIBE, RESUBSCRIBE, OPTIN, OPT INHelp: HELP, INFO

Unsubscribe Reasons

Every unsubscribe records why it happened:

Message Requirements

Required Elements

Every message should include:
  • Clear sender identification
  • Opt-out instructions
Example:

Account Settings

Configure account-wide compliance text:
  1. Go to Account Settings > Messaging
  2. Set Prepend text (added to start of message)
  3. Set Append text (added to end of message)
Example:
Prepend and append text is only applied to US numbers (phone numbers with +1 prefix). Non-US sending lists receive the raw message without auto-applied compliance text.

TCPA Quiet Hours

Trackly enforces TCPA quiet hours based on the recipient’s phone number — any number starting with +1, regardless of which number the message is sent from:
  • Allowed hours: 8:00 AM - 9:00 PM in the contact’s local time
  • Timezone source: Determined from carrier lookup at contact creation, or from click IP geolocation
  • Timezone fallback chain: Contact timezone → Account default timezone → Eastern Time. Quiet hours are still enforced under this fallback.
  • International numbers: Not subject to TCPA quiet hours
  • Scheduled sends blocked by quiet hours are skipped (tcpa_timezone) and not sent; journey, click-trigger, and double-opt-in steps are instead held and resumed at the next valid window
  • Transactional messages (e.g., OTP codes) can be configured as exempt from TCPA restrictions
For each contact, track:
  • When they opted in
  • How they opted in (web form, API, etc.)
  • What they consented to
This is stored in signup_method and signup_date.

Regulations

TCPA (US)

The Telephone Consumer Protection Act requires:
  • Prior express consent for marketing
  • Identification of sender
  • Opt-out mechanism
TCPA quiet hours and automatic opt-out text (message prepend/append) are only enforced for US phone numbers (+1 prefix). For international numbers, these restrictions do not apply — add appropriate opt-out instructions for your target market directly in your message creatives.

Setting Up TCPA Compliance

1

Configure Quiet Hours

Leave TCPA sending hours enabled in Account Settings (on by default). The 8 AM–9 PM window itself is fixed; Trackly automatically checks each contact’s timezone before sending.
2

Enable Opt-Out Keywords

Verify STOP, STOPALL, UNSUBSCRIBE, QUIT, and CANCEL keywords are active. These are enabled by default on all lists.
3

Set Cooldown Periods

Configure minimum time between messages to the same contact. This prevents over-messaging and reduces opt-outs.
4

Record Consent

Use the ip_address and url fields when creating contacts via API to record where and when consent was given.
5

Test Your Setup

Send a test message to your own number, reply STOP, and verify the unsubscribe is processed. Then verify future sends are blocked.

International Sending

When sending to non-US numbers:
  • TCPA quiet hours are not enforced — messages send at any time
  • Message prepend/append text is not auto-applied — add opt-out instructions in your creatives
  • STOP word auto-removal, spam complaint removal, and DLR error removal remain active globally as carrier best practice
Research the regulations for your target countries and include appropriate opt-out language.

CTIA Guidelines

Carrier guidelines recommend:
  • Clear opt-out in every message
  • Immediate opt-out processing
  • No messages to opted-out numbers

CAN-SPAM (Email-Adjacent)

While for email, principles apply:
  • Honest identification
  • Clear opt-out
  • Honor requests promptly

DLR Error Auto-Removal

Trackly automatically removes contacts from sending lists based on delivery report (DLR) error codes from SMS providers. This prevents repeated sends to unreachable numbers and protects your sender reputation.

Immediate Removal

These error codes trigger immediate contact removal, unsubscribed with reason dlr error 603 or dlr error 351 (matching the triggering code):

Threshold Removal

These error codes trigger removal after 5 consecutive matching failures within 30 days — all five of the most recent delivery reports for that number must carry one of these codes: Numbers routed through Twilio or Aloware use their own carrier error codes (30003, 30005, 30006, 30007, 30008) with a 3 consecutive failure threshold. DLR auto-removal is enforced by default on all accounts. The only configurable setting is turning DLR error auto-removal on or off for a list or account — failure thresholds are not adjustable.

Toll-Free Verification

1

Submit Verification Request

In the dashboard, navigate to your toll-free number and submit a verification request with your business details and use case.
2

Provide Sample Messages

Include 2-3 example messages that represent your typical sending content.
3

Confirm Opt-In Method

Describe how contacts consent to receive messages (web form, keyword opt-in, etc.).
4

Wait for Review

Toll-free verification typically takes 1-3 business days. You will receive an email notification when complete.

Spam Auto-Removal

Contacts are automatically removed when SMS providers report spam-related delivery failures. This protects your account from carrier penalties.

Carrier Spam Codes

CM Spam Codes

CM delivery reports without one of these codes are also matched by their free-text description: spam, blacklisted, blocked, opt-out, undeliverable, and subscriber unavailable.
Contacts removed for spam are withdrawal-class: they can be re-enrolled through the resubscribe API once the list’s cooling-off period has passed, but they cannot re-enroll through opt-in forms.

Content Filtering

Trackly automatically blocks messages containing prohibited content — first when you save a creative, schedule, or journey step, and again at send time. Messages that match blocked patterns are not sent and receive a status of BLOCKED_CONTENT with the matched word and category.

Blocked Categories

Messages containing cryptocurrency-related terms are blocked. This includes direct terms and common variations.
Phishing-style phrases commonly used in fraud attempts are blocked.
Major US bank and financial institution names are blocked to prevent impersonation.
International bank names are also blocked.

Leet-Speak Detection

The content filter detects common character substitutions used to evade filtering: For example, b1tc0in and 3th3r3um are both caught.

When Filtering Applies

  • Content filtering runs when you save a creative, a schedule’s message variants, or a journey step’s inline message — the save is rejected with a 400 that names the matched word and category. Creative endpoints return it as error code BLOCKED_CONTENT; schedule and journey saves return the same detail in the error message text.
  • Content filtering runs again at send time; blocked messages are not sent and receive BLOCKED_CONTENT status
  • Filtering applies to the final message text (after template substitution and prepend/append)
Content filtering cannot be disabled. If you believe a message was incorrectly blocked, contact support with the blocked word and category.

Spam Prevention

Content Guidelines

Avoid:
  • Misleading claims
  • Excessive caps/punctuation
  • Shortened URLs from unknown shorteners
  • Adult content

Volume Guidelines

  • Don’t send too frequently
  • Respect quiet hours
  • Use frequency capping

List Hygiene

  • Remove invalid numbers
  • Honor opt-outs immediately
  • Don’t purchase lists

Handling Complaints

If a carrier flags you:
  1. Review the flagged content
  2. Identify the issue
  3. Update messaging practices
  4. Contact carrier if needed
Discord alerts notify you of spam complaints in real-time.

Audit Trail

Trackly maintains:
  • When contacts subscribed
  • When/why they unsubscribed
  • All messages sent
  • Opt-out requests received
This data helps demonstrate compliance. For opt-ins captured through the opt-in tool (widgets, hosted pages, keyword flows, subscribe links, QR codes, or the opt-in webhook), Trackly additionally records a frozen verbatim copy of the consent-disclosure text shown to the visitor, the creative they saw, their IP, user agent, page URL, and the consent timestamp. These consent records are retained indefinitely as TCPA evidence. See Opt-In Tool Data & Retention for the full field list, retention rules, webhook behavior, and export paths.

10DLC Registration Checklist

1

Register Your Brand

Submit your business details (legal name, EIN, website) for brand verification through the dashboard.
2

Create a Campaign

Register your messaging use case (marketing, notifications, etc.) with a description of your message content.
3

Assign Numbers

Associate your 10DLC phone numbers with the registered campaign.
4

Wait for Approval

Brand verification typically takes 1-5 business days. Campaign approval may take an additional 1-3 days.
5

Monitor Throughput

After approval, your sending throughput is set based on your brand trust score. Higher scores unlock higher volumes.

Best Practices

Every marketing message should have “Reply STOP to opt out” or similar.
Never send to unsubscribed contacts. The system blocks this automatically.
Recipients should know who’s messaging them immediately.

Next Steps

Phone Numbers

Number provisioning

Discord Alerts

Compliance monitoring