Back to blog
Use cases15 min read

Logistics and Delivery SMS in Ghana: Keep Customers Updated Without Call-Center Chaos

How couriers, last-mile teams, and e-commerce brands use SMS for pickup, out-for-delivery, failed attempt, and COD — with copy you can steal and a SplitSMS setup that scales.

Ghana customers will call if they do not know where a parcel is. Each call costs more than an SMS. The brands that feel “premium” in last-mile are often just consistent: order confirmed, packed, out for delivery, delivered, or we missed you — each as a short text from a known Sender ID.

This playbook is for courier startups, shopify-style stores, pharmacies doing dispatch, and marketplaces that still coordinate riders on WhatsApp. WhatsApp is fine for the rider group. The customer should get SMS because it does not depend on them being in your broadcast list.

Map the journey to four or five texts, not twelve

Too many texts and people mute you. A solid set: (1) order received, (2) out for delivery with a window, (3) delivered or we missed you with a next step. Optional: delay if the rider is stuck in Accra traffic longer than the window you promised.

Do not SMS every warehouse scan. That is noise. SMS the moments the customer would have called about.

Copy that works on the road

Out for delivery: {brand}: Your order {id} is out for delivery in Accra today 2–5pm. Rider will call. Help: 055…. Missed: {brand}: We missed you for order {id}. Please call {phone} to reschedule today. Keep under 160 characters when you can so one credit covers it.

Include the order id. Without it, your support line becomes a guessing game. Include a human phone or WhatsApp for exceptions — SMS should reduce calls, not eliminate a contact path when the gate is locked.

Hook SMS to the system that already knows the status

If orders live in WooCommerce, use the SplitSMS WordPress plugin for paid / processing / completed — plus a custom status if you added “out for delivery.” If orders live in your own Node or Laravel app, fire SplitSMS send on status change with the same Sender ID you use for OTP.

Riders should not be responsible for remembering to text. If the status is in software, the SMS should be in software. Manual “please SMS the customer” in a WhatsApp group does not survive a 200-order Saturday.

Failed delivery is where SMS earns its keep

The expensive failure is a second trip. A same-day “we came, nobody answered, here is a number” text recovers a surprising share of parcels. Pair it with a Smart Form link to pick a new window if you do not want the phone to ring.

Log the SMS next to the attempt in your ops tool. When a customer claims “nobody came,” you have a timestamp and a delivered SMS. That is not aggression; it is how you train riders and customers at the same time.

Cash on delivery and MoMo

If you collect cash or MoMo on delivery, SMS the amount before the rider arrives: Please have GHS {amount} ready for order {id}. Surprise amounts cause refused parcels. If they already paid, say so — Paid. Rider bringing your order {id} — so they do not pay twice.

Numbers, Sender IDs, and trust

Use an approved brand Sender ID. A random number looks like a scam, especially when the text mentions money. Register the ID before you promise customers “we will text you.”

Store the customer phone from checkout in international format. Delivery to 024… vs 23324… should be a solved problem in your order table, not a debate at 7pm.

Cost for a real volume day

Three one-segment SMS per order × GHS 0.029 is under 9 pesewas of SMS per parcel in Ghana. One avoided failed trip pays for hundreds of texts. If you send six status texts per order, cut it down — the extra two are not “engagement,” they are noise.

Watch the wallet on peak days. SplitSMS low-balance alerts exist so Friday promo plus Saturday dispatch does not silently stop mid-route.

What to implement this week

List your order statuses. Assign at most five to SMS. Write templates with {id} and {amount}. Connect WooCommerce or your API. Test on all three major networks. Then turn it on for live orders, not for a fake staging customer only you remember.

Signup, Sender ID, and a test credit run are enough to prove the idea. Expand to Smart Forms for reschedule links once the basic status texts are boringly reliable.

Riders, dispatchers, and who owns the template

If riders can edit the SMS wording from a phone, you will get typos, extra charges (added emoji), and the occasional angry paragraph. Keep templates in the office system. Riders update status; software sends the text.

Give dispatch a SplitSMS login only if they need to send a one-off exception. Most teams never need that. Exceptions can be a saved “missed delivery” campaign to a one-number group.

Multi-drop days and rate limits

A 400-drop Saturday is 400–1,200 SMS if you send two or three per order. That is still a small wallet hit in Ghana. The failure mode is not cost — it is a script that loops on “pending” and resends. Idempotency on order-id + status is mandatory in your code.

SplitSMS will send what you POST. Your dispatch app must not POST “out for delivery” twice because the rider toggled the button. That is a product bug, not an SMS bug.

Try SplitSMS free

Send bulk SMS, OTP, and campaigns — 5 free credits on signup.

Newsletter

Subscribe to our newsletter

Delivery tips, SmartForms, and product updates from SplitSMS. No daily spam.

Occasional updates only. Unsubscribe any time.