Outbound voice agents rarely fail on voice quality. That is the one part ElevenLabs has genuinely solved. They fail because the agent talks over the customer, because the trunk garbles DTMF, because the call outcome never reaches the CRM, or because nobody checked whether you were allowed to dial that number in the first place.
These are build notes from shipping ElevenLabs conversational AI outbound calling against real phone numbers. I am covering the load-bearing parts: telephony, agent config, latency, barge-in, CRM writeback, compliance and cost. Vendor dashboards get redesigned every quarter. The architecture underneath does not.
What is ElevenLabs conversational AI outbound calling?
ElevenLabs conversational AI outbound calling is a hosted voice agent that dials a number, holds a real-time spoken conversation, and hands you a transcript plus structured results at the end. ElevenLabs orchestrates speech-to-text, the language model and text-to-speech behind one WebSocket session so you are not stitching three vendors together yourself.
Think of the system as three layers. The agent holds the prompt, voice, tools and knowledge base. The phone number binds that agent to the PSTN, either through the native Twilio integration or a SIP trunk you own. The caller is your own code, a batch calling job, or an automation platform triggering a dial.
"Nobody has ever cancelled a voice AI project because the voice sounded slightly synthetic. They cancel because the agent interrupted a customer mid-sentence and the CRM said the call went fine."
Native Twilio integration or your own SIP trunk?
Use the native Twilio integration for pilots and low volume, and bring your own SIP trunk once you need carrier control, existing numbers, or a specific route. ElevenLabs supports both, and batch calling works either way, so this decision is reversible.
The ElevenLabs SIP trunking docs are specific about the boundary conditions. Their SIP deployment sends and receives audio as G711 at 8kHz or G722 at 16kHz, so your trunk must support that natively or resample. Signalling authenticates either by digest credentials or by IP allowlist, with digest recommended. Media encryption can be disabled, allowed or required, and required plus TLS transport is the configuration to aim for.
How the two telephony paths differ once you are past the demo.
| Dimension | Native Twilio integration | Bring-your-own SIP trunk |
|---|---|---|
| Time to first call | Minutes. Paste credentials, pick a number, dial. | Hours to days. Trunk config, auth, firewall, test calls. |
| Number portability | Numbers live in Twilio | Keep existing carrier numbers and local presence |
| Carrier control | Whatever Twilio routes | You choose route, caller ID reputation and failover |
| Codec surface | Handled for you | You must support G711 8kHz or G722 16kHz or resample |
| Security posture | Vendor managed | Digest auth or IP ACL, plus TLS and required media encryption |
| Best for | Pilots, single market, under a few thousand calls a month | Regulated industries, multi-country dialling, existing telco contracts |
Whichever path you take, test DTMF early. Outbound calls hit IVR menus constantly, and a trunk that mangles tones ruins every call that reaches a phone tree.
What actually goes into the agent config?
Scope one agent to one job. The single biggest quality win in outbound voice is refusing to build a general-purpose agent that qualifies leads, books appointments, answers billing questions and handles complaints in one prompt.
The config fields that decide whether the call goes well:
- System prompt scoped to a single objective, with an explicit stop condition and an explicit refusal path for anything off-topic.
- First message with dynamic variables injected at call creation, so the agent opens with the person's name, the reason for the call, and the disclosure that it is an AI assistant.
- Tools: end call, transfer to a human, and one or two server tools that read or write your systems mid-call.
- Data collection fields, so the platform extracts structured values from the transcript instead of leaving you to regex it later.
- Turn and silence timeouts, plus a hard maximum call duration. Without a ceiling, a confused agent will happily burn ten minutes of billed audio.
Dynamic variables are the piece people underuse. Passing the CRM record into the call at creation time removes an entire class of hallucination, because the agent never has to guess the account status, the last order, or the appointment slot it is confirming.
If you want a visual way to lay out branches and handoffs before writing code, that is the problem I built AgentFlow for. Call flows are easier to argue about on a canvas than in a prompt file.
What latency budget does an outbound voice agent need?
Measure one number: time from the moment the caller stops speaking to the first audio byte coming back. In the builds I have shipped, once that gap stretches past roughly a second, people start repeating themselves or saying hello, and the conversation degrades from there.
Chase the tail, not the average. A healthy median hides the turns where a slow CRM lookup left the caller listening to dead air.
Where the response gap comes from, and the lever you actually control at each stage.
| Stage | What happens | Lever you control |
|---|---|---|
| Endpointing | Deciding the caller has finished speaking | Silence threshold. Too short interrupts, too long feels sluggish. |
| Transcription | Finalising the caller turn into text | Streaming partials rather than waiting for a final transcript |
| Model first token | LLM starts generating the reply | Smaller model, shorter system prompt, trimmed conversation history |
| Tool calls | Agent queries your CRM or database mid-turn | Aggressive timeouts, cached lookups, filler phrase while waiting |
| Speech synthesis | First audio chunk generated | Streaming TTS, low-latency model, short opening clause |
| Trunk and network | Packets crossing your SIP path | Region placement, codec choice, jitter buffer tuning |
The single cheapest latency fix is prompt length. Every turn re-sends your system prompt, so a bloated prompt taxes every single response for the entire call. Cut it, then measure again before touching anything else. The same discipline applies to model selection generally, which I go into on the OpenAI integration page.
How do you stop the agent talking over people?
Interruption handling is a threshold problem, not a model problem. The agent must stop speaking the instant the caller genuinely starts, while ignoring the noises that are not real turns.
The four failure modes I tune for on every outbound build:
- Backchannel false positives. Someone says mhm or right while the agent is mid-sentence, and a naive barge-in setting kills the agent's turn. Filter short low-energy utterances.
- Slow speakers. People pause mid-sentence to think. A tight silence threshold cuts them off and makes the agent feel rude.
- Voicemail. If the agent cheerfully pitches an answering machine, you pay for the minutes and get nothing. Detect voicemail, leave a short scripted message or hang up, and tag the outcome.
- IVR trees. Outbound B2B dialling hits switchboards. Decide upfront whether the agent navigates the menu with DTMF or drops the call as unreachable.
There is also a design answer, not just a config answer. Short agent turns are interrupted less, because the caller gets a chance to speak naturally. If your agent monologues for fifteen seconds, no amount of barge-in tuning saves the call. The same asymmetry shows up in text channels, which I unpacked in AI chatbot vs live chat.
How do call outcomes get into the CRM?
Through a post-call webhook that writes a structured outcome, not a transcript dump. Define the outcome taxonomy before you build the agent, because the taxonomy is what your sales team will actually filter on.
The writeback pipeline I use:
- 1Define a closed set of outcomes first: connected and qualified, connected and not interested, callback requested, voicemail, no answer, wrong number, do not call.
- 2Configure data collection fields on the agent so the platform extracts the structured values from the conversation rather than leaving you to parse prose.
- 3Receive the post-call webhook on your own endpoint. Verify the signature before you trust a single field.
- 4Key everything on the conversation identifier and make the handler idempotent. Webhooks retry, and duplicate CRM notes destroy trust in the data fast.
- 5Map outcome to a CRM stage transition, not just a note. A call that changes nothing in the pipeline was a call nobody will read.
- 6Store the transcript and recording URL against the contact record, so a human can check the agent's claim in ten seconds.
- 7Push a do-not-call outcome straight into your suppression list, synchronously, before anything else in the handler runs.
A minimal FastAPI handler for that webhook. Verify, normalise, suppress, then write.
from fastapi import FastAPI, Request, HTTPException
app = FastAPI()
OUTCOMES = {
"qualified", "not_interested", "callback",
"voicemail", "no_answer", "wrong_number", "do_not_call",
}
@app.post("/webhooks/call-completed")
async def call_completed(request: Request):
raw = await request.body()
if not valid_signature(request.headers, raw):
raise HTTPException(status_code=401, detail="bad signature")
event = await request.json()
conversation_id = event["conversation_id"]
if already_processed(conversation_id):
return {"status": "duplicate"}
fields = event.get("analysis", {}).get("data_collection", {})
outcome = fields.get("outcome", "no_answer")
if outcome not in OUTCOMES:
outcome = "no_answer"
if outcome == "do_not_call":
suppress(event["to_number"])
upsert_crm(
phone=event["to_number"],
outcome=outcome,
transcript_url=event.get("transcript_url"),
duration_seconds=event.get("call_duration_secs", 0),
)
mark_processed(conversation_id)
return {"status": "ok"}If your CRM is GoHighLevel, the writeback is a pipeline stage move plus a tagged note, and the callback outcome should create the follow-up task automatically. I have built that loop before on the GoHighLevel AI calling platform, and the mechanics of the API side are on the GoHighLevel integration page.
Is AI outbound calling legal? TCPA, consent and disclosure
In the United States, an AI-generated voice on an outbound call is treated as an artificial voice under the TCPA. The FCC adopted a Declaratory Ruling on 2 February 2024, released on 8 February, confirming this, which means calls using AI voices require prior express consent from the called party, and telemarketing calls require that consent in writing. This is not legal advice, and you should have counsel review your specific programme.
Treat compliance as code, not as a policy document. Every control below is something the system enforces at dial time.
Compliance controls that belong in the dialer, not in a PDF:
- Consent artifact stored per contact: what they agreed to, when, through which form, and the source IP or recording. If you cannot produce it, you do not have it.
- Suppression check immediately before every dial, against internal do-not-call plus the applicable national registry, not against a nightly export.
- Calling window enforcement in the recipient's local timezone, derived from area code plus contact address, not from your server clock.
- AI disclosure in the first message. Say it is an automated assistant. It costs you two seconds and it removes an entire category of complaint.
- Recording consent handled for two-party consent jurisdictions before recording begins.
- An always-available opt-out. If someone says take me off your list, the agent invokes a tool that suppresses the number in that turn and then ends the call.
- Full call logging with retention: audio, transcript, consent reference, agent version. Disputes are won with records.
Rules vary by jurisdiction and keep moving. UK and UAE programmes carry their own direct marketing constraints, and several US states layer requirements on top of the federal baseline. Make the controls configurable per market.
How much does ElevenLabs outbound calling cost per minute?
Cost is a stack of meters, not one number. You pay for agent conversation minutes, possibly for model tokens, for carrier minutes on the telephony leg, and for number rental. Check the official ElevenLabs pricing page and your carrier's rate card before you budget, because both move.
The cost layers to model separately before you run a campaign.
| Layer | How it bills | What moves it |
|---|---|---|
| Agent conversation minutes | Per minute of connected audio, on a plan tier with a concurrency limit | Call duration and how many calls run in parallel |
| Language model | Bundled or billed per token depending on the model you select | System prompt length, history retained, tool call volume |
| Telephony | Per minute by destination, plus per-number monthly rental | Country, mobile versus landline, local presence numbers |
| Wasted minutes | Same rate as productive minutes | Voicemail pitches, IVR loops, rambling agents with no duration cap |
The number that matters is cost per completed outcome, not cost per minute. Multiply cost per connected minute by average handle time, then divide by your connect rate and your outcome rate. A campaign with an eleven percent connect rate is paying for roughly nine dialling attempts for every conversation it gets, and the attempts that never connect still cost carrier fees.
This is also where duration caps pay for themselves. Cutting average handle time by twenty seconds across ten thousand calls removes over fifty hours of billed audio, which is a bigger saving than any vendor negotiation you are likely to win.
What I would tell you before you start
Run the pilot on a list you already have consent for, with one narrow objective, and a human listening to every call for the first two days. Everything you learn in those two days is worth more than a month of prompt iteration.
The mistakes I keep seeing on outbound voice projects:
- Launching without voicemail detection, then wondering why the connect statistics look great and the pipeline does not move.
- Skipping the outcome taxonomy, ending up with a thousand transcripts and no report.
- Treating consent as a marketing problem rather than a dialer feature.
- Testing only on clean lines. Test on mobile, on speakerphone, in a car, and through a switchboard.
Outbound voice is one of the few AI builds where the model is the easy part. Scoping and shipping this is what my AI engineering services cover, and the same architecture drives the sales automation I build for SaaS teams. Still deciding whether voice is the right channel at all? Start with how to choose an AI chatbot for a small business.
Key takeaways
- ElevenLabs conversational AI outbound calling needs a phone number bound to the agent, through native Twilio for pilots or your own SIP trunk for carrier control.
- ElevenLabs documents G711 8kHz and G722 16kHz audio for SIP deployments, with digest authentication and required media encryption as the recommended posture.
- Optimise the tail of the response gap, not the average, and cut the system prompt before tuning anything else.
- Barge-in tuning fails without voicemail and IVR detection, because both quietly burn billed minutes.
- The FCC's February 2024 Declaratory Ruling treats AI-generated voices as artificial voices under the TCPA, so prior express consent is required.
- Model cost per completed outcome, since connect rate and average handle time dominate the per-minute rate.
Frequently asked questions
- How much does ElevenLabs conversational AI outbound calling cost per minute?
- It stacks several meters: agent conversation minutes on a plan tier, language model usage depending on the model you pick, carrier minutes for the telephony leg, and monthly number rental. Rates change, so check the official ElevenLabs pricing page and your carrier rate card. Budget on cost per completed outcome instead.
- Can I use my own phone numbers with ElevenLabs outbound calls?
- Yes, through SIP trunking. ElevenLabs supports standards-compliant SIP trunk providers, so you can keep existing carrier numbers and local presence. Their docs specify G711 8kHz or G722 16kHz audio, digest authentication or IP allowlisting for signalling, and configurable media encryption with TLS transport recommended.
- What is the difference between the Twilio integration and SIP trunking?
- The native Twilio integration is faster to launch and vendor managed, with numbers living in Twilio. A bring-your-own SIP trunk takes longer to configure but gives you carrier choice, number portability, routing control and failover. Batch calling works with either, so you can start on Twilio and migrate later.
- Is AI outbound calling legal under TCPA?
- In the United States it is legal only with proper consent. The FCC adopted a Declaratory Ruling on 2 February 2024, released 8 February, confirming that AI-generated voices count as artificial voices under the TCPA, requiring prior express consent, and written consent for telemarketing. Enforce suppression lists, calling windows and disclosure in code, and consult counsel.
- What latency is acceptable for an AI voice agent on a phone call?
- Measure the gap from the caller finishing their sentence to the first audio byte returning. In my builds, once that gap passes roughly a second, callers start repeating themselves. Optimise the ninety-fifth percentile rather than the median, because slow tool calls and long prompts create the worst turns.
- How do I stop an AI voice agent from interrupting the caller?
- Tune the endpointing silence threshold, then filter short low-energy utterances so backchannels like mhm do not cancel the agent's turn. Equally important, write shorter agent turns. A fifteen-second monologue invites interruption no matter how well the barge-in thresholds are configured.
- Can ElevenLabs outbound calls write results back to a CRM?
- Yes, through a post-call webhook. Configure data collection fields on the agent so structured values are extracted from the conversation, then verify the webhook signature, deduplicate on the conversation identifier, and map the outcome to a CRM stage change. Do-not-call outcomes should hit your suppression list first.
- Is an AI outbound calling agent worth it compared to hiring SDRs?
- It is worth it for high-volume repetitive calls with a narrow objective: appointment reminders, list qualification, renewals, no-show recovery. It is not worth it for complex discovery or negotiation. The economics depend on connect rate and average handle time, not on the headline per-minute price.
Sources
Written by Syed Husnain Haider Bukhari
AI engineer, data scientist, and founder of Revolutionary Technologies LLC. Ships production AI agents, automations, and data platforms for teams in the US, UK, and UAE — including AgentFlow, AI Walay, and ProLeads.
Get in touch →Related pages
Want this built instead of researched?
Book a 30-minute scoping call. You get a one-page plan and a fixed-scope quote within 48 hours.
Start a conversation