SMSBulk MessagingAPITutorial

How to Send Bulk SMS: Complete Guide with API & Dashboard

Learn how to send bulk SMS messages effectively using both a visual dashboard and API. Step-by-step tutorial with code examples, best practices, and compliance tips.

Written by: Victor VillalobosReviewed by: Jennifer VillalobosDecember 18, 202510 min read

How to Send Bulk SMS: Complete Guide with API & Dashboard

Sending SMS messages to thousands of customers at once might seem daunting, but it doesn't have to be. Whether you're announcing a flash sale, sending appointment reminders, or keeping customers informed about their orders, bulk SMS is one of the most effective communication channels available.

In this guide, we'll walk you through everything you need to know about sending bulk SMS - from using a simple dashboard interface to integrating with our powerful API.

What is Bulk SMS?

Bulk SMS (also known as mass texting or SMS broadcasting) is the practice of sending a single message to a large group of recipients simultaneously. Unlike individual messages, bulk SMS is designed for:

  • Marketing campaigns - Promotions, sales, new product launches
  • Transactional notifications - Order updates, shipping alerts
  • Alerts and reminders - Appointments, events, deadlines
  • Internal communications - Team updates, emergency notifications
According to Gartner, SMS has a 98% open rate compared to just 20% for email, making it an incredibly effective channel for time-sensitive communications.

Before You Start: What You'll Need

Before sending your first bulk SMS campaign, make sure you have:

  • A Zavu account - Sign up for free if you haven't already
  • A phone number - You can purchase one directly from our dashboard
  • Your contact list - Phone numbers in E.164 format (e.g., +14155551234)
  • Your message content - Keep it concise and valuable
  • For US messaging, you'll also need to be registered for A2P 10DLC - but don't worry, we handle that for you automatically.

    Method 1: Using the Dashboard (No Code Required)

    The easiest way to send bulk SMS is through our visual dashboard. Here's how:

    Step 1: Create a New Broadcast

  • Log in to your Zavu Dashboard
  • Navigate to Broadcasts in the left sidebar
  • Click Create Broadcast
  • Step 2: Configure Your Campaign

    Give your broadcast a descriptive name that helps you identify it later:

    • Good: "Black Friday Sale 2025 - VIP Customers"
    • Not so good: "Campaign 1"
    Select SMS as your channel and choose which sender (phone number) to use.

    Step 3: Write Your Message

    Compose your message in the text editor. You can use personalization variables to make each message unique:

    text
    Hi {{name}}, don't miss our exclusive Black Friday deals! Use code FRIDAY25 for 25% off your next order. Shop now: https://yourstore.com/sale Reply STOP to unsubscribe.
    Pro tip: Keep your message under 160 characters when possible to avoid splitting into multiple segments. Learn more about GSM-7 encoding and character limits.

    Step 4: Add Your Contacts

    You have several options for adding recipients:

    • Upload CSV - Import a spreadsheet with phone numbers and personalization data
    • Manual entry - Add individual numbers directly
    • Import from contacts - Select from your existing contact list
    Your CSV should look like this:
    csv
    phone,name,order_id +14155551234,John,ORD-001 +14155555678,Sarah,ORD-002 +14155559012,Mike,ORD-003

    Step 5: Review and Send

    Before sending, you'll see:

    • Total number of recipients
    • Estimated cost
    • Message preview with personalization
    You can either:
    • Send immediately - Start the broadcast right away
    • Schedule for later - Pick a specific date and time

    Step 6: Monitor Progress

    Once your broadcast starts, you can track progress in real-time:

    • Messages sent vs. pending
    • Delivery confirmations
    • Failed deliveries with reasons
    • Opt-out requests

    Method 2: Using the Broadcasts API

    For developers who need programmatic control, our Broadcasts API offers complete flexibility. Here's how to send bulk SMS with code:

    Step 1: Install the SDK

    bash
    # Using npm npm install @zavudev/sdk # Using bun bun add @zavudev/sdk

    Step 2: Create a Broadcast

    typescript
    import Zavudev from "@zavudev/sdk"; const client = new Zavu(); // Uses ZAVU_API_KEY from environment // Create a new broadcast campaign const broadcast = await client.broadcasts.create({ name: "Black Friday Sale 2025", channel: "sms", text: "Hi {{name}}, don't miss our Black Friday deals! Use code FRIDAY25 for 25% off. Reply STOP to unsubscribe.", }); console.log("Broadcast created: " + broadcast.id); // Output: Broadcast created: brd_abc123

    Step 3: Add Contacts

    You can add up to 1,000 contacts per API call:

    typescript
    // Add contacts with personalization variables const result = await client.broadcasts.contacts.add(broadcast.id, { contacts: [ { recipient: "+14155551234", templateVariables: { name: "John" } }, { recipient: "+14155555678", templateVariables: { name: "Sarah" } }, { recipient: "+14155559012", templateVariables: { name: "Mike" } } ] }); console.log("Added: " + result.added + ", Duplicates: " + result.duplicates + ", Invalid: " + result.invalid);

    For larger lists, batch your requests:

    typescript
    // Helper function for batching async function addContactsInBatches(broadcastId: string, contacts: any[], batchSize = 1000) { for(let i = 0; i < contacts.length; i += batchSize) { const batch = contacts.slice(i, i + batchSize); await client.broadcasts.contacts.add(broadcastId, { contacts: batch }); console.log("Added batch " + (Math.floor(i / batchSize) + 1)); } }

    Step 4: Send the Broadcast

    typescript
    // Send immediately await client.broadcasts.send(broadcast.id); // Or schedule for later await client.broadcasts.send(broadcast.id, { scheduledAt: "2025-11-29T09:00:00Z" // Black Friday, 9 AM UTC });

    Step 5: Monitor Progress

    typescript
    // Check broadcast progress const progress = await client.broadcasts.progress(broadcast.id); console.log("Status: " + progress.status); console.log("Progress: " + progress.percentComplete + "%"); console.log("Delivered: " + progress.delivered); console.log("Failed: " + progress.failed); console.log("Pending: " + progress.pending);

    Complete Example

    Here's a full working example:

    typescript
    import Zavudev from "@zavudev/sdk"; async function sendBlackFridayCampaign() { const client = new Zavu(); // 1. Create the broadcast const broadcast = await client.broadcasts.create({ name: "Black Friday Sale 2025", channel: "sms", text: "Hi {{name}}, Black Friday is here! Get 25% off with code FRIDAY25. Shop: https://yourstore.com/sale. Reply STOP to opt out." }); // 2. Add your contacts const customers = [ { recipient: "+14155551234", templateVariables: { name: "John" } }, { recipient: "+14155555678", templateVariables: { name: "Sarah" } }, { recipient: "+14155559012", templateVariables: { name: "Mike" } }, // ... more customers ]; await client.broadcasts.contacts.add(broadcast.id, { contacts: customers }); // 3. Schedule for Black Friday at 9 AM await client.broadcasts.send(broadcast.id, { scheduledAt: "2025-11-29T09:00:00Z" }); console.log("Campaign scheduled! ID: " + broadcast.id); // 4. Check progress later const progress = await client.broadcasts.progress(broadcast.id); console.log("Status: " + progress.status + " - " + progress.percentComplete + "% complete"); } sendBlackFridayCampaign().catch(console.error);

    Best Practices for Bulk SMS

    1. Respect Character Limits

    SMS messages using standard GSM-7 encoding support 160 characters per segment. Messages with special characters (emojis, certain accents) switch to Unicode, reducing the limit to 70 characters.

    Recommendation: Keep messages under 160 characters when possible to minimize costs.

    2. Always Include Opt-Out Instructions

    In most countries, you're legally required to provide a way for recipients to unsubscribe. Always include:

    text
    Reply STOP to unsubscribe.

    Zavu automatically handles opt-out requests and removes unsubscribed contacts from future campaigns.

    3. Personalize Your Messages

    Personalized messages see significantly higher engagement. Use template variables like:

    • {{name}} - Recipient's name
    • {{order_id}} - Order number
    • {{appointment_date}} - Scheduled date

    4. Send at the Right Time

    According to HubSpot research:

    • Best days: Tuesday, Wednesday, Thursday
    • Best times: 10 AM - 12 PM and 2 PM - 3 PM local time
    • Avoid: Early mornings, late nights, weekends (unless urgent)

    5. Segment Your Audience

    Don't send the same message to everyone. Use customer segmentation to create targeted campaigns:

    • VIP customers get early access
    • New customers get welcome offers
    • Inactive customers get re-engagement messages

    6. Test Before Sending

    Always send a test message to yourself or your team before launching a campaign. Check for:

    • Personalization variables rendering correctly
    • Links working properly
    • Message displaying well on mobile
    • Character count within limits

    Understanding Costs

    Bulk SMS pricing varies by:

    • Destination country - US messages typically cost $0.01-0.02 each
    • Message length - Long messages may be split into multiple segments
    • Volume - Higher volumes often qualify for better rates
    Zavu provides transparent pricing with no hidden fees. You can see the estimated cost before sending any campaign.

    Compliance Considerations

    United States

    For US messaging, you need:

    Europe

    For EU messaging:

    • GDPR compliance - Explicit consent required
    • Clear identification of sender
    • Right to withdraw consent

    Canada

    • CASL compliance - Express or implied consent
    • Sender identification
    • Unsubscribe mechanism

    Advanced Features

    Smart Routing

    When you use the smart channel option, Zavu automatically selects the best channel for each recipient:

    typescript
    const broadcast = await client.broadcasts.create({ name: "Multi-channel Campaign", channel: "smart", // Automatically choose SMS, WhatsApp, or Email text: "Your message here..." });

    This can significantly reduce costs by routing messages through the most cost-effective channel available.

    Webhooks for Real-Time Updates

    Set up webhooks to receive real-time notifications about your broadcast:

    • Message delivered
    • Message failed
    • Contact opted out
    • Broadcast completed
    Learn more in our API documentation.

    Troubleshooting Common Issues

    Messages Not Delivering

  • Check phone number format - Must be E.164 (e.g., +14155551234)
  • Verify sender registration - US numbers need 10DLC registration
  • Check carrier filtering - Some content may trigger spam filters
  • High Failure Rates

    • Invalid numbers - Clean your list before sending
    • Carrier issues - Try sending at different times
    • Content filtering - Avoid spam-like language

    Slow Delivery

    Delivery speed depends on your 10DLC trust score. Higher scores = faster throughput.

    Next Steps

    Ready to send your first bulk SMS campaign? Here's what to do:

  • Create a free account - No credit card required
  • Get a phone number - Purchase directly from the dashboard
  • Import your contacts - Upload your customer list
  • Create your first broadcast - Use the dashboard or API
  • Have questions? Check out our complete API documentation or contact our support team.

    Need help? Contact us or join our Discord community for support.

    Follow us on social media

    Ready to start building?

    Get started with Zavu's unified messaging API today.

    Get Started Now
    How to Send Bulk SMS: Complete Guide with API & Dashboard | Zavu Blog | Zavu