SMS marketing works for Kenyan retailers when it goes only to customers who opted in, runs on a promotional sender ID between 08:00 and 18:00 on Safaricom, carries a free opt-out in every message and makes the offer easy to act on with an M-Pesa till or paybill. Keep order confirmations, receipts and delivery updates on a separate transactional sender ID, where they can go out at any hour without an opt-out line.
Last reviewed: 27 October 2026
This is the practical playbook for supermarkets, shops, pharmacies selling over-the-counter goods, fashion and electronics stores and online sellers. For the full legal analysis, including ODPC decisions, read our companion article on SMS marketing law in Kenya. Here we focus on running campaigns: building an opted-in list, writing offers that fit one SMS, timing and measuring results.
The rules in brief
- Opt-in. Regulation 17(4) of the Kenya Information and Communications (Consumer Protection) Regulations, 2010 says all automated direct-marketing schemes in Kenya must be based on an opt-in principle. Regulation 17(3) allows marketing similar products to existing customers if they were given a free, simple chance to object when their details were collected and in each message.
- Data protection. The Data Protection (General) Regulations, 2021 treat marketing SMS as direct marketing. As summarised by Afriwise, regulation 15 lets you use personal data for it when it was collected from the person, they were told it would be used for marketing and an opt-out is provided; regulations 16 and 17 require that opt-out to be free, simple and accessible, such as a single-word reply or a link. The ODPC lists direct marketing among activities that must register.
- Safaricom's promotional window. This is operator practice, not statute. Safaricom's 2020 notice says promotional messages must include opt-out instructions and may only be sent between 08:00 and 18:00; transactional messages are not time-restricted. One sender ID should not carry both.
- Customers can block you. Safaricom subscribers can stop all promotional messages by dialling *456*9*5#. A customer who does this stops seeing every brand's offers, not only yours, so a careless campaign has a cost beyond one opt-out.
The Nation has reported a Communications Authority proposal to stop promotional texts after 19:00. Safaricom's own 18:00 cut-off is already earlier, so scheduling within 08:00 to 18:00 satisfies both.
Building an opted-in list
A Kenyan retailer's best list comes from its own customers. Collect consent at every point of contact, in clear words, and keep a record you could show the ODPC.
| Where you collect | How to word it | What to record |
|---|---|---|
| Till or counter | "Would you like SMS offers from Nyota Mart? You can stop any time." Tick box on a loyalty form | Date, branch, staff ID, form reference |
| Online checkout | Unticked box: "Send me offers by SMS", separate from order updates | Timestamp, order number, wording shown |
| Two-way short code | "SMS JOIN to 2xxxx for weekly offers" on shelf talkers and receipts | Inbound message log, keyword, time |
| Loyalty app or USSD | A clear opt-in screen, not buried in terms | Account ID, version of terms accepted |
Avoid bought lists, numbers scraped from social media or WhatsApp groups, and numbers taken from M-Pesa payment records without consent. A customer paying your till has not agreed to marketing just by paying.
Writing offers that fit one SMS
A good retail SMS has five parts, in this order: brand name, the offer, where and until when, how to pay, and the opt-out. Fitting all five into 160 characters takes practice.
- Lead with the brand. Customers decide in a second whether a text is worth reading. "Nyota Mart:" at the start answers "who is this?"
- One offer per message. Three products and two branches will not fit, and nobody remembers them anyway.
- Prices in KES, no decimals. Write "KES" and a whole number; decimals and "Ksh." variants waste characters.
- Make M-Pesa the call to action. A till number for walk-in purchases, a paybill and account for orders, or a short link to a checkout page.
- Avoid characters that break GSM-7. Emoji, curly quotes and some symbols switch the message to Unicode, which cuts a segment to 70 characters and can double or triple the cost.
- Use the opt-out that fits. On a one-way sender ID, customers cannot reply STOP. Use *456*9*5# for Safaricom lines, plus a short link or a two-way keyword for others.
Template set for Kenyan retailers
Nyota Mart is a fictional retailer. Promotional messages go on the promotional sender ID; transactional ones on the transactional ID.
| Purpose | Type | Message |
|---|---|---|
| Weekend offer | Promotional | Nyota Mart: Weekend deal! 2kg sugar + 2L cooking oil for KES 650 at all branches, Fri-Sun. Lipa na M-Pesa Till 5xxxxx. Stop: *456*9*5# |
| Restock alert | Promotional | Nyota Mart: The school shoes you asked about are back in stock at Thika Road branch. Offer ends Sat. Stop: *456*9*5# |
| Loyalty points | Promotional | Nyota Mart: Hi Akinyi, you have 1,240 points (KES 124). Redeem at any till before 31/12. Stop: *456*9*5# |
| Order confirmation | Transactional | Nyota Mart: Order NM20871 confirmed. Total KES 3,480 paid by M-Pesa. Delivery Thu 10am-1pm. Track: nyotamart.example/t/20871 |
| Out for delivery | Transactional | Nyota Mart: Your order NM20871 is out for delivery. Rider Peter, 0700000000. Please have your order code 4417 ready. |
| Payment received | Transactional | Nyota Mart: We received KES 3,480 from 0712xxxxxx for order NM20871. M-Pesa ref SKL4XXXX. Thank you. |
| Kiswahili offer | Promotional | Nyota Mart: Ofa ya wikendi! Unga wa ngano 2kg kwa bei nafuu, matawi yote, Ijumaa-Jumapili. Kujiondoa: *456*9*5# |
Timing and frequency
- Days. Many retailers time offers for month-end, when salaries are paid, and for the days before a weekend or public holiday. Test your own timing and compare results.
- Hours. Schedule between 09:00 and 17:00 to keep a margin inside Safaricom's 08:00 to 18:00 window, allowing for queueing on large sends.
- Frequency. Once a week is a sensible ceiling for most retailers. Watch opt-outs after each campaign; a jump means the message or the frequency is wrong.
- Segments. Send baby products to customers who bought them, not to everyone. Smaller, relevant sends cost less and produce fewer opt-outs.
Sending and measuring campaigns
In the eSMS dashboard, import your opted-in list from CSV or Excel, build the message with merge fields such as name and points, schedule it inside the window and require a manager's approval before it goes. Opt-outs you add to the opt-out list are blocked on every later campaign automatically. For developers, the same campaign is one call to the bulk endpoint:
curl -X POST https://sms.esmsafrica.io/api/messages/send-bulk \
-H "Authorization: Bearer esms_live_your_key" \
-H "Content-Type: application/json" \
-d '{
"sender_id": "NYOTAOFFER",
"text": "Nyota Mart: Hi {{name}}, you have {{points}} points. Redeem at any till before 31/12. Stop: *456*9*5#",
"recipients": [
{"to": "+254712000001", "name": "Akinyi", "vars": {"points": "1,240"}},
{"to": "+254733000002", "name": "Kamau", "vars": {"points": "860"}}
]
}'
Measure with tools you already have. Use a short link with click tracking for online offers, a promo code at the till for in-store offers, and compare M-Pesa till receipts on campaign days against similar days without a send. Delivery reports show how many messages reached handsets; clicks and till codes show whether they worked. See the HTTP API docs and the bulk SMS in Kenya page.
What it costs
Campaigns are pay as you go from KES 1.08 (about $0.0083) per SMS on the basic tier. Retailers sending regularly to large lists can move to business rates at KES 0.9. There is no monthly minimum, and you can top up by card or M-Pesa. You need two registered sender IDs, one promotional and one transactional; Safaricom, Airtel and Telkom registration fees and steps are on the Kenya sender ID page.
Retail SMS checklist
- Register with the ODPC; direct marketing is a mandatory registration activity.
- Collect opt-in consent with clear wording and keep the record.
- Register separate promotional and transactional sender IDs.
- Name your brand at the start of every message.
- Include an opt-out that works for each network in every promotion.
- Schedule promotions between 08:00 and 18:00.
- Keep to plain GSM characters and one offer per message.
- Never mix offers into receipts or delivery updates.
- Track opt-outs and results after every campaign.
Frequently asked questions
What time can retailers send promotional SMS in Kenya?
Safaricom's 2020 notice to bulk SMS providers allows promotional messages only between 08:00 and 18:00, with opt-out instructions in each one. This is an operator rule rather than a statute. The Nation has reported a CA proposal to stop promotional texts after 19:00; check the CA for whether any such rule is final.
Can we send offers to customers who bought from us before?
Regulation 17(3) of the CA Consumer Protection Regulations allows marketing your own similar products to customers whose details you obtained in a sale, provided you offered a free, simple way to object when collecting the details and in every message. The data protection regulations still require an opt-out and respect for objections, so explicit opt-in remains the safer route.
Is *456*9*5# enough as an opt-out?
It works for Safaricom subscribers, who make up most Kenyan mobile lines. Customers on Airtel or Telkom need another route, such as a short link to a preference page or a STOP keyword on a two-way short code. Add every opt-out you receive to your eSMS opt-out list so it applies across all campaigns.
Do order and delivery updates need consent?
Order confirmations, payment receipts and delivery updates are transactional: the customer needs them to complete the purchase. They do not need marketing consent or an opt-out, but they should go on a transactional sender ID and should not carry offers.
Sources
- Communications Authority - Consumer Protection Regulations, 2010 (PDF)
- Afriwise - direct marketing under Kenyan data protection law, with ODPC decisions
- KICTANet - Safaricom notice on promotional and transactional sender IDs (2020)
- Khusoko - Safaricom USSD code to stop promotional messages (2021)
- Nation - CA proposal to stop promotional texts after 7pm (draft, as reported)
- ODPC - Guidance Note on Registration of Data Controllers and Data Processors (PDF)
See more retail and e-commerce message flows on our retail SMS page for Kenya, read promotional vs transactional sender IDs on Safaricom and the M-Pesa receipt tutorial, and check pricing. Then create a free eSMS Africa account and send your first campaign to a test group.


