You Need to Call 500 Customers in 48 Hours: How ElevenLabs Batch Calling Saves Your Quebec SMB's Campaign (May 2026 Tutorial) | Agent IA Vocal
    Back to blog
    Tutoriel9 min readMay 28, 2026

    You Need to Call 500 Customers in 48 Hours: How ElevenLabs Batch Calling Saves Your Quebec SMB's Campaign (May 2026 Tutorial)

    6-step tutorial to launch a clean ElevenLabs batch calling outbound campaign for Quebec SMBs: CSV prep, dedicated agent, CRTC/DNCL/Law 25 compliance, May 4, 2026 agent_id filter.

    MA

    Masdouk Adelakoun

    Cofondateur & CTO

    You Need to Call 500 Customers in 48 Hours: How ElevenLabs Batch Calling Saves Your Quebec SMB's Campaign (May 2026 Tutorial)

    500 customers to call back in 48 hours. No receptionist team that can hold that line.

    A South Shore accounting firm lived this in April. A fiscal software switch was announced, 500 SMB clients needed to be notified before the T2 filing window, and the runway was 48 hours. Three assistants on the phones, average 5 minutes per call, 8 working hours per day. The math is brutal: 41 person-hours to clear the list if nothing goes sideways. Nobody finishes that gauntlet clean.

    On May 4, 2026, ElevenLabs shipped an update that changes that math. Batch calling — the ability to launch multiple outbound calls in parallel from a single AI voice agent — already existed. But the v2.46.0 SDK release added one detail that separates organized SMBs from the rest: an agent_id filter on the batch campaigns list endpoint. You can now isolate, track, and audit each voice agent separately — instead of mixing an accounting follow-up campaign with a dental appointment reminder campaign running on the same workspace.

    This tutorial walks through the 6 steps we run with Quebec SMBs we support. It's concrete. If you follow the order, you'll launch your first clean batch campaign in under 90 minutes.

    What batch calling actually does (and what it does not)

    Many SMB owners assume batch calling is an autodialer. It's not the same thing. An autodialer dials a number, waits for a human to pick up, then transfers to a live agent. ElevenLabs batch calling launches your AI voice agent directly on the outbound call. The human who picks up hears the agent from the first second, in the configured voice and tone, with access to all the agent's tools (calendar, CRM, RAG) during the call.

    ElevenLabs's official documentation lists the canonical use cases: sending alerts, conducting surveys, delivering personalized messages to large contact lists. In Quebec, we see three dominant patterns: appointment confirmation (clinics, salons), past-due account follow-ups (accounting firms, garages), and operational change notifications (schedule changes, unplanned closures, product recalls).

    What batch calling does not do: it does not substitute for your consent strategy. Canadian Anti-Spam Legislation and the CRTC rules on the National Do Not Call List apply in full. We come back to this in step 5.

    Step 1 — Prep the list: CSV, hygiene, dynamic variables

    A CSV file. That's all batch calling needs to start. But 80% of the failed campaigns we've audited in Quebec crashed on a dirty file. Before uploading anything, run three filters.

    First filter: E.164 format. Every number must start with +1 and contain exactly 11 digits total. If your CRM exports numbers as "(514) 555-1234" or "514.555.1234", you have to convert them. Excel's TEXT function handles this in two minutes, but we prefer a small Python script because it catches duplicates at the same time.

    Second filter: verified opt-in. For every number on the list, you must be able to prove the person consented to receive an automated call. Not "accepted the email newsletter." Explicit consent to the phone channel. We document it in a consent_date column on the CSV — not for batch calling, but for you, the day Innovation, Science and Economic Development Canada calls.

    Third filter: dynamic variables. Batch calling lets you pass custom variables to the agent for each call: first name, file name, amount owed, appointment date. We name these columns in the CSV with a var_ prefix, and the agent picks them up in the system prompt via {{var_first_name}}. The more the agent personalizes, the less the customer hangs up. We measured a drop in abandonment rate from 31% to 14% just by injecting the first name and the company name into the agent's opening line.

    Step 2 — Clone the inbound agent to create a dedicated outbound agent

    Here's a rule we've broken and regretted: never reuse your inbound AI voice agent for outbound calls.

    Why? Because the context is inverted. When a customer calls your SMB, they have a problem, they've already decided to make contact, and they accept the conversation by definition. When your agent calls a customer, the inverse is true: the agent interrupts, has to identify itself in 3 seconds, and has to earn permission to continue. The system prompt is not the same. The tone is not the same. The fallback sequence is not the same.

    Inside ElevenLabs, you duplicate the existing agent, rename the copy to outbound_agent_campaign_X, and rewrite the first 200 words of the system prompt. The opening line must contain: (1) your SMB's name, (2) the reason for the call, (3) an explicit opt-out option. Example: "Hi, I'm Émilie, the AI assistant for Tremblay Accounting. I'm calling about the fiscal software change announced last week. Do you have two minutes, or should I call back at a better time?"

    This clone matters for what comes next: the agent_id of this new agent is what you'll filter on in the dashboard after the campaign. Mix outbound and inbound on the same agent, and you lose the ability to separate metrics. That's exactly the bug the May 4, 2026 API update fixes — see step 6.

    Step 3 — Configure the outbound phone number

    Batch calling requires a Twilio number (or another compatible SIP provider) attached to your ElevenLabs account. For a Quebec SMB, we always recommend a local number with a 514, 438, 450, 418 or 819 area code matching your market. A 1-800 number scares people off: it signals "telemarketing" instantly. A 514 or 418 area code gets 2.4× more pickups in our data.

    Important: if you're calling customers across multiple Quebec regions, create several outbound numbers and rotate based on the recipient's area code. ElevenLabs does not match this automatically — you split the campaign into sub-batches on your launch script side. We share the Python snippet below.

    Step 4 — Launch the campaign through the API

    ElevenLabs's web UI lets you launch a batch campaign in a few clicks, but we advise against using it for volumes above 100 calls. Reasons: no fine scheduling, no incident recovery, no clean logging. From 100 calls up, you go to the API.

    The endpoint is POST /v1/convai/batch-calling/submit. You pass it: agent_id (the one created in step 2), agent_phone_number_id (from step 3), scheduled_time_unix (optional, otherwise immediate start), and a recipients array containing phone_number and conversation_initiation_client_data with your dynamic variables.

    For 500 calls, you don't launch everything at once. You split into waves of 50, spaced 10 minutes apart. Why? Because if your SMB suddenly gets 50 people calling back (they hung up during the call and want more information), your inbound AI voice agent needs to absorb the return wave. That's a discipline most teams forget.

    Step 5 — CRTC, DNCL and Law 25 compliance

    Before hitting send, three mandatory checks for Quebec operators.

    DNCL (National Do Not Call List). You must have downloaded the latest DNCL list (updated monthly) and cross-matched it with your call file. Numbers on DNCL are removed unless the person is a current customer of your SMB (existing business relationship) or has explicitly consented in writing. The penalty for a call to a non-exempt DNCL number can reach $15,000 per call for a corporate entity.

    Time windows. The CRTC prohibits telemarketing calls between 9 p.m. and 9 a.m. on weekdays, and before 10 a.m. or after 6 p.m. on weekends and statutory holidays. ElevenLabs batch calling does not validate destination time automatically. You're the one who must schedule the scheduled_time_unix inside the legal window.

    Law 25 (Quebec). If your calls process or collect personal information (and they almost always do), you must have a published privacy policy, a designated personal information officer, and informed consent. The agent has to be able to recite these points on request. We wire them into a compliance_disclosure tool on the agent.

    Step 6 — Filter results by agent_id (the May 4 release)

    Before the May 4, 2026 update, listing a workspace's batch campaigns returned all campaigns, all agents mixed together. If you were running multiple agents (inbound, outbound reminder, outbound survey, outbound alert), sorting them was a nightmare on the dashboard side.

    The v2.46.0 SDK introduces the agent_id parameter on GET /v1/convai/batch-calling/workspace. You pass the ID of the outbound agent created in step 2, and you only get back jobs from that agent. Clean metrics, possible campaign-to-campaign comparisons, clear audit trail.

    The Python code looks like this (excerpt): client.conversational_ai.batch_calls.list(agent_id="agt_xxx", limit=50). You loop over the response, compute pickup rate, average duration, completion rate (did the conversation reach a logical final state?). These three metrics then feed into your Monday ritual dashboards.

    The trap we see most often: a dirty list

    Across the last 40 batch campaigns we've audited for Quebec SMBs, 27 had a quality incident. In 23 of those 27, the root cause was the source list — not the agent, not the outbound number, not the prompt. Duplicates, mal-formatted numbers, customers who had already been contacted by email the day before, customers who should never have been on the list in the first place.

    Our internal rule: before launch, we run a 20-number sample in test mode, listen to all 20 conversations, and write down what happened. If the agent slips even once out of 20, we stop, adjust, and relaunch. Five percent of slip-ups on 20 calls becomes 25 slip-ups on 500. At 25 slip-ups, you have a non-trivial chance of ending up on social media or in a journalist's inbox covering AI.

    What it costs and what it earns

    On the cost side: ElevenLabs charges voice agent minutes per your plan (around CAD $0.30 per minute on average for a Business tier). Twilio charges the outbound leg (around CAD $0.015 per minute for a local Canadian call). On 500 calls averaging 90 seconds, you're around CAD $280 all-in.

    On the return side: the accounting firm mentioned in the intro completed 487 of 500 calls in 4 actual hours (vs. 41 person-hours planned). Three assistants freed up for billable fiscal production at $95/hr. Net benefit in the day: roughly CAD $11,200. The campaign cost $280.

    The ratio is rarely this favorable, but even at 4 or 5 to 1, batch calling becomes an operational tool rather than an experiment. That's exactly the pivot the May 4, 2026 ElevenLabs update solidifies: from "demo toy" to "outbound campaign infrastructure."

    What now? What we run for Quebec SMBs ourselves

    This tutorial covers the technical side. The part it does not cover is orchestration: CRM hookup, handling inbound responses after the call (SMS, email, voicemail left), consolidated reporting, monthly DNCL list refresh. At TECHMA, we take the full setup for Quebec SMBs without an in-house tech team — from outbound agent creation to ElevenLabs v2.47 security lock configuration to Twilio wiring and Law 25 compliance.

    Batch calling does not replace a human commercial effort. But when you have to reach 500 customers in 48 hours, and May 4, 2026 just opened a clean agent_id filter, the math shifts. Three assistants on the phones for 5 days, or one clean batch campaign in a single afternoon. The choice is yours.

    Batch CallingElevenLabsOutbound CallsTutorialQuebec SMBComplianceMay 2026
    Share