← SkillSafe / SMS Desk

Count, check and fix an SMS flow before it goes out

Paste the texts you are about to load into your SMS platform. Your browser counts every message the way carriers bill it, finds the one curly quote that doubles the cost, and checks sender ID, opt-out, the opt-in confirmation, link shorteners, quiet hours in every time zone and frequency. Free, before you sign in. Then the desk reviews the flow and rewrites what needs it, or drafts one from a brief. Every text it writes is measured and checked again.

The brands are invented. Each example comes with a saved model reply, so you can see the whole page without signing in or spending a credit.

Program
Where recipients are
Cost, send window, time zones and merge tags
nothing pasted yet
Drop a .txt or a .csv export (a body or message column), or
How to write the flow

Put each message under a header line in square brackets: a label, then any of a delay, a scheduled time and a kind, separated by |. A delay like +30m, +4h or +2d counts from the previous message; T+2d or 30 min after abandon counts from the trigger. A scheduled time is at 2026-10-06 18:30 ET. Kinds are marketing, transactional, otp, opt-in (the confirmation after someone subscribes), help and stop (your replies to those keywords). Without headers, separate messages with a line of ---. Blank lines alone are read as separate texts only when each one opens with the brand or carries its own STOP; otherwise they are paragraphs of one text. A CSV (comma, tab or semicolon) needs a column whose name says body, message, text or copy; name, delay, type and send_at columns are read when present, and the page says which column it read. Send times can also be ISO 8601 or 10/06/2026 6:30 PM CT.

Paste a flow to price the review.

Text only people who gave you prior express written consent to get marketing texts; a purchase or an email sign-up is not SMS consent. Every marketing text needs a way to opt out (Reply STOP).

What this does, and what it does not

The counts are computed, not guessed. A message is GSM-7 when every character is in the GSM 03.38 alphabet (the same table Twilio's open-source segment calculator uses); the ten extension characters, such as { } [ ] and the euro sign, cost two septets each. One character outside it, a curly quote, an em dash, an emoji, switches the whole message to UCS-2 and cuts each segment from 160 characters to 70 (153 and 67 once a message is split). Merge tags are filled at the widths you set before counting, and a whole character is never split across a segment.

The rules are checks, not legal advice, and a clean check does not make a program compliant. Each finding names what it rests on: the CTIA Messaging Principles and Short Code Monitoring Handbook, carrier guidance on public shorteners, 47 CFR 64.1200 for the 8 a.m. to 9 p.m. window and opt-out confirmations, the Florida, Oklahoma and Maryland telephone-solicitation laws for 8 p.m. and three per 24 hours, CASL, the Australian Spam Act and UK PECR regulation 22; the source list is in llms.txt. The page never sends a text and never connects to your SMS platform. Derived from the agent skill @coreyhaines31/sms (coreyhaines31/marketingskills, MIT; see the notice).