What post-call analysis does
After a call ends, Finn reads the transcript and fills in structured fields you defined. You get answers like "did they book?", "what budget did they mention?", "did they agree to a follow-up?" without listening to the recording.
A transcript records what was said. Post-call analysis records what happened. At 1,000 calls a week nobody reads 1,000 transcripts, but anyone can read "62% booked, 18% disqualified, 20% need follow-up". Configure this before you launch anything serious.
Where to configure it
Fields are defined in the dashboard, not the API. Go to View All Finn → your Finn → Edit → Post-Call Analysis. You will see the fields already defined (empty for a new Finn) and an Add Field button.
There is no documented endpoint for creating or editing analysis fields. Reading extracted values is covered under call logs and webhooks.
How extraction runs
- The call completes and the full transcript is assembled.
- An AI pass reads the transcript and answers each question you defined.
- Answers are written to the call record and shown in analytics.
- The
call.analyzedwebhook event fires with the fields in its payload.
Nothing triggers this. Every completed call is analyzed within a minute or two of hangup. If you poll the call record immediately after the call ends, the analysis fields may not be populated yet. Wait for call.analyzed instead of polling. See webhook events.
Defining a field
| Part | What it does | Example |
|---|---|---|
| Field name | Internal key used in analytics and exports. Use snake_case. | appointment_booked |
| Question to AI | What you want the AI to determine from the transcript. Phrase as a natural question. | "Did the caller successfully book an appointment?" |
| Answer type | The value type the AI is constrained to return. | Yes/No |
Answer types
| Type | Value you get | Use for |
|---|---|---|
| Yes / No | true or false | Did a specific thing happen |
| Enum | One of N choices you defined | Known buckets: intent, sentiment, urgency |
| Free text | Quoted or inferred text | Open captures: pain points, names, callback times |
| Number | Numeric value | Scores, quantities, prices mentioned |
| Date | Date or date+time | Requested appointment, issue start date |
What goes wrong
Vague success criteria. "Was the call successful?" has no fixed meaning, so the AI invents one. Ask "Did the caller agree to a follow-up?" instead.
Combined questions. "Did they book and what time?" produces messy or empty answers. Split into booked (yes/no) and booking_time (date).
Free text where an enum belongs. A free-text intent field returns "booking", "Book", "wants appointment", "appointment booking" as distinct values. You cannot chart that. Use an enum with fixed values: book / reschedule / cancel / question / complaint / other.
Non-yes/no phrasing on a yes/no field. "How did X go?" is not a yes/no question. Ask "Did X happen?".
Too many fields. Start with 3-5 fields you make decisions on. You can add more later.
Editing fields after launch
| Change | Effect |
|---|---|
| Add a field | Populated only for calls completed after the field was added. Older calls stay blank. |
| Edit a field's question | Future calls use the new question. Past calls keep their old value and are not re-extracted. |
| Remove a field | Extraction stops. Historical values remain in the data unless you delete the call records. |
Backfilling a new field across historical calls is not self-serve. Contact support to request a one-off re-analysis pass.
Where results appear
Deployment Analytics shows aggregate distributions per field: yes/no as a true-vs-false bar chart, enum as a stacked bar, number as a histogram plus median, free text as a word cloud plus five samples, date as a timeline distribution.
Per-call sidebar. Click any call to open the Data Extractor Sidebar. Every field is listed with its extracted value. Click a value to see the AI's reasoning and the transcript snippet it used.
Exports. CSV includes every field as a column. PDF reports show top-line distributions.
Webhooks. The call.analyzed event carries all fields. Use it to push results into a warehouse, CRM, or alerting system. See webhook events and webhook security.
Accuracy limits
The AI is not always right. Four things to know:
- Confidence scores. Every extracted value carries one. Low-confidence values are flagged in the sidebar, and you can filter exports to high-confidence rows only.
- Failed extractions. If the transcript lacks the information, the field is marked "extraction failed" rather than guessed. Most common cause: the call ended before the topic came up. A field failing disproportionately points at the question wording or the agent's script, not the extractor.
- Hallucination protection. Free-text fields are constrained to exact transcript quotes where possible.
- Manual override. You can edit an extracted value from the sidebar. Edits are flagged as human-corrected in exports.
Cost and limits
Post-call analysis is included in every plan. No per-field charge, no per-call surcharge. The soft cap is 50 fields per Finn. Contact support for a higher limit.
Related
- Call logs — where extracted values land per call
- Call outcomes — how outcomes relate to your success field
- Evaluations — scoring agent behavior rather than call content
- Webhook events — the
call.analyzedpayload