How to Write WhatsApp Marketing Messages: Length, Tone, and CTAs
How to write WhatsApp marketing messages people answer: the anatomy, real length guidance, tone rules, four before-and-after rewrites, and the opt-out line.
The message is the campaign. Everything else - the list, the timing, the tooling - only decides whether your writing gets its chance. This guide is the writing: an anatomy that works, honest length guidance, the tone WhatsApp rewards, four rewrites of real-world bad messages, and the opt-out line that belongs in all of them.
The anatomy of a message that works
Messages that earn replies almost always carry the same four parts, in the same order:
- The hook - why you are writing. The offer, the news, the reminder. It should survive as a notification preview on a locked phone, because that is where most of your audience first meets it.
- The one detail that makes it matter. The deadline, the discount, the scarcity - a single line, not a paragraph of justification.
- The action. One verb, one target: reply, tap, visit, show this message. Never two actions; a message with three links gets zero taps on the one you wanted.
- The exit. A short opt-out line. It costs characters and buys the benefit of the doubt.
Wrap the middle two in spintax and a {name} at the front, and the same skeleton produces a unique, personal message per recipient.
The first line deserves special care, because of where it is read: WhatsApp notifications truncate, so the opening words are the whole message for everyone who does not open the chat. Lead with the offer or the news - never with “Dear customer” or a warm-up paragraph, which spend the preview on nothing. Write the first line as if it were the only line, and you will never be wrong.
Length: shorter than you think
Under 300 characters covers nearly every campaign. The reasons are mechanical, not stylistic: WhatsApp previews truncate, so the back half of a long message is invisible until someone commits; long texts read as broadcasts before they are read as words; and a message a stranger would not finish is a message your customer will not either.
The discipline that gets you there: write the message, delete every sentence that does not carry the hook, the detail, or the action, and move whatever remains of the detail into an attachment. If the survivors still run past 300 characters, you have two campaigns, not one.
There is even a delivery-side bonus to brevity: Automate shows each recipient a typing indicator scaled to the message’s length before it lands. A tight message reads as a person typing a tight message. Nobody types a 900-character paragraph with a thumbs-up at the end of it.
Tone: how businesses talk on WhatsApp
WhatsApp is where your customers talk to their families. The register that works is the shopkeeper’s, not the brand deck’s:
- First names, both ways. Theirs in the greeting ({name} handles it), yours in the sign-off. “This is Meera from Blossoms” beats “Dear Customer” and beats nothing at all.
- Plain words. “Flat 20% off this weekend” beats “Exclusive curated savings experience, limited period only”. Every word a reader must translate costs a reader.
- Permission for brevity. Fragments are fine. “Doors open 9 AM Saturday.” is correct WhatsApp grammar.
- Emoji as punctuation, not decoration. One is an anchor; five is noise. And an emoji never fixes stiff wording - it just decorates it.
- Honest urgency. “Until Sunday” works because Sundays arrive. Fake deadlines work once, and the second message from a number that lied is already unread.
Four rewrites, before and after
1. The brand announcement
Before: “Dear Valued Customer, we are thrilled to unveil our all-new collection, thoughtfully curated to elevate your everyday style. Visit our store to explore the full range today!”
After: “{Hi|Hey} {name}! The new {autumn|festive} collection just landed - {Come see it this weekend|We are open till 9 all weekend}. [catalog PDF]”
What changed: the customer became a person, the pride became news, and the detail moved into the attachment.
2. The triple-link sale
Before: “FLASH SALE!!! Up to 70% off sitewide + free shipping + extra 10% with code SAVE10. Shop now: bit.ly/xx | Also check our new arrivals: bit.ly/yy | Unsubscribe: bit.ly/zz”
After: “{Hi|Hello} {name}, flash sale this weekend: {flat 30% off everything|30% off sitewide}. Tap to shop: {link} (Reply STOP to opt out.)”
What changed: one offer, one action, one exit. The code went away because nobody types codes into a chat.
3. The guilt trip win-back
Before: “We miss you! It’s been so long since your last visit. Come back and enjoy 15% off. Don’t miss out again!”
After: “{Hi|Hello} {name}, {it has been a while|we noticed it has been a bit}. Here is 15% off your next order, good for 30 days: {code}. {We would love to see you again.|Come say hi.}”
What changed: no scolding, a real deadline, and the goodbye that makes the welcome believable. Win-backs need a reason to exist - the campaign examples cover the pattern.
4. The wall-of-text reminder
Before: “This is a friendly reminder that your appointment with us is scheduled for tomorrow as per our records. Please arrive 10 minutes early and bring your ID. If you need to reschedule, please call our front desk during working hours.”
After: “{Hi|Hello} {name}, your appointment is {tomorrow at|on} {time}. Reply 1 to confirm, 2 to reschedule.”
What changed: the instructions the customer actually needs stayed; the policy manual left. A reply-key CTA even sorts confirmations from reschedules before anyone calls anyone.
Attachments: let the brochure carry the detail
The most common reason messages run long is that they are doing a brochure’s job. Specs, menus, schedules, price lists - all of it belongs in the attachment, delivered natively in the chat:
- PDFs arrive as documents (catalogs, rate cards, menus), up to 2 MB.
- Images arrive as photos, re-encoded per recipient so every delivery is slightly unique - which is a deliverability feature, not a quirk.
- Per-recipient files come from a media column in your CSV, so a customer’s own invoice or brochure variant can ride their own row.
The rule that ties text and attachment together: the message sells the opening; the attachment answers the questions. “The full menu is attached” is a complete sentence - and a complete campaign.
Personalization past the first name
{name} is the floor, and it is table stakes - messages that stop there are one upgrade behind your competitors. The stack above it:
- Context variables. Your CSV columns become variables, so the message can reference the city, the plan, the course, or the product the contact actually has.
- Per-row copy. A message column in the CSV overrides the campaign default, which is how a VIP and a standard customer get genuinely different offers in one send.
- Spintax texture. Even within one segment, spintax varies the phrasing so no two messages read as copies.
The personalization pillar is the complete system behind these layers, with the data each one needs.
Segment for meaning first, personalize for recognition second, spin for texture third - in that order, because a relevant message with light personalization outperforms a deeply personalized irrelevant one.
The opt-out line
Every marketing message ends with the exit, and the standard form is three words: “(Reply STOP to opt out.)” That is enough, because the handling is automatic: a reply like STOP, unsubscribe, or remove me suppresses the contact across every connected number and cancels anything queued for them, on the spot.
The exit line is not compliance theater - it is the reason your messages get the benefit of the doubt. It is also the shape data protection law converged on: the GDPR requires that withdrawing consent be as easy as giving it, and a STOP reply is exactly that. A reader who knows leaving is one word away reads the offer as an offer, not a trap. Easy exits keep audiences; hard exits convert them into block reports, and blocks are the signal no number survives.
Write tight, spin the wording, send at a civilized hour from infrastructure that is yours - that is the whole craft. The playbook puts this chapter back in the full system whenever you want the wider view.