Malawi SMS Guide: Compliance, Best Practices & API Integration 2025
Complete guide to sending SMS in Malawi with TNM and Airtel. Learn compliance requirements, phone number formats, MACRA regulations, and API integration with Twilio, Sinch, and MessageBird.
Market Conditions: Malawi's mobile market is a duopoly dominated by two major operators: Telekom Networks Malawi (TNM) with 44% market share and Airtel Malawi with 56% market share (2024). The market serves approximately 10 million SIM cards with a person penetration rate of 42%. A third operator, Malcel, received a license in August 2022 and planned to launch commercial operations in October 2023 with a $280 million investment in network infrastructure and mobile money services, though commercial launch status remains unconfirmed as of 2024.
Cost Comparison:
Operator
Market Share
Network Coverage
Estimated SMS Cost
TNM
44%
88%+ nationwide (2G/3G/4G/5G)
Varies by volume and provider
Airtel
56%
Nationwide (2G/3G/4G)
Varies by volume and provider
Malcel
Pending
Planned nationwide
Not yet operational
TNM's network covers over 88% of the country through 2G (GSM 900/1800 MHz), 3G (UMTS B1 2100 MHz, B8 900 MHz), and 4G LTE (B41 2500 MHz with LTE-A). TNM officially launched its 5G network in Lilongwe in July 2025, with coverage areas including BICC, Area 9, Kang'ombe, Area 47 ABC, Area 49 Mvama, Kamuzu Central Hospital, Kanengo, Capital Hill, BNS Stadium, and the corridor from Kanengo to Area 2. Following successful trials in 2023 in both Lilongwe and Blantyre, TNM plans to gradually expand 5G coverage to more areas across the country. In 2025, TNM completed a K16 billion nationwide upgrade of 650+ sites, extending coverage to 400,000 additional users. SMS remains the most reliable messaging solution due to its universal accessibility and network coverage, particularly in rural regions where OTT (Over-The-Top) messaging apps have limited reach.
How to Send SMS in Malawi: Key Features and Capabilities
Malawi supports basic SMS features including concatenated messaging and alphanumeric sender IDs, though two-way messaging capabilities are limited.
Two-way SMS Support
Two-way SMS is not supported in Malawi through most providers. Your business cannot receive replies to its messages through standard SMS channels.
Alternative Solutions:
Use web-based response forms with SMS-provided links
Implement WhatsApp Business API for bidirectional messaging
Set up dedicated customer service phone lines for voice responses
Use email response options in your SMS content
Concatenated Messages (Segmented SMS)
Support: Yes, concatenation is supported for most sender ID types.
Message length rules:
GSM-7 encoding: 160 characters per segment
Unicode encoding: 70 characters per segment
Encoding considerations: Messages use GSM-7 encoding for Latin alphabet and UTF-8 for local languages like Chichewa. Unicode messages are limited to 70 characters per segment.
Cost Impact: Each segment counts as a separate message. A 320-character message costs 2× a single message, while a 161-character message costs the same as a 320-character message (both require 2 segments).
Character Count Examples:
Message Length
Encoding
Segments
Cost Multiplier
1 – 160 chars
GSM-7
1
1×
161 – 306 chars
GSM-7
2
2×
1 – 70 chars
Unicode
1
1×
71 – 134 chars
Unicode
2
2×
MMS Support
MMS messages are not directly supported in Malawi. Instead, MMS content is automatically converted to SMS with an embedded URL link where recipients can view the multimedia content. This ensures compatibility across all devices while still enabling rich media sharing.
MMS-to-SMS Conversion Process:
You send an MMS through your provider's API
The provider uploads images/media to a secure hosting server
The system generates a short URL pointing to the hosted content
Recipients receive an SMS with your message text and the URL
Recipients click the link to view the multimedia content in their browser
Technical Requirements:
Most providers handle URL generation and hosting automatically
URLs typically expire after 30 – 90 days (varies by provider)
Hosted content must comply with local content regulations
No additional configuration required beyond standard MMS API calls
Recipient Phone Number Compatibility
Number Portability
Mobile Number Portability (MNP) was implemented in Malawi in 2019 and became operational in January 2020, allowing you to switch operators while keeping your existing number. MACRA (Malawi Communications Regulatory Authority) oversees the MNP process, which typically takes 24 – 48 hours to complete. The implementation of MNP provides a positive example for other nations, as MACRA has taken care to fully understand the implementation journey and lean on global best practices in MNP service design. Real-time checks against the MACRA database are crucial to ensure accurate operator identification when sending SMS messages.
MNP Lookup Implementation:
Most SMS providers automatically perform MNP lookups before routing messages. If you need to verify operator information manually:
TypeScript
// Example using Home Location Register (HLR) lookupimport { lookupNumber } from'your-sms-provider-sdk';
asyncfunctionverifyOperator(phoneNumber: string) {
const result = awaitlookupNumber(phoneNumber);
return {
operator: result.carrier.name, // "TNM" or "Airtel"originalOperator: result.originalCarrier,
isPorted: result.ported,
numberType: result.type// "mobile" or "landline"
};
}
Practical MNP Considerations:
Always use current operator information for routing, not historical data
Refresh operator lookups regularly (at least monthly) for active contact lists
Most major SMS providers (Twilio, Sinch, MessageBird) handle MNP automatically
Porting takes 24 – 48 hours, during which SMS delivery may be unreliable
Malawi Phone Number Format:
Country code: +265
Total digits: 9 (after country code)
Mobile format: 0 + Operator Prefix + Subscriber Number (e.g., 0881234567 for TNM, 0991234567 for Airtel)
International format: +265 followed by 9 digits (replace leading 0)
No area codes: Malawi does not use geographic area codes
You cannot send SMS to landline numbers in Malawi. Attempts to send messages to landline numbers will result in delivery failures, typically generating a 400 response error (code 21614) through SMS APIs, with no charges applied to your account.
Landline Number Identification:
Landline numbers in Malawi use different prefixes from mobile numbers. Landline prefixes include:
01 – Fixed-line numbers (Blantyre region)
05 – Fixed-line numbers (other regions)
Always validate phone numbers before sending to avoid unnecessary API calls and failed deliveries.
Malawi SMS Compliance and Regulatory Guidelines
The Malawi Communications Regulatory Authority (MACRA) oversees SMS communications under the Electronic Transactions and Cyber Security Act of 2016 and the Data Protection Act of 2024. Comply with MACRA's guidelines and consumer protection regulations when conducting SMS marketing or communications campaigns.
Key Regulatory Framework:
Electronic Transactions and Cyber Security Act (2016): Prohibits unsolicited electronic communications used for illegal trade or purposes. Violations carry penalties of K2,000,000 fine and imprisonment for 5 years.
Data Protection Act (2024): Enacted in February 2024 (Act No. 3 of 2024), this law designates MACRA as the data protection authority. The Act grants a two-year transition period for ordinary data controllers and processors, while those classified as of major importance have only six months to comply. Key requirements include maintaining records of processing activities, conducting Data Protection Impact Assessments (DPIAs) for high-risk processing, and notifying MACRA within 72 hours of a data breach. The Act applies to any organization that processes personal data within Malawi or targets individuals in Malawi.
Communications (Consumer Protection) Regulations (2019): Establishes consumer rights and provider obligations.
"Major Importance" Definition: Organizations are classified as of major importance if they:
Process personal data of more than 50,000 individuals annually
Operate in critical infrastructure sectors (telecommunications, banking, healthcare)
Process sensitive personal data on a large scale
Are public authorities processing personal data
Data Protection Act Compliance Checklist:
Appoint a Data Protection Officer (if classified as major importance)
Maintain detailed records of all data processing activities
Conduct DPIAs for high-risk SMS marketing activities
Implement data breach notification procedures (72-hour requirement)
Establish consent collection and management systems
Create data retention and deletion policies
Implement security measures for stored contact data
Draft privacy notices explaining SMS data usage
Set up cross-border data transfer safeguards (if applicable)
Complete registration with MACRA as data controller
Consent and Opt-In
Explicit Consent Requirements:
Obtain written or digital opt-in confirmation before sending any marketing messages
Include timestamp, method of collection, and scope of permission in consent records
Store documentation securely with regular backups
Ensure consent is specific to the type of messages you send
Consent Record Retention: Maintain consent records for a minimum of 7 years after the last communication with the recipient, or longer if required by your industry regulations.
Consent Form Example:
Code
I consent to receive SMS messages from [Company Name] at the mobile
number I provided. I understand that:
- Message frequency may vary (maximum 4 – 5 messages per month)
- Message and data rates may apply
- I can opt out at any time by replying STOP
- My phone number will be stored securely and not shared with third parties
Signature: ________________ Date: __________
Phone Number: +265 ___ ___ ____
HELP/STOP and Other Commands
Include clear opt-out instructions in all marketing messages
Support standard keywords like "STOP", "END", and "CANCEL"
Honor both English and Chichewa language opt-out instructions
Process opt-out requests immediately
Send confirmation of opt-out to the user
Chichewa Opt-Out Keywords: Recognize these Chichewa-language opt-out terms:
SIYA (stop)
YAMBANI (used for opt-in/restart)
IMALIZA (finish/end)
LEKA (leave/stop)
Complete Keyword List:
English
Chichewa
Action
STOP, END, CANCEL, UNSUBSCRIBE
SIYA, IMALIZA, LEKA
Opt-out
HELP, INFO
THANDIZO, ZAMBIRI
Send help information
START, YES
YAMBANI, INDE
Opt-in (requires prior consent)
Do Not Call / Do Not Disturb Registries
Malawi does not maintain an official Do Not Call registry. However, you should:
Maintain your own opt-out database
Honor all opt-out requests within 24 hours
Regularly clean contact lists to remove opted-out numbers
Implement a suppression list to prevent accidental messaging to opted-out numbers
Daylight Saving Time: Not observed (timezone remains UTC+2 year-round)
Restrict promotional SMS messages between 8 AM and 5 PM local time (CAT/UTC+2)
Send emergency or service-related messages outside these hours if necessary
Consider cultural and religious observances when planning campaign timing
Major Malawi Holidays to Avoid:
New Year's Day (January 1)
John Chilembwe Day (January 15)
Martyrs' Day (March 3)
Good Friday (variable)
Easter Monday (variable)
Labour Day (May 1)
Kamuzu Day (May 14)
Independence Day (July 6)
Mother's Day (October 15)
Christmas Day (December 25)
Boxing Day (December 26)
Also avoid sending promotional messages during Ramadan (dates vary annually) if targeting Muslim audiences.
Emergency Message Examples:
Account security alerts (e.g., "Unusual login detected on your account")
Service outage notifications (e.g., "Your service will be interrupted from 2 AM – 4 AM for maintenance")
Payment due reminders with immediate deadlines
Critical health or safety information
Fraud alerts and verification codes (OTP/2FA)
Choosing SMS Sender IDs and Phone Number Options in Malawi
Alphanumeric Sender ID
Operator network capability: Supported
Registration requirements: Pre-registration not required
Sender ID preservation: Yes, sender IDs are preserved as specified
Character Limits and Restrictions:
Maximum length: 11 characters
Allowed characters: A-Z, a-z, 0-9, spaces
No special characters or punctuation
Must start with a letter (not a number)
Case-sensitive (displayed as sent)
Best practices: Avoid generic terms like "InfoSMS", "INFO", "Verify", and "Notify"
Effective vs. Ineffective Sender IDs:
✅ Effective
❌ Ineffective
Reason
BankOfMW
INFO
Too generic, low trust
AirtelMW
12345
All numbers, unclear sender
HealthClub
Verify
Generic, looks like spam
MalawiGov
SMS-Alert
Contains special character
MyShop
a
Too short, unclear
Long Codes
Domestic vs. International:
Domestic long codes not supported
International long codes supported
Sender ID preservation: No, international long codes may be modified by carriers to improve deliverability or comply with local routing requirements.
Provisioning time: Immediate
Use cases: Transactional messages, alerts, and notifications
When to Use Each Option:
Scenario
Recommended Option
Reason
Marketing campaigns
Alphanumeric Sender ID
High brand recognition
Transactional alerts
Alphanumeric Sender ID
Consistent branding
Two-way messaging
Not supported in Malawi
Consider alternatives
International sending
International long code
Cross-border compatibility
High-volume OTP
Alphanumeric Sender ID
Fast delivery, clear branding
Short Codes
Support: Not currently supported in Malawi
Provisioning time: N/A
Use cases: N/A
Restricted SMS Content, Industries, and Use Cases
Restricted Industries and Content:
Gambling and betting services
Adult content or services
Unauthorized financial services
Political campaign messages without proper authorization
Cryptocurrency and investment schemes
Political Message Authorization: Political campaign messages require written authorization from:
The registered political party or candidate
MACRA (for bulk SMS campaigns exceeding 1,000 messages per day)
Documentation must include campaign registration details and sender identification
Penalties for Sending Restricted Content:
First offense: Warning and message blocking
Second offense: K500,000 – K1,000,000 fine
Repeated violations: K2,000,000 fine and up to 5 years imprisonment (under Electronic Transactions and Cyber Security Act)
Account suspension or permanent ban from SMS providers
Possible civil liability for damages
Content Filtering
Carrier Filtering Rules:
Messages containing certain keywords may be blocked
Use URLs from approved domains only
Ensure message content does not violate local regulations
Common Blocked Keywords (indicative list):
Explicit sexual content terms
Gambling-related terms (bet, casino, jackpot, lottery) without authorization
Cryptocurrency terms (Bitcoin, crypto, trading, invest) for promotional content
Submit domain registration request to your SMS provider
Provide proof of domain ownership (DNS records or SSL certificate)
Demonstrate legitimate business purpose
Allow 3 – 5 business days for approval
Use only approved short URLs (avoid generic link shorteners)
Tips to Avoid Blocking:
Avoid excessive punctuation (more than one exclamation mark or question mark)
Use clear, straightforward language
Include your company name in sender ID
Maintain consistent sending patterns
"Excessive" Punctuation Definition:
❌ More than 1 exclamation mark (e.g., "Buy now!!!")
❌ Multiple question marks (e.g., "Are you interested???")
❌ All caps messages (e.g., "BUY NOW GET 50% OFF")
❌ Repeated special characters (e.g., "SALE")
✅ Single, appropriate punctuation (e.g., "Limited offer. Buy now!")
Best Practices for Sending SMS in Malawi
Messaging Strategy
Keep messages under 160 characters when possible
Include clear call-to-action
Use personalization tokens thoughtfully
Maintain consistent brand voice
Effective Message Templates:
Code
Example 1 – Transactional:
"Hi [FirstName], your payment of K[Amount] was received.
Receipt: [ShortURL]. Thank you for your business! – [CompanyName]"
Example 2 – Promotional:
"[FirstName], get 20% off your next purchase at [CompanyName].
Show this SMS in-store by [Date]. Shop now: [URL]"
Example 3 – Reminder:
"Reminder: Your appointment with [CompanyName] is tomorrow at [Time].
Reply CONFIRM or call 0888123456. – [CompanyName]"
Personalization Token Guidelines:
Use only tokens you have verified data for (empty tokens look unprofessional)
Limit to 2 – 3 tokens per message to maintain readability
What phone number format do I need for sending SMS to Malawi?
Use the E.164 international format: +265 followed by 9 digits. For mobile numbers, the format is +265 plus the operator prefix (77 or 88 for TNM, 88 or 99 for Airtel) and subscriber number. For example: +265881234567 (TNM) or +265991234567 (Airtel). Malawi does not use geographic area codes.
What are the SMS compliance requirements in Malawi?
You must comply with MACRA regulations under three key acts: the Electronic Transactions and Cyber Security Act (2016), Data Protection Act (2024), and Communications (Consumer Protection) Regulations (2019). Obtain written or digital opt-in consent before sending marketing messages, include opt-out instructions, and respect time restrictions (send only between 8 AM – 5 PM CAT/UTC+2). Violations of the Electronic Transactions Act carry penalties of K2,000,000 fine and 5 years imprisonment.
Can I use mobile number portability (MNP) when sending SMS in Malawi?
Yes, Mobile Number Portability has been operational in Malawi since January 2020. MACRA oversees the MNP process, which typically takes 24 – 48 hours to complete. Most major SMS providers (Twilio, Sinch, MessageBird) automatically perform MNP lookups to ensure messages are routed to the correct operator. Always use current operator information rather than relying on historical data, as numbers can be ported between TNM and Airtel.
Which mobile operators support SMS in Malawi?
Malawi has two major operators: TNM (Telekom Networks Malawi) with 44% market share and Airtel Malawi with 56% market share (2024). TNM covers over 88% of the country with 2G, 3G, 4G LTE, and 5G networks (5G launched July 2025 in Lilongwe). A third operator, Malcel, received a license in 2022 and is preparing to enter the market with a $280 million investment. Test your SMS campaigns across both TNM and Airtel networks to ensure optimal delivery.
What SMS features are supported in Malawi?
Malawi supports concatenated messages (160 characters per segment with GSM-7 encoding, 70 characters for Unicode), alphanumeric sender IDs without pre-registration (max 11 characters), and international long codes. However, two-way SMS, domestic long codes, short codes, and direct MMS are not supported. MMS content is automatically converted to SMS with an embedded URL link.
What are the SMS API rate limits for Malawi?
Rate limits vary by provider and service plan. Twilio limits depend on account type (check your console), Sinch uses service plan-based limits with FIFO queuing (10-recipient batch counts as 10 messages), and MessageBird (now Bird) varies by account configuration. Implement exponential backoff for retries, use message queuing systems like Redis or RabbitMQ, and batch messages in groups of 50 – 100 for optimal throughput.
What timezone should I use for SMS sending in Malawi?
Malawi uses Central Africa Time (CAT), which is UTC+2 year-round with no daylight saving time adjustments. Restrict promotional SMS messages to between 8 AM and 5 PM CAT (UTC+2). Emergency or service-related messages (security alerts, OTP codes, critical notifications) may be sent outside these hours if necessary. Always consider cultural and religious observances, including major holidays and Ramadan, when scheduling campaigns.
How do I implement SMS in Malawi using Twilio, Sinch, or MessageBird?
All three providers support Malawi SMS. Use Twilio's Node.js SDK with proper +265 number formatting and statusCallback for delivery tracking. Sinch requires the africa-1 region configuration with service plan-based rate limits and delivery report parsing. MessageBird (now Bird) uses alphanumeric sender IDs with delivery report webhooks. Implement proper error handling for invalid phone numbers, network timeouts, carrier rejections, and rate limit exceeded scenarios.
How much does it cost to send SMS in Malawi?
SMS costs vary by provider, volume, and service plan. Typical ranges are $0.03 – $0.10 per message segment. Remember that concatenated messages count as multiple segments (e.g., a 320-character message costs 2× a single message). Contact your SMS provider for volume discounts. Most providers offer tiered pricing: higher volumes receive lower per-message rates. Factor in additional costs for delivery reports, MNP lookups, and number validation services.
How long does SMS delivery take in Malawi?
Typical SMS delivery times range from 5 – 30 seconds under normal network conditions. Factors affecting delivery time include:
Use a reputable SMS API provider like Twilio, Sinch, or MessageBird, ensuring correct number formatting (+265) and alphanumeric sender ID. Implement proper error handling and retry mechanisms for optimal delivery rates and monitor performance across both major Malawian carriers (TNM and Airtel).
Malawi's mobile market is dominated by TNM and Airtel, with SMS being a primary communication method. While OTT apps are growing, SMS remains crucial due to broader coverage, especially in rural areas where TNM covers over 88% of the country through 2G, 3G, and 4G services.
Two-way SMS is not fully supported by most providers, meaning businesses typically cannot receive replies through standard SMS channels. This limitation affects interactive messaging services.
Promotional messages are allowed between 8 AM and 5 PM local time (UTC+2). Avoid sending outside these hours unless it's an emergency or essential service-related communication. Consider local holidays and events when scheduling campaigns.
Short codes are not currently supported in Malawi. Consider using alphanumeric sender IDs or international long codes for your SMS campaigns, as these are the available options.
Standard SMS messages use GSM-7 encoding with 160 characters per segment. Unicode (UTF-8) messages, often needed for local languages like Chichewa, are limited to 70 characters per segment. Concatenated messaging is supported.
Obtain explicit consent (written or digital) before sending marketing messages. Include clear opt-out instructions (STOP, END, CANCEL) in both English and Chichewa. Respect messaging time restrictions and adhere to content guidelines set by MACRA.
The Malawi Communications Regulatory Authority (MACRA) regulates SMS communications under the Electronic Transactions and Cyber Security Act of 2016. All businesses must comply with MACRA's guidelines for SMS marketing and communications.
Process opt-out requests promptly (within 24 hours) and maintain a centralized opt-out database. Send confirmation of the opt-out to the user and regularly audit your processes to ensure compliance.
Gambling, adult content, unauthorized financial services, political campaign messages without proper authorization, and cryptocurrency or investment schemes are restricted. Content filtering is also in place for certain keywords and unapproved URLs.
Keep messages concise (under 160 characters), personalize content, and use a clear call to action. Send a maximum of 4-5 messages per recipient monthly, localizing content in both English and Chichewa.
Alphanumeric sender IDs are supported and do not require pre-registration. Avoid generic terms like "InfoSMS" or "Notify" and use your company name for clear identification. Note that sender IDs are preserved.
Typical rate limits are around 50-100 messages per second, depending on the provider (Twilio, Sinch, MessageBird). Implement strategies like message queuing and exponential backoff to manage throughput and avoid exceeding limits.
Common errors include invalid numbers, network timeouts, and carrier rejections. Implement thorough error handling with retry logic for temporary failures, logging errors for analysis, and monitoring delivery rates.
Consult MACRA's official website for regulations and guidelines (www.macra.org.mw). Refer to SMS provider documentation (Twilio, Sinch, MessageBird) for technical implementation details and best practices.
Malawi SMS Market Overview
Market Conditions: Malawi's mobile market is a duopoly dominated by two major operators: Telekom Networks Malawi (TNM) with 44% market share and Airtel Malawi with 56% market share (2024). The market serves approximately 10 million SIM cards with a person penetration rate of 42%. A third operator, Malcel, received a license in August 2022 and planned to launch commercial operations in October 2023 with a $280 million investment in network infrastructure and mobile money services, though commercial launch status remains unconfirmed as of 2024.
Cost Comparison:
TNM's network covers over 88% of the country through 2G (GSM 900/1800 MHz), 3G (UMTS B1 2100 MHz, B8 900 MHz), and 4G LTE (B41 2500 MHz with LTE-A). TNM officially launched its 5G network in Lilongwe in July 2025, with coverage areas including BICC, Area 9, Kang'ombe, Area 47 ABC, Area 49 Mvama, Kamuzu Central Hospital, Kanengo, Capital Hill, BNS Stadium, and the corridor from Kanengo to Area 2. Following successful trials in 2023 in both Lilongwe and Blantyre, TNM plans to gradually expand 5G coverage to more areas across the country. In 2025, TNM completed a K16 billion nationwide upgrade of 650+ sites, extending coverage to 400,000 additional users. SMS remains the most reliable messaging solution due to its universal accessibility and network coverage, particularly in rural regions where OTT (Over-The-Top) messaging apps have limited reach.
How to Send SMS in Malawi: Key Features and Capabilities
Malawi supports basic SMS features including concatenated messaging and alphanumeric sender IDs, though two-way messaging capabilities are limited.
Two-way SMS Support
Two-way SMS is not supported in Malawi through most providers. Your business cannot receive replies to its messages through standard SMS channels.
Alternative Solutions:
Concatenated Messages (Segmented SMS)
Support: Yes, concatenation is supported for most sender ID types.
Message length rules:
Encoding considerations: Messages use GSM-7 encoding for Latin alphabet and UTF-8 for local languages like Chichewa. Unicode messages are limited to 70 characters per segment.
Cost Impact: Each segment counts as a separate message. A 320-character message costs 2× a single message, while a 161-character message costs the same as a 320-character message (both require 2 segments).
Character Count Examples:
MMS Support
MMS messages are not directly supported in Malawi. Instead, MMS content is automatically converted to SMS with an embedded URL link where recipients can view the multimedia content. This ensures compatibility across all devices while still enabling rich media sharing.
MMS-to-SMS Conversion Process:
Technical Requirements:
Recipient Phone Number Compatibility
Number Portability
Mobile Number Portability (MNP) was implemented in Malawi in 2019 and became operational in January 2020, allowing you to switch operators while keeping your existing number. MACRA (Malawi Communications Regulatory Authority) oversees the MNP process, which typically takes 24 – 48 hours to complete. The implementation of MNP provides a positive example for other nations, as MACRA has taken care to fully understand the implementation journey and lean on global best practices in MNP service design. Real-time checks against the MACRA database are crucial to ensure accurate operator identification when sending SMS messages.
MNP Lookup Implementation:
Most SMS providers automatically perform MNP lookups before routing messages. If you need to verify operator information manually:
// Example using Home Location Register (HLR) lookup import { lookupNumber } from 'your-sms-provider-sdk'; async function verifyOperator(phoneNumber: string) { const result = await lookupNumber(phoneNumber); return { operator: result.carrier.name, // "TNM" or "Airtel" originalOperator: result.originalCarrier, isPorted: result.ported, numberType: result.type // "mobile" or "landline" }; }Practical MNP Considerations:
Malawi Phone Number Format:
Complete Operator Prefix List:
Validation Regex Pattern:
// Phone number validation example function isValidMalawiNumber(phoneNumber: string): boolean { const regex = /^(?:\+265|265|0)?([78]8|99)\d{7}$/; return regex.test(phoneNumber); } function formatMalawiNumber(phoneNumber: string): string { // Remove all non-digit characters const cleaned = phoneNumber.replace(/\D/g, ''); // Handle different input formats if (cleaned.startsWith('265')) { return '+' + cleaned; } else if (cleaned.startsWith('0')) { return '+265' + cleaned.slice(1); } else if (cleaned.length === 9) { return '+265' + cleaned; } throw new Error('Invalid Malawi phone number format'); }Sending SMS to Landlines
You cannot send SMS to landline numbers in Malawi. Attempts to send messages to landline numbers will result in delivery failures, typically generating a 400 response error (code 21614) through SMS APIs, with no charges applied to your account.
Landline Number Identification:
Landline numbers in Malawi use different prefixes from mobile numbers. Landline prefixes include:
Always validate phone numbers before sending to avoid unnecessary API calls and failed deliveries.
Malawi SMS Compliance and Regulatory Guidelines
The Malawi Communications Regulatory Authority (MACRA) oversees SMS communications under the Electronic Transactions and Cyber Security Act of 2016 and the Data Protection Act of 2024. Comply with MACRA's guidelines and consumer protection regulations when conducting SMS marketing or communications campaigns.
Key Regulatory Framework:
"Major Importance" Definition: Organizations are classified as of major importance if they:
Data Protection Act Compliance Checklist:
Consent and Opt-In
Explicit Consent Requirements:
Consent Record Retention: Maintain consent records for a minimum of 7 years after the last communication with the recipient, or longer if required by your industry regulations.
Consent Form Example:
HELP/STOP and Other Commands
Chichewa Opt-Out Keywords: Recognize these Chichewa-language opt-out terms:
Complete Keyword List:
Do Not Call / Do Not Disturb Registries
Malawi does not maintain an official Do Not Call registry. However, you should:
Suppression List Implementation:
// Example suppression list management class SuppressionList { private optedOutNumbers: Set<string> = new Set(); async addNumber(phoneNumber: string): Promise<void> { const formatted = formatMalawiNumber(phoneNumber); this.optedOutNumbers.add(formatted); // Persist to database await db.suppressionList.create({ phoneNumber: formatted, date: new Date() }); } async isOptedOut(phoneNumber: string): Promise<boolean> { const formatted = formatMalawiNumber(phoneNumber); return this.optedOutNumbers.has(formatted); } async filterRecipients(recipients: string[]): Promise<string[]> { return recipients.filter(async (num) => !(await this.isOptedOut(num))); } }Time Zone Sensitivity
Major Malawi Holidays to Avoid:
Also avoid sending promotional messages during Ramadan (dates vary annually) if targeting Muslim audiences.
Emergency Message Examples:
Choosing SMS Sender IDs and Phone Number Options in Malawi
Alphanumeric Sender ID
Operator network capability: Supported Registration requirements: Pre-registration not required Sender ID preservation: Yes, sender IDs are preserved as specified
Character Limits and Restrictions:
Best practices: Avoid generic terms like "InfoSMS", "INFO", "Verify", and "Notify"
Effective vs. Ineffective Sender IDs:
Long Codes
Domestic vs. International:
Sender ID preservation: No, international long codes may be modified by carriers to improve deliverability or comply with local routing requirements.
Provisioning time: Immediate
Use cases: Transactional messages, alerts, and notifications
When to Use Each Option:
Short Codes
Support: Not currently supported in Malawi Provisioning time: N/A Use cases: N/A
Restricted SMS Content, Industries, and Use Cases
Restricted Industries and Content:
Political Message Authorization: Political campaign messages require written authorization from:
Penalties for Sending Restricted Content:
Content Filtering
Carrier Filtering Rules:
Common Blocked Keywords (indicative list):
Approved Domain Registration:
Tips to Avoid Blocking:
"Excessive" Punctuation Definition:
Best Practices for Sending SMS in Malawi
Messaging Strategy
Effective Message Templates:
Personalization Token Guidelines:
// Example personalization with fallbacks function personalizeMessage(template: string, user: User): string { return template .replace('[FirstName]', user.firstName || 'Customer') .replace('[Amount]', user.amount?.toString() || 'your payment') .replace('[Date]', user.date || 'soon'); }Sending Frequency and Timing
Message Spacing Guidelines:
Localization
Chichewa Translation Resources:
Cultural References That Work Well:
Avoid:
Opt-Out Management
Opt-Out Database Implementation:
// Complete opt-out management system import { PrismaClient } from '@prisma/client'; const prisma = new PrismaClient(); interface OptOutRecord { phoneNumber: string; optOutDate: Date; source: 'STOP_KEYWORD' | 'WEB_FORM' | 'MANUAL'; campaignId?: string; } async function processOptOut(record: OptOutRecord): Promise<void> { // Add to database await prisma.optOut.create({ data: { phoneNumber: record.phoneNumber, optOutDate: record.optOutDate, source: record.source, campaignId: record.campaignId, }, }); // Remove from active campaigns await prisma.campaignRecipient.deleteMany({ where: { phoneNumber: record.phoneNumber }, }); // Send confirmation await sendSMS({ to: record.phoneNumber, message: 'You have been unsubscribed. You will not receive further messages from us.', senderId: 'YourBrand', }); // Log for audit console.log(`Opt-out processed: ${record.phoneNumber} at ${record.optOutDate}`); } async function checkOptOutStatus(phoneNumber: string): Promise<boolean> { const record = await prisma.optOut.findUnique({ where: { phoneNumber }, }); return record !== null; }Testing and Monitoring
Benchmark Delivery Rates:
Key Metrics to Track:
SMS API Integrations for Malawi
Twilio
Twilio provides robust SMS capabilities for sending messages to Malawi. Here's how to implement it:
import { Twilio } from 'twilio'; // Initialize Twilio client with your credentials const client = new Twilio( process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_AUTH_TOKEN ); async function sendSMSToMalawi( to: string, message: string, senderId: string ): Promise<void> { try { // Validate phone number before sending if (!isValidMalawiNumber(to)) { throw new Error(`Invalid Malawi phone number: ${to}`); } // Ensure proper formatting for Malawi numbers const formattedNumber = formatMalawiNumber(to); const response = await client.messages.create({ body: message, from: senderId, // Alphanumeric sender ID to: formattedNumber, // Optional parameters for delivery tracking statusCallback: 'https://your-webhook.com/status' }); console.log(`Message sent successfully! SID: ${response.sid}`); } catch (error) { console.error('Error sending message:', error); throw error; } }Webhook Implementation for Status Callbacks:
import express from 'express'; const app = express(); app.use(express.urlencoded({ extended: false })); app.post('/status', (req, res) => { const { MessageSid, MessageStatus, To, ErrorCode, ErrorMessage } = req.body; console.log(`Message ${MessageSid} to ${To}: ${MessageStatus}`); // Handle different statuses switch (MessageStatus) { case 'delivered': // Update database, trigger follow-up actions break; case 'failed': case 'undelivered': console.error(`Delivery failed: ${ErrorCode} - ${ErrorMessage}`); // Queue for retry or alert admin break; case 'sent': // Message sent to carrier, awaiting delivery confirmation break; } res.sendStatus(200); }); app.listen(3000);Sinch
Sinch offers direct carrier connections in Malawi. Implementation example:
import { SinchClient } from '@sinch/sdk'; const sinch = new SinchClient({ servicePlanId: process.env.SINCH_SERVICE_PLAN_ID, apiToken: process.env.SINCH_API_TOKEN, region: 'africa-1' }); async function sendSinchSMS( recipientNumber: string, messageText: string ): Promise<void> { try { const response = await sinch.messages.send({ from: 'YourBrand', // Alphanumeric sender ID to: [recipientNumber], body: messageText, // Enable delivery reports deliveryReport: 'summary' }); console.log('Message batch ID:', response.id); // Parse delivery report const deliveryStatus = await sinch.messages.get(response.id); console.log('Delivery status:', deliveryStatus.status); } catch (error) { console.error('Sinch SMS error:', error); throw error; } }Delivery Report Parsing:
interface DeliveryReport { id: string; status: 'Queued' | 'Dispatched' | 'Delivered' | 'Failed' | 'Expired'; recipient: string; timestamp: Date; } async function parseDeliveryReport(batchId: string): Promise<DeliveryReport[]> { const batch = await sinch.messages.get(batchId); return batch.recipients.map(recipient => ({ id: batch.id, status: recipient.status, recipient: recipient.to, timestamp: new Date(recipient.deliveredAt || recipient.failedAt) })); }MessageBird
MessageBird provides reliable SMS delivery to Malawi:
import { MessageBird } from 'messagebird'; const messagebird = MessageBird(process.env.MESSAGEBIRD_API_KEY); interface SMSResponse { id: string; status: string; } async function sendMessageBirdSMS( to: string, message: string ): Promise<SMSResponse> { return new Promise((resolve, reject) => { messagebird.messages.create({ originator: 'CompanyName', recipients: [to], body: message, // Delivery report webhook reportUrl: 'https://your-domain.com/delivery-reports' }, (err, response) => { if (err) { reject(err); return; } resolve(response); }); }); }Webhook Handler for Delivery Reports:
import express from 'express'; const app = express(); app.use(express.json()); app.post('/delivery-reports', (req, res) => { const { id, recipient, status, statusDatetime, statusErrorCode } = req.body; console.log(`Message ${id} to ${recipient}: ${status}`); // Store delivery status in database db.deliveryReports.create({ messageId: id, recipient, status, timestamp: new Date(statusDatetime), errorCode: statusErrorCode }); // Handle failed deliveries if (status === 'failed') { handleFailedDelivery(id, recipient, statusErrorCode); } res.sendStatus(200); });API Rate Limits and Throughput
Standard Rate Limits:
Throughput Management Strategies:
Exponential Backoff Implementation:
async function sendWithRetry( sendFunction: () => Promise<void>, maxRetries: number = 3 ): Promise<void> { let attempt = 0; while (attempt < maxRetries) { try { await sendFunction(); return; // Success } catch (error) { attempt++; if (attempt >= maxRetries) { throw error; // Max retries reached } // Exponential backoff: 1s, 2s, 4s, 8s... const delayMs = Math.pow(2, attempt) * 1000; console.log(`Retry ${attempt} after ${delayMs}ms`); await new Promise(resolve => setTimeout(resolve, delayMs)); } } }Message Queuing Setup with Redis:
import { Queue, Worker } from 'bullmq'; import Redis from 'ioredis'; const connection = new Redis({ host: process.env.REDIS_HOST, port: 6379, maxRetriesPerRequest: null }); // Create SMS queue const smsQueue = new Queue('sms-malawi', { connection }); // Add messages to queue async function queueSMS(to: string, message: string, senderId: string) { await smsQueue.add('send-sms', { to, message, senderId }, { attempts: 3, backoff: { type: 'exponential', delay: 2000 } }); } // Process queue const worker = new Worker('sms-malawi', async (job) => { const { to, message, senderId } = job.data; await sendSMSToMalawi(to, message, senderId); }, { connection }); worker.on('completed', (job) => { console.log(`Job ${job.id} completed`); }); worker.on('failed', (job, err) => { console.error(`Job ${job?.id} failed:`, err); });Error Handling and Reporting
Common Error Scenarios:
Best Practices:
// Error type detection function isTemporaryError(error: any): boolean { const temporaryErrorCodes = [ 429, // Rate limit exceeded 503, // Service unavailable 504, // Gateway timeout 30001, // Twilio: Queue overflow 30002, // Twilio: Account suspended 30003, // Twilio: Unreachable destination 30005, // Twilio: Unknown destination 30006, // Twilio: Landline or unreachable carrier ]; return temporaryErrorCodes.includes(error.code) || error.status >= 500 && error.status < 600; } // Complete error handling implementation async function handleSMSError(error: any): Promise<void> { const errorLog = { timestamp: new Date().toISOString(), errorCode: error.code, errorMessage: error.message, recipientNumber: error.recipient, retryCount: error.retryCount || 0 }; // Log to monitoring system await logger.error('SMS_DELIVERY_FAILED', errorLog); // Implement retry logic for temporary failures if (isTemporaryError(error) && errorLog.retryCount < 3) { await queueForRetry(errorLog); } else { // Permanent failure - notify admin await alertAdmin(errorLog); } }Malawi-Specific Carrier Error Codes:
Frequently Asked Questions (FAQ)
What phone number format do I need for sending SMS to Malawi?
Use the E.164 international format: +265 followed by 9 digits. For mobile numbers, the format is +265 plus the operator prefix (77 or 88 for TNM, 88 or 99 for Airtel) and subscriber number. For example: +265881234567 (TNM) or +265991234567 (Airtel). Malawi does not use geographic area codes.
What are the SMS compliance requirements in Malawi?
You must comply with MACRA regulations under three key acts: the Electronic Transactions and Cyber Security Act (2016), Data Protection Act (2024), and Communications (Consumer Protection) Regulations (2019). Obtain written or digital opt-in consent before sending marketing messages, include opt-out instructions, and respect time restrictions (send only between 8 AM – 5 PM CAT/UTC+2). Violations of the Electronic Transactions Act carry penalties of K2,000,000 fine and 5 years imprisonment.
Can I use mobile number portability (MNP) when sending SMS in Malawi?
Yes, Mobile Number Portability has been operational in Malawi since January 2020. MACRA oversees the MNP process, which typically takes 24 – 48 hours to complete. Most major SMS providers (Twilio, Sinch, MessageBird) automatically perform MNP lookups to ensure messages are routed to the correct operator. Always use current operator information rather than relying on historical data, as numbers can be ported between TNM and Airtel.
Which mobile operators support SMS in Malawi?
Malawi has two major operators: TNM (Telekom Networks Malawi) with 44% market share and Airtel Malawi with 56% market share (2024). TNM covers over 88% of the country with 2G, 3G, 4G LTE, and 5G networks (5G launched July 2025 in Lilongwe). A third operator, Malcel, received a license in 2022 and is preparing to enter the market with a $280 million investment. Test your SMS campaigns across both TNM and Airtel networks to ensure optimal delivery.
What SMS features are supported in Malawi?
Malawi supports concatenated messages (160 characters per segment with GSM-7 encoding, 70 characters for Unicode), alphanumeric sender IDs without pre-registration (max 11 characters), and international long codes. However, two-way SMS, domestic long codes, short codes, and direct MMS are not supported. MMS content is automatically converted to SMS with an embedded URL link.
What are the SMS API rate limits for Malawi?
Rate limits vary by provider and service plan. Twilio limits depend on account type (check your console), Sinch uses service plan-based limits with FIFO queuing (10-recipient batch counts as 10 messages), and MessageBird (now Bird) varies by account configuration. Implement exponential backoff for retries, use message queuing systems like Redis or RabbitMQ, and batch messages in groups of 50 – 100 for optimal throughput.
What timezone should I use for SMS sending in Malawi?
Malawi uses Central Africa Time (CAT), which is UTC+2 year-round with no daylight saving time adjustments. Restrict promotional SMS messages to between 8 AM and 5 PM CAT (UTC+2). Emergency or service-related messages (security alerts, OTP codes, critical notifications) may be sent outside these hours if necessary. Always consider cultural and religious observances, including major holidays and Ramadan, when scheduling campaigns.
How do I implement SMS in Malawi using Twilio, Sinch, or MessageBird?
All three providers support Malawi SMS. Use Twilio's Node.js SDK with proper +265 number formatting and statusCallback for delivery tracking. Sinch requires the
africa-1region configuration with service plan-based rate limits and delivery report parsing. MessageBird (now Bird) uses alphanumeric sender IDs with delivery report webhooks. Implement proper error handling for invalid phone numbers, network timeouts, carrier rejections, and rate limit exceeded scenarios.How much does it cost to send SMS in Malawi?
SMS costs vary by provider, volume, and service plan. Typical ranges are $0.03 – $0.10 per message segment. Remember that concatenated messages count as multiple segments (e.g., a 320-character message costs 2× a single message). Contact your SMS provider for volume discounts. Most providers offer tiered pricing: higher volumes receive lower per-message rates. Factor in additional costs for delivery reports, MNP lookups, and number validation services.
How long does SMS delivery take in Malawi?
Typical SMS delivery times range from 5 – 30 seconds under normal network conditions. Factors affecting delivery time include:
If messages consistently take longer than 60 seconds to deliver, contact your SMS provider about routing optimizations.
Recap and Additional Resources
Quick Reference Checklist
Pre-Launch:
Post-Launch Monitoring:
Compliance Essentials:
Next Steps
Additional Resources
Official Documentation:
SMS Provider Documentation:
Industry Resources: