Free tool · Runs in your browser · No signup

SMS Deliverability Pre-Flight Linter

Paste the message you're about to send, pick the destination countries, and this runs it through the same categories of checks carriers actually filter on: link shorteners, ALL-CAPS ratio, missing opt-out language, encoding jumps that quietly double your segment count, and per-country sender-ID registration flags.

No signupStatic, client-sideRules v2026-07-26

Paste your message

Alphanumeric sender IDs are capped at 11 characters on the routes that support them.

Data as of 2026-07-26 — source: deliverability-rules.json (rules v2026-07-26)

What this checks, and why it matters

Carriers and aggregators filter A2P traffic before it ever reaches a handset, and most of that filtering runs on patterns, not judgment calls. A shortened link, a message that's 40% capital letters, or a marketing message with no way to opt out are all common reasons a perfectly legitimate send gets throttled, filtered, or blocked outright — usually with no useful error message back to the sender.

This linter runs five checks client-side, entirely in your browser: link-shortener domains, ALL-CAPS ratio over 30%, the SHAFT-C content classes carriers watch for on US routes (sex, hate, alcohol, firearms, tobacco, cannabis), a missing opt-out keyword on messages that read as marketing, and sender-ID length. It also flags the single most common invisible cost: typing a curly quote, an em dash, an ellipsis or an emoji silently switches your message from GSM-7 to UCS-2 encoding, cutting the per-segment character budget from 160 (or 153 when concatenated) down to 70 (or 67) — which can double your per-message cost without changing what the message says. The tool shows you the ASCII-safe rewrite when one would bring you back under GSM-7.

Selected countries get their own registration flags: US numbers fall under the 10DLC framework, India requires DLT registration for sender headers and templates, and everything else gets a reminder to check destination-specific rules with the sender-ID lookup tool. Nothing you type is sent anywhere — the rule set ships as a versioned JSON object baked into this page, also downloadable separately, so the checks stay auditable and reproducible outside the tool.