Post-Call Analysis
Turn transcripts into structured, measurable data.
Post-Call Analysis is how you turn raw conversations into measurable answers. After every call ends, the platform reads the transcript and fills in structured fields you defined — "did they book?", "what was the budget?", "did they sound frustrated?" — without you ever listening to the recording.
Why this matters more than transcripts. A transcript tells you what was said. Post-call analysis tells you what happened. If you're running 1,000 calls a week, nobody is going to read 1,000 transcripts — but everyone can read a dashboard showing "62% booked, 18% disqualified, 20% need follow-up." Set this up before you launch anything serious.
The good news: it's the easiest part of the platform to configure. Five minutes of setup gives you metrics for life.
Where to configure
From the dashboard: View All Finn → click your Finn → Edit → Post-Call Analysis tab.
You'll see a list of fields you've already defined (empty if this is a new Finn) and an Add Field button.
How it works
After every call:
- The platform takes the full transcript of the conversation.
- It runs an AI pass that reads the transcript and answers each question you defined.
- The answers get saved to the call's record and shown in Analytics.
- They're also available via webhook or API for downstream automation.
This happens automatically. You don't trigger anything — every completed call gets analyzed within a minute or two of hanging up.
Defining a field
Each field has three parts:
| Part | What it does | Example |
|---|---|---|
| Field name | The internal key used in analytics and exports. Use snake_case. | appointment_booked |
| Question to AI | What you want the AI to figure out from the transcript. Phrase it as a natural question. | "Did the caller successfully book an appointment?" |
| Answer type | What kind of value you expect back. The AI is constrained to return this type. | Yes/No |
The clearer your question, the better the answer. "Did the caller successfully book an appointment?" is way better than "Booking?".
Answer types
| Type | What you get | When to use |
|---|---|---|
| Yes / No | true or false | Did something specific happen? |
| Enum | One of N choices you defined | Categorize into known buckets (intent, sentiment, urgency level) |
| Free text | Whatever the caller said (or whatever the AI inferred) | Open-ended captures — pain points, preferred callback time, names |
| Number | A numeric value | Scores, quantities, prices mentioned |
| Date | A date or date+time | When did the caller want their appointment? When did the issue start? |
A worked example — sales qualification
You're running an outbound qualifier campaign. After each call, you want to know:
| Field | Question | Type |
|---|---|---|
qualified | Based on company size and existing operations, does the caller meet our qualification criteria? | Yes / No |
company_size | How many employees did the caller mention their company has? | Free text |
decision_maker | Did the caller indicate they are the decision-maker? | Yes / No |
budget_range | What budget range did the caller mention, if any? | Free text |
timeline | What buying timeline did they mention? | Enum: immediate / this quarter / this year / no timeline |
pain_point | What's the main operational pain point they mentioned? | Free text |
meeting_booked | Did the caller agree to a follow-up meeting with a human rep? | Yes / No |
objection_raised | Did the caller raise an objection? If so, what was it? | Free text (nullable) |
After 100 calls run through this, you can answer questions like:
- "What % of leads were qualified?"
- "Of qualified leads, what % booked a meeting?"
- "What's the most common objection?"
- "Which timeline bucket converts best?"
You'd never get this from listening to calls one at a time.
Practical tips
Start with 5 fields, not 20
Tempting to define every possible question upfront. Don't. Start with the 3-5 fields you actually need to make decisions. You can add more later, and they'll be populated for all future calls.
One question per field
Don't combine questions. "Did they book and what time?" should be two fields: booked (yes/no) and booking_time (date). Combined questions confuse the AI and produce messy data.
Be specific about success criteria
"Was the call successful?" is too vague. The AI's answer depends on what "successful" means — which the AI doesn't know. Replace with "Did the caller agree to a follow-up?" or "Did the caller make a purchase commitment?" — concrete, measurable.
Phrase yes/no questions as yes/no
"Did X happen?" → reliable yes/no. "How did X go?" → free text, harder to analyze.
If you want a yes/no answer, ask a yes/no question.
Use enum for known categories
Don't use free text for things that fall into clear categories. Use an enum.
Bad: free text field intent — you'll get "booking", "Book", "wants appointment", "appointment booking", "want to book" all as different values, impossible to chart.
Good: enum field intent with values book / reschedule / cancel / question / complaint / other. Now you can chart it.
Editing fields after launch
You can add, edit, or remove post-call analysis fields at any time.
| Change | What happens |
|---|---|
| Add a new field | Populated for all calls completed after the field was added. Older calls remain blank for it. |
| Edit a field's question | Future calls use the new question. Past calls keep their old extracted value (not re-extracted). |
| Remove a field | Stops being extracted. Historical values remain in the data unless you also delete the call records. |
If you want to backfill a new field across historical calls, contact support — we can run a one-off re-analysis pass.
Where the results appear
In Analytics
Deployment Analytics → [your deployment] shows aggregate distributions for every field:
- Yes/No fields → bar chart of true vs false counts
- Enum fields → stacked bar of each category
- Number fields → histogram + median
- Free text → word cloud + sample of 5
- Date fields → timeline distribution
In the per-call sidebar
Click any call to open the Data Extractor Sidebar. Every post-call field is listed with its extracted value. If a value looks wrong, click it to see the AI's reasoning + the transcript snippet it relied on.
In exports
CSV exports include every field as a column. PDF reports show top-line distributions.
In webhooks
The call.analyzed webhook event includes all post-call fields in its payload. Wire this up to push results into your data warehouse, CRM, or alerting system. See Integrations → Webhooks.
Confidence + accuracy
The AI isn't always right. A few things to know:
- Confidence scores — every extracted value has a confidence score. Low-confidence values are flagged in the sidebar. You can filter exports to only include high-confidence rows.
- Failed extractions — if the transcript doesn't contain enough information to answer the question, the field is marked as "extraction failed" rather than guessed. Common reason: the call ended before the topic came up.
- Hallucination protection — for free-text fields, the AI is constrained to use exact quotes from the transcript where possible, not invent new content.
- Manual override — for any critical decision, you can edit the extracted value manually from the sidebar. Edits are flagged as human-corrected in exports.
Cost
Post-call analysis is included in every plan. No extra charge per field, no surcharge per call.
You can define unlimited fields per Finn (up to a soft cap of 50 — beyond that, contact support to enable higher limits).
Common patterns by use case
Lead qualifier
qualified(yes/no)budget_range(free text)decision_maker(yes/no)meeting_booked(yes/no)objection(free text, nullable)
Receptionist
intent(enum: book / reschedule / question / complaint / other)appointment_booked(yes/no)transferred(yes/no)caller_sentiment(enum: positive / neutral / negative)follow_up_needed(yes/no)
Appointment reminder
confirmed(yes/no)rescheduled(yes/no)cancelled(yes/no)opt_out(yes/no)
Customer satisfaction survey
nps_score(number, 0-10)top_positive(free text)top_negative(free text)would_recommend(yes/no)
Debt collection
outcome(enum: paid / payment-plan / dispute / refusal / no-answer)amount_paid(number)disputed(yes/no)callback_scheduled(yes/no, date)
Common mistakes
| Mistake | Why it fails | Fix |
|---|---|---|
| Too many fields | Cognitive overhead, harder to spot what matters | Start with 5 |
| Combined questions | AI gives messy or empty answers | One question per field |
| Vague success metrics | "Was the call successful?" depends on interpretation | Define success concretely |
| Free text for enums | Impossible to chart or filter cleanly | Use enum with explicit options |
| Adding fields mid-campaign and expecting backfill | Only future calls get the new field | Add fields before launch |
Next
- Analytics → — visualize and drill into the data your fields produce.
- Integrations → Webhooks — push field values to external systems.
- Creating a Finn → — the broader Finn configuration this fits into.
Was this page helpful?
Still stuck or have feedback?
Email support@hirefinn.ai or use the chat bubble in the bottom-right corner — it's a Finn that knows the Academy cold.