Let your telli agent actively gather specific pieces of information from callers during a conversation.
Collect Data lets your telli agent actively gather specific pieces of information from callers during a conversation — like an email address, a license plate number, or a case number.Unlike regular conversation where the agent just listens and responds, Collect Data runs a structured, interactive process: the agent asks the caller for the information, listens to their answer, reads it back for confirmation, and only saves it once the caller confirms it’s correct.This is especially important for voice calls where things like email addresses and reference numbers are easily misheard. The agent handles the back-and-forth of “Did you say S as in Sam or F as in Frank?” automatically.
Navigate to your Agent Settings and find the Collect Data section
2
Add a Data Task
Select the type (Email, License Plate, or Custom) and configure it
3
Set the key and description
For Custom: set a key (e.g., postcode, customer_id) and describe what to collect
4
Add validation rules (optional)
For Custom: add constraints like exact length, min/max length, or regex patterns
5
Update your agent prompt
Mention when the agent should collect this data in your system prompt
We recommend only using Collect Data with the ElevenLabs Turbo 2.5 model.
What Can You Use It For?
Data Types
Validation Constraints (Custom Type Only)
How It Works During a Call
Email addresses — The agent spells it back letter by letter and confirms before saving
License plates — Currently supports German plates, including handling ambiguous area codes
Any custom data — Numbers, customer IDs, phone numbers, names, postal codes — anything you define with optional validation rules
Type
What it collects
Built-in behavior
Email
An email address
Handles noisy voice transcription, validates format, spells back for confirmation
License Plate
A vehicle license plate (currently German only)
Parses plate format, handles ambiguous area codes, confirms with caller
Custom
Any freeform data you define
You describe what to collect and optionally add validation constraints
For custom data collection, you can add rules to make sure the agent collects values in the right format:
Constraint
What it does
Example
Exact Length
Value must be exactly N characters
A 6-digit code → length 6
Min/Max Length
Value must be between N and M characters
A reference number between 4–10 characters
Alphabet
Restrict allowed character types (letters, numbers, special characters, spaces)
Numbers only for a PIN code
RegExp
Match a specific pattern with a regular expression
A postal code pattern like ^\d{5}$
You can combine multiple constraints — for example, “exactly 8 characters” + “numbers only”.
Exact Length and Min/Max Length cannot be used together on the same task.
The agent decides to collect — Based on the conversation flow and your prompt, the LLM triggers the collect data tool
A sub-agent takes over — A specialized mini-agent temporarily takes over the conversation, focused entirely on collecting that one piece of data
Interactive back-and-forth — The sub-agent asks the caller, listens, and reads the value back for confirmation. If the caller corrects something, the agent updates and confirms again
Caller confirms or declines — The caller either says “Yes, that’s correct” (confirmed) or “No, I don’t want to share that” (declined)
Control returns — The main agent takes back over and continues the conversation, aware of what was collected
Example conversation flow (email):
Agent:“Could you please give me your email address?”Caller:“Sure, it’s john dot smith at example dot com”Agent:“Let me confirm — that’s j-o-h-n dot s-m-i-t-h at e-x-a-m-p-l-e dot c-o-m. Is that correct?”Caller:“Yes, that’s right.”Agent:“Perfect, I’ve got that noted down. Now, how can I help you further?”
Where to See Collected Data
Best Practices
When to Not Use Collect Data
Good to Know
Call Details — Open any call and you’ll see a Collected Data section showing each field with its value and status
API — The collected_data field is included in call responses from the telli API, with each key mapped to { status, value }
Webhooks — The call_ended webhook includes the collected data, so you can automatically process it in your own systems (e.g., save the email to your CRM)
Be Specific in DescriptionsInstead of “Get the email”, write “Ask the caller for their email address after confirming they want to receive a confirmation email”.Guide Timing in Your PromptTell the agent when during the conversation to ask for the data. Asking at the right moment feels more natural.Use Constraints for Structured DataIf you know a case number is always 6 digits, add an exact length + numbers-only constraint. This prevents the agent from accepting invalid values.One Task Per Data PointCreate separate tasks for each piece of information you need (e.g., one for email, one for case number).Keys Must Be UniqueEach task needs a unique key. The key is used in the API and webhooks to identify the data.
While Collect Data is powerful for gathering specific pieces of information during calls, there are situations where it’s not the right fit:
You’re already getting the data elsewhere — If the caller’s information (email, phone, account ID) is already in your CRM or database, don’t use Collect Data — it’s redundant and adds unnecessary steps to the call.
You need to collect many fields at once — Collect Data works best for one piece of information at a time (email, license plate, case number). If you need a long intake form with 5+ fields, it’s better to send the caller a link via SMS or email to complete a form.
Calls are very short — Each collection involves asking, listening, spelling back for confirmation, and waiting for a “yes” — this takes 15–30 seconds per piece of data. If your average call is under 2 minutes, limit the number of data points you collect.
The data is sensitive or callers commonly refuse — The feature includes a “declined” status for callers who don’t want to share. If most callers decline (e.g., asking for personal financial info), the confirmation flow creates friction without much benefit.
You need the data during the call — Collected data is only available after the call ends (via webhook or API). If you need it mid-call to make a decision, you’ll need a different approach.
You’re not using ElevenLabs Turbo 2.5 — The documentation recommends Turbo 2.5 for the best experience. If you’re on another voice model, you may encounter transcription issues that affect accuracy.
The specialized sub-agent that handles collection is designed to be resilient to voice transcription errors — it knows that “at” might be transcribed as ”@” or that letters can sound similar
You can configure multiple collect data tasks on a single agent — the agent will handle each one when appropriate during the call
Task keys must start with a letter or underscore, followed by letters, numbers, or underscores (e.g., email, case_number, customer_id_2)
Collected data is stored on the call record permanently — it’s available in the API and webhooks even after the call ends
For the best experience, test your data collection with real voice calls to ensure the agent handles transcription errors and confirmation flows smoothly.