Reach every parent, member and customer on MTN and Airtel in minutes. Top up with Mobile Money and pay UGX 25 per SMS, with no contract and no monthly fee.
Reminder: your appointment is tomorrow at 10am. Reply if you need to reschedule.
From sign-up to sent in under ten minutes.
01
Sign up
Create your workspace in a few minutes.
02
Top up with Mobile Money
Pay from MTN MoMo or Airtel Money. Credit never expires.
03
Upload contacts
Import Excel or CSV. Headings like Name and Balance become placeholders.
04
Send and track
Send now or schedule. Watch delivery by network as it happens.
Know who got it.
Delivered, pending and failed for every number, split by network. Failed messages are refunded to your wallet automatically, and every report exports to Excel.
Fees reminder · Term 31,250 recipients
Phone
Network
Status
0772 •••456
MTN
Delivered
0701 •••567
Airtel
Delivered
0758 •••210
Airtel
Pending
0789 •••033
MTN
Failed · refunded
One message, a thousand different people.
Drop in the spreadsheet you already keep. Every column becomes a placeholder, so each person gets their own name, balance and due date.
name
phone
balance
Nakato
0772123456
150,000
Okello
0701234567
80,000
Achieng
0758000210
45,500
↓
Dear {name}, your balance is UGX {balance}.
Coming soon
Branded sender IDs
Your own name, like NORTHRIDGE, in place of the sender. Today, messages arrive from SMSUG. Registration with MTN and Airtel is on the way.
import os, requests
r = requests.post(
"https://app.sms.ug/api/sms",
headers={"Authorization": f"Bearer {os.environ['SMSUG_KEY']}"},
json={
"message": "Dear {name}, fees are due on 30 Oct.",
"contacts": ["0772123456", "0701234567"],
},
)
print(r.json()["cost"])
const res = await fetch("https://app.sms.ug/api/sms", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.SMSUG_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
message: "Dear {name}, fees are due on 30 Oct.",
contacts: ["0772123456", "0701234567"],
}),
});
console.log((await res.json()).cost);
What customers say.
Fee collection used to take us three weeks of phone calls. Now the bursar sends one personalised SMS to every parent on Monday morning, and most balances are cleared by Friday.
Loan reminders go out automatically every month. Late repayments dropped noticeably in the first quarter.
DODaniel OkelloManager, Kibo SACCO, Gulu
We top up with MoMo in a minute. No invoices, no waiting for someone to load credit.
SASarah AchiengOwner, Riverside Pharmacy, Mbarara
Questions, answered.
Still unsure? Email support and we will get back to you.
How much does one SMS cost?
UGX 25 on every network. A plain-text SMS holds 160 characters. Longer messages are sent as joined parts of 153 characters, and each part counts as one SMS. Emoji or special characters switch to 70 characters per SMS. The app shows the count and cost before you send.
How do I pay?
Top up your wallet with MTN Mobile Money or Airtel Money from inside the app. Credit never expires and there is no monthly fee.
Which networks do you reach?
MTN, Airtel and other Ugandan networks, all at the same rate. Reports show delivery split by network.
What name will my messages come from?
Today, messages arrive from SMSUG. Branded sender IDs with your own name are coming soon; join the waitlist and we will let you know.
Can each person get their own message?
Yes. Import an Excel or CSV file with headings such as Name, Phone and Balance, then use them as {name} and {balance}. Each person receives their own details.
What happens if a message fails?
Messages the network rejects are refunded to your wallet automatically. You can see every failed number in the delivery report.
How do you handle privacy and opt-outs?
Every account keeps an opt-out list. Numbers on it are skipped and not charged, which helps you respect consent under the Data Protection and Privacy Act.
Do you have an API?
Yes. A JSON API lets your system send messages, check balance and delivery, and receive delivery reports by webhook. See the API docs.