Each call is automatically distilled into structured fields. Define your own Custom Call Outcomes in the app, and we’ll populate them from the call transcript—reliably and in a strict schema. It turns messy call transcripts into simple fields you can trust, so you can search, filter, and act on calls without rereading them.
At a glance
Add shared fields under Settings → Outcomes, or agent-specific fields under Post-processing → Custom call outcomes
Choose a type (Boolean, Text, Number, Category)
Select Reason to add an optional explanation for each value
View results in Conversation History and receive them via webhook
Define your own call outcomes for the information you need to capture. Account outcomes are shared across your agents; agent-specific outcomes apply to one agent. Their results appear in Conversation History. Every account also includes a default conversation outcome (Boolean) that records whether a two-way conversation took place. You can edit or reset its instructions, but not rename, change the type of, or delete it.
call_analysis and call_outcome are deprecated and will be removed on 1st of February 2027. Both fields are retained for compatibility until then. Update your integrations to use outcomes before the removal date.
A dedicated extraction model analyzes the conversation transcript and fills your fields:
Schema-strict: output always matches the field type you selected.
No guessing: if a value isn’t clearly supported by the transcript, it’s null.
Robust to STT: built for speech-to-text imperfections and everyday phrasing.
Date-aware: the model knows the call’s date, weekday, and local time, so relative wording like “tomorrow” or “next Friday” and dates said without a year resolve against the day of the call.
If Reason is enabled for a field, we also return a short explanation for the chosen value.
For a shared field, go to Settings → Outcomes → Create outcome. For an agent-specific field, go to Agents → [agent] → Post-processing → Custom call outcomes → Add.
Name the field (use snake_case, e.g., lead_conversion).
Boolean — lead conversionSet to true only if the customer clearly agreed to be contacted again (explicitly or by accepting next steps). Otherwise set to false.
Category — lost reasonSelect the single best explanation for why the customer is not proceeding.
Choose NO_INTEREST if the customer is no longer interested in the product.
Choose PREVIOUSLY_CONTACTED if the customer already been contacted about this topic
Choose TOO_EXPENSIVE if the customer expresses reluctance about the price of the product
Text — follow-up timingReturn the agreed follow-up time concisely (e.g., Thursday 09:00).
Number — quantity requestedReturn the total number of units requested.
Text — insurance provider (string example)Return the exact insurance provider the customer says they are a member of (e.g., Insurance A, Insurance B, Insurance C).
Best practices
One decision per field.
Prefer Category over Text when you’ll filter or chart results.
Include brief examples in the instructions if edge cases exist.
Remember that the analysis is based on the call transcript and the date and time of the call.
Get Call, List Calls, and the call_ended webhook send outcomes for all accounts. The field contains account and agent call outcomes as an array of { key, dataType, value, reason? } entries. When both sources return the same key, only the agent result is included.Legacy system results from call_analysis are not automatically included in outcomes. Create account outcomes under Settings → Outcomes for any information you still need.The deprecated fields retain their existing formats for compatibility until their removal on 1st of February 2027. The following example includes these compatibility fields.
{ "outcomes": [ { "key": "lead_conversion", "dataType": "boolean", "value": true, "reason": "Customer confirmed they want to be contacted." }, { "key": "lost_reason", "dataType": "category", "value": "NO_INTEREST", "reason": "Customer explicitly mentioned that they are not planning to buy right now." }, { "key": "insurance_provider", "dataType": "string", "value": "Insurance A", "reason": "Customer stated their insurer explicitly." } ], "call_outcome": { "lead_conversion": { "value": true, "reason": "Customer confirmed they want to be contacted.", "fieldSchema": { "type": "boolean" } }, "lost_reason": { "value": "NO_INTEREST", "reason": "Customer explicitly mentioned that they are not planning to buy right now.", "fieldSchema": { "type": "string" } }, "insurance_provider": { "value": "Insurance A", "reason": "Customer stated their insurer explicitly.", "fieldSchema": { "type": "string" } } }, "call_analysis": { "interest": { "value": true, "details": null } }}
Notes:
Reason appears only if enabled for that field.
Fields may be null when the transcript doesn’t clearly support a value.
Was this page helpful?
Assistant
Responses are generated using AI and may contain mistakes.