Canada SMS Best Practices, Compliance, and Features
Canada SMS Market Overview
Locale name: | Canada |
---|---|
ISO code: | CA |
Region | North America |
Mobile country code (MCC) | 302 |
Dialing Code | +1 |
Market Conditions: Canada has a mature mobile market with high SMS adoption rates across major carriers like Rogers, Bell, and Telus. While OTT messaging apps like WhatsApp and Facebook Messenger are popular, SMS remains a critical communication channel, especially for business messaging and notifications. The market shows a relatively even split between Android and iOS devices, with both platforms well-supported for messaging services.
Key SMS Features and Capabilities in Canada
Canada offers comprehensive SMS capabilities including two-way messaging, concatenated messages, and MMS support, with strong carrier infrastructure across all major providers.
Two-way SMS Support
Canada fully supports two-way SMS messaging across all major carriers. There are no specific restrictions beyond standard compliance requirements and proper opt-in procedures.
Concatenated Messages (Segmented SMS)
Support: Yes, concatenation is fully supported across Canadian carriers.
Message length rules:
- GSM 3.38 encoding: 136 characters per segment
- Unicode (UCS-2): 70 characters per segment
Encoding considerations: Messages use GSM-7 encoding by default for standard ASCII characters, while UCS-2 is automatically applied for messages containing special characters or non-Latin alphabets.
MMS Support
MMS is fully supported across Canadian carriers. Businesses can send images, short videos, and other multimedia content, with typical size limits around 1MB per message. Best practices include optimizing media files for mobile viewing and providing fallback SMS links for unsupported devices.
Recipient Phone Number Compatibility
Number Portability
Number portability is available in Canada, allowing users to keep their phone numbers when switching carriers. This feature is fully supported and doesn't significantly impact message delivery or routing, as carriers maintain updated routing tables.
Sending SMS to Landlines
SMS to landline is possible but not guaranteed. When attempted, some carriers will convert SMS messages to text-to-speech voice calls, while others may simply fail to deliver. It's recommended to verify number types before sending and focus on mobile numbers for reliable delivery.
Compliance and Regulatory Guidelines for SMS in Canada
SMS marketing in Canada is primarily regulated by the Canadian Anti-Spam Legislation (CASL) and overseen by the Canadian Radio-television and Telecommunications Commission (CRTC). All commercial electronic messages must comply with CASL requirements, which are among the strictest anti-spam laws globally.
Consent and Opt-In
Express Consent Requirements:
- Must obtain explicit, documented consent before sending commercial messages
- Consent must be specific to SMS (cannot be bundled with other channels)
- Must clearly state the purpose and type of messages to be sent
- Include company identification and contact information
Best Practices for Documentation:
- Maintain detailed records of when and how consent was obtained
- Store opt-in dates, sources, and specific consent language used
- Keep proof of consent for a minimum of 3 years after the last message
HELP/STOP and Other Commands
Mandatory Keywords:
- STOP, ARRET (French) - Must immediately cease sending messages
- HELP, AIDE (French) - Must provide assistance information
- INFO - Must provide program information
Language Requirements:
- Support both English and French commands
- Include keyword information in the first message to new subscribers
- Respond to commands in the language used by the subscriber
Do Not Call / Do Not Disturb Registries
Canada maintains a National Do Not Call List (DNCL) administered by the CRTC. While primarily for voice calls, best practices include:
- Checking numbers against the DNCL before sending marketing messages
- Maintaining an internal do-not-message list
- Immediately processing opt-out requests
- Keeping suppression lists updated across all campaigns
Time Zone Sensitivity
Time Restrictions:
- Avoid sending messages before 9:00 AM or after 9:00 PM in the recipient's local time zone
- Consider Canada's six time zones when scheduling campaigns
- Exception: Urgent messages (e.g., security alerts, appointment reminders) may be sent outside these hours
Phone Numbers Options and SMS Sender Types for in Canada
Alphanumeric Sender ID
Operator network capability: Not supported in Canada
Registration requirements: N/A
Sender ID preservation: N/A
Long Codes
Domestic vs. International:
- Domestic long codes fully supported
- International long codes not recommended for A2P messaging
Sender ID preservation: Yes, original sender ID is preserved
Provisioning time: Immediate to 24 hours
Use cases:
- Person-to-person communication
- Low-volume business messaging
- Customer support
- Two-factor authentication
Short Codes
Support: Fully supported across all Canadian carriers
Provisioning time: 12-16 weeks for approval and activation
Use cases:
- High-volume marketing campaigns
- Mass notifications
- Two-factor authentication
- Customer loyalty programs
Restricted SMS Content, Industries, and Use Cases
Prohibited Content:
- High-risk financial services (payday loans, cryptocurrency)
- Gambling and sweepstakes
- Adult content and pornography
- Controlled substances (tobacco, vaping, cannabis)
- Deceptive marketing practices
- Hate speech and profanity
Content Filtering
Carrier Filtering Rules:
- Messages containing prohibited keywords are automatically blocked
- URLs must be from approved domains
- High-frequency messaging may trigger spam filters
Best Practices:
- Avoid URL shorteners
- Use approved sender IDs
- Maintain consistent sending patterns
- Include clear opt-out instructions
Best Practices for Sending SMS in Canada
Messaging Strategy
- Keep messages under 160 characters when possible
- Include clear calls-to-action
- Personalize using subscriber data
- Maintain consistent branding
Sending Frequency and Timing
- Limit to 2-4 messages per month per subscriber
- Respect time zone differences
- Avoid sending during major holidays
- Space out messages to prevent fatigue
Localization
- Offer both English and French language options
- Allow language preference selection at opt-in
- Maintain separate language-specific campaigns
- Consider regional cultural differences
Opt-Out Management
- Process opt-outs within 24 hours
- Maintain centralized opt-out database
- Confirm opt-out with one final message
- Regular audit of opt-out lists
Testing and Monitoring
- Test across all major Canadian carriers
- Monitor delivery rates by carrier
- Track engagement metrics
- Regular A/B testing of message content
SMS API integrations for Canada
Twilio
Twilio provides a robust SMS API with comprehensive support for Canadian messaging requirements. Integration requires an account SID and auth token for authentication.
Key Parameters:
from
: Your Twilio phone number (must be in E.164 format)to
: Recipient's number (must include +1 for Canada)body
: Message content (supports UTF-8 encoding)
import { Twilio } from 'twilio';
// Initialize client with environment variables
const client = new Twilio(
process.env.TWILIO_ACCOUNT_SID,
process.env.TWILIO_AUTH_TOKEN
);
async function sendSMS(to: string, message: string) {
try {
// Send message with proper Canadian formatting
const response = await client.messages.create({
from: process.env.TWILIO_PHONE_NUMBER, // Must be in +1XXXXXXXXXX format
to: `+1${to.replace(/\D/g, '')}`, // Sanitize and format number
body: message,
// Optional parameters for Canadian requirements
statusCallback: 'https://your-callback-url.com/status',
});
console.log(`Message sent successfully: ${response.sid}`);
return response;
} catch (error) {
console.error('Error sending message:', error);
throw error;
}
}
Sinch
Sinch offers a developer-friendly API with specific features for the Canadian market. Authentication uses a service plan ID and API token.
import { SinchClient } from '@sinch/sdk-core';
class SinchSMSService {
private client: SinchClient;
constructor() {
this.client = new SinchClient({
servicePlanId: process.env.SINCH_SERVICE_PLAN_ID,
apiToken: process.env.SINCH_API_TOKEN,
region: 'ca-central-1'
});
}
async sendBatchSMS(recipients: string[], message: string) {
try {
const response = await this.client.sms.batches.send({
from: process.env.SINCH_NUMBER,
to: recipients.map(num => `+1${num.replace(/\D/g, '')}`),
body: message,
// Canadian compliance parameters
deliveryReport: 'summary',
parameters: {
campaign_id: 'CANADA_CAMPAIGN'
}
});
return response;
} catch (error) {
console.error('Sinch SMS Error:', error);
throw error;
}
}
}
MessageBird
MessageBird provides comprehensive SMS capabilities for Canadian markets with straightforward integration.
import { MessageBirdClient } from 'messagebird';
class MessageBirdService {
private client: MessageBirdClient;
constructor() {
this.client = new MessageBirdClient(
process.env.MESSAGEBIRD_API_KEY
);
}
async sendMessage(to: string, message: string) {
const params = {
originator: process.env.MESSAGEBIRD_NUMBER,
recipients: [`+1${to.replace(/\D/g, '')}`],
body: message,
// Canadian market specifics
datacoding: 'auto',
reportUrl: 'https://your-domain.com/delivery-reports'
};
return new Promise((resolve, reject) => {
this.client.messages.create(params, (err, response) => {
if (err) reject(err);
else resolve(response);
});
});
}
}
Plivo
Plivo offers reliable SMS capabilities with specific features for Canadian compliance requirements.
import { Client } from 'plivo';
class PlivoSMSService {
private client: Client;
constructor() {
this.client = new Client(
process.env.PLIVO_AUTH_ID,
process.env.PLIVO_AUTH_TOKEN
);
}
async sendSMS(to: string, message: string) {
try {
const response = await this.client.messages.create({
src: process.env.PLIVO_NUMBER, // Your Plivo number
dst: `+1${to.replace(/\D/g, '')}`,
text: message,
// Canadian specific parameters
powerpack_uuid: process.env.PLIVO_POWERPACK_ID,
log: true
});
return response;
} catch (error) {
console.error('Plivo Error:', error);
throw error;
}
}
}
API Rate Limits and Throughput
Rate Limits by Provider:
- Twilio: 100 messages per second
- Sinch: 30 messages per second
- MessageBird: 60 messages per second
- Plivo: 50 messages per second
Throughput Management Strategies:
- Implement exponential backoff for retry logic
- Use queue systems (Redis, RabbitMQ) for high-volume sending
- Batch messages when possible (up to 100 recipients per request)
- Monitor throughput metrics and adjust sending patterns
Error Handling and Reporting
Best Practices:
- Implement comprehensive error logging
- Set up automated alerts for error thresholds
- Store delivery receipts for compliance
- Regular monitoring of delivery rates
// Example error handling implementation
interface SMSError {
code: string;
message: string;
timestamp: Date;
recipient: string;
}
class SMSErrorHandler {
async logError(error: SMSError): Promise<void> {
// Log to monitoring system
await logger.error('SMS_DELIVERY_ERROR', {
...error,
market: 'CANADA'
});
// Alert if error threshold exceeded
if (await this.errorThresholdExceeded()) {
await this.triggerAlert();
}
}
}
Recap and Additional Resources
Key Takeaways:
- Always maintain CASL compliance
- Implement proper opt-in/opt-out handling
- Support both English and French communications
- Monitor delivery rates and error patterns
Next Steps:
- Review CRTC guidelines at www.crtc.gc.ca
- Consult legal counsel for CASL compliance
- Set up monitoring and reporting systems
- Test messaging across all major Canadian carriers
Additional Resources: