A 10-person UK professional services firm ran 47 discovery calls in January. All were recorded and transcribed via Zoom. By February, 44 of those transcript files were sitting unread in a shared Drive folder. Three had been manually reviewed. The budget, authority, need, and timeline signals from those 44 conversations — representing roughly £380,000 of potential pipeline — had never reached HubSpot. Reps remembered the calls they were excited about. The ones they had forgotten were not necessarily the weakest leads.
This is not unusual. It is the default. Sales calls produce 7,000–9,000 words of transcript per 60 minutes. Extracting BANT signals, objections, action items, and next-step commitments from that volume manually does not scale past two or three calls a week per rep. The extraction pipeline we build at Quantum Automations runs in under 60 seconds per transcript and costs roughly £0.03 in LLM API tokens — less than the coffee consumed during the call it processes.
What a transcript contains that CRMs don't capture: the BANT signals hidden in the conversation
CRM fields capture what reps enter after the call ends. That is typically deal stage, a rough note in the description field, and — if you're lucky — a next-action date. What transcripts contain is entirely different.
Budget signals rarely arrive as a direct question-and-answer pair. A prospect says "we spent about £40k on this last year but it didn't stick" and that number is gone by the time the rep logs the call. Authority signals surface in asides: "I'll need to run the final decision by our operations director" or "our CFO has sign-off on anything above £20k." Need signals are embedded in the workarounds prospects describe: "currently we export to Excel, clean it manually, then re-import three times a week." Timeline signals often appear as organisational context: "we're presenting options to the board in September."
None of this maps to a CRM field without extraction. The rep knows it in the moment. Two weeks later, they've moved on to the next call and the signal is gone.
Transcript source selection: Fireflies, Otter, Gong Engage, and native Zoom transcription compared
The choice of transcription tool matters more than the choice of LLM. Extraction accuracy depends heavily on speaker diarisation quality and whether the tool exports a structured format you can parse programmatically.
| Tool | Speaker diarisation | Webhook support | Export format | UK accent handling | Approx. cost |
|---|---|---|---|---|---|
| Fireflies.ai | Good | Yes (real-time) | JSON + markdown | Good | £8–£15/user/mo |
| Otter.ai | Fair | Yes (paid tier) | JSON + SRT | Fair | £8–£16/user/mo |
| Gong Engage | Excellent | Yes (REST API) | Structured JSON | Excellent | Custom enterprise |
| Zoom native | Fair | None | VTT / plain text | Fair | Included in Zoom |
Our recommendation for UK B2B sales teams under 20 reps: Fireflies.ai. The webhook fires within two minutes of a call ending, the Fireflies webhook documentation covers payload structure clearly, and the JSON output includes speaker labels, timestamps, and a raw transcript you can feed directly to an LLM. Gong is more accurate but costs ten times as much and requires enterprise procurement. Native Zoom transcription is the weakest option for automated extraction: no webhook exists, the VTT format requires a cleaning step before you can parse it, and diarisation fails regularly on calls with more than two speakers in the same room.
Structured extraction prompt design: getting BANT, objections, and action items reliably
The prompt architecture that produces consistent results is a two-pass approach: pass one extracts raw evidence strings from the transcript; pass two classifies and scores them. Combining both in a single pass increases hallucination rate on transcripts over 6,000 words.
Here is the system prompt for pass one, run against the full Fireflies JSON transcript field:
You are a sales intelligence assistant. Extract evidence of BANT signals
from the following B2B sales call transcript.
Return a JSON object with this exact schema:
{
"budget": {
"evidence": ["verbatim quote 1", "verbatim quote 2"],
"implied_range": "£X–£Y or null",
"confidence": 0.0–1.0
},
"authority": {
"decision_maker_name": "string or null",
"decision_maker_role": "string or null",
"evidence": ["verbatim quote"],
"confidence": 0.0–1.0
},
"need": {
"primary_pain": "string",
"current_workaround": "string or null",
"evidence": ["verbatim quote"],
"confidence": 0.0–1.0
},
"timeline": {
"target_date": "YYYY-MM or null",
"urgency": "high|medium|low|unknown",
"evidence": ["verbatim quote"],
"confidence": 0.0–1.0
},
"objections": ["string"],
"action_items": [
{"owner": "rep|prospect", "action": "string", "due": "YYYY-MM-DD or null"}
],
"next_step": "string or null"
}
Return only valid JSON. If no evidence exists for a field, return null
or an empty array. Do not infer beyond what is explicitly stated in
the transcript.
The instruction "do not infer beyond what is explicitly stated" is load-bearing. Without it, GPT-4o and Claude will fill empty BANT fields with plausible-sounding guesses based on industry patterns — and those guesses will corrupt your CRM data at volume.
Confidence scoring for extracted fields: what to auto-write vs queue for rep review
Every extracted field returns a confidence score between 0 and 1. The routing logic is straightforward:
- ≥ 0.85: auto-write to CRM with source citation (transcript URL and timestamp)
- 0.60–0.84: write to a staging property, send a Slack notification to the deal owner for review within 24 hours
- < 0.60: append to CRM notes field only, labelled as unverified signal
In practice, timeline and budget confidence reach above 0.85 when the prospect uses specific numbers or dates. Authority confidence drops when the decision-maker is mentioned in the third person ("our director will decide") rather than named directly. Calibrate your thresholds by running 20 historical transcripts and comparing LLM output against what the rep actually recalls from each call.
CRM field mapping: turning transcript output into HubSpot properties or Salesforce fields
For HubSpot, create custom deal properties before the pipeline runs. Here is the field mapping configuration used in our n8n workflow:
{
"hubspot_field_map": {
"budget.implied_range": "bant_budget_range",
"authority.decision_maker_name": "bant_authority_name",
"authority.decision_maker_role": "bant_authority_role",
"need.primary_pain": "bant_primary_pain",
"timeline.target_date": "bant_timeline_target",
"timeline.urgency": "bant_timeline_urgency",
"next_step": "bant_next_step",
"confidence_avg": "bant_extraction_confidence"
},
"write_strategy": "patch",
"source_field": "bant_source_transcript_url"
}
For Salesforce, map to Opportunity custom fields using type: Text(255) for most fields and type: Picklist for urgency values. Always write the source transcript URL alongside each extracted value — without provenance, a rep cannot verify an extracted field that looks wrong. The HubSpot Properties API covers the batch property creation endpoint you need to pre-provision these fields before the pipeline runs for the first time.
Automation pipeline in n8n: webhook from transcript tool to LLM to CRM write
The end-to-end flow in n8n:
Fireflies webhook
│
Parse JSON node
│
Chunk transcript (>6k tokens: split at speaker-turn boundaries)
│
HTTP Request: Pass 1 — extract evidence strings (GPT-4o-mini)
│
HTTP Request: Pass 2 — score and classify (GPT-4o-mini)
│
Switch node (confidence router)
├── >= 0.85 → HubSpot API PATCH (deal properties, includes transcript URL)
├── 0.60–0.84 → HubSpot PATCH (staging fields) + Slack notification to owner
└── < 0.60 → HubSpot PATCH (notes field only, flagged unverified)
The chunking step matters for calls over 45 minutes. Fireflies transcripts for a 60-minute call run to 10,000–12,000 words. Passing the entire document to an LLM in one shot saturates context and degrades extraction quality on the second half of the transcript. Split at speaker-turn boundaries, not arbitrary character counts, so that each chunk contains complete conversational exchanges.
We run this pipeline on self-hosted n8n because the workflow processes raw call recordings — personal data under UK GDPR. Make.com is a viable alternative for teams on managed infrastructure, but verify the data-residency setting before routing call transcripts through it. The ICO guidance on international data transfers sets out what standard contractual clauses actually cover when your data processor operates outside the UK.
Edge cases: calls with multiple speakers, non-native English accents, and screenshare-only meetings
Multi-speaker calls with more than two people break diarisation reliably. When a prospect brings colleagues, Fireflies assigns individual speaker labels only if each person joined on a separate device. If three people share a room on one laptop microphone, you get one undifferentiated speaker block. The extraction prompt should detect this: if authority.decision_maker_name is null and authority.evidence consists of collective "we" language throughout without any individual named, route to manual review rather than guessing.
Non-native English accents cause transcription errors that compound through extraction. A South Asian-accented "forty thousand" occasionally arrives as "14,000" in the Zoom transcript — a 65% error in budget extraction. Whisper-large-v3 handles this better than the default Zoom transcriber. Our comparison in the Deepgram vs Whisper vs AssemblyAI guide shows Whisper's word error rate on non-native English is roughly 28% lower than comparable cloud-hosted alternatives at similar price points.
Screenshare-only meetings — where the prospect narrates while sharing their screen but says very little in structured dialogue — produce transcripts that are 80% rep monologue. Extraction will return low confidence scores across all BANT fields. That is correct behaviour. Do not attempt to infer prospect intent from rep statements alone.
What changed in 2025–2026: native AI note-taking in HubSpot Breeze and Salesforce Agentforce
HubSpot's Breeze Intelligence added call summarisation and BANT-field auto-population in 2025, reaching general availability on Sales Hub Pro and Enterprise. The HubSpot Breeze Intelligence documentation now shows native writing to deal properties without requiring custom field setup — a meaningful change for teams already paying for Sales Hub at those tiers.
Salesforce added transcript analysis to Einstein Conversation Insights as part of the Agentforce product line in the same period, with auto-population of Opportunity fields from detected signals. This changes the build calculus for larger teams: if you are already on Salesforce Enterprise, native tooling may handle straightforward BANT extraction without a custom n8n pipeline.
For teams evaluating which platform to standardise on, our HubSpot vs Salesforce for UK SME outbound guide covers both platforms across AI feature availability, pricing tiers, and integration depth for teams under 50 reps.
The argument for a custom build remains: control over confidence thresholds, the ability to extract signals beyond BANT (competitor mentions, specific product features named, pricing objections), and no per-seat premium layered on existing CRM licences. For teams under 15 reps, a custom pipeline costs roughly £30–50 per month in LLM API fees versus several hundred pounds per month in additional platform licence costs.
Good / Bad / Ugly: three transcript-to-CRM implementations and their data quality at volume
Good — 8-person SaaS sales team, Fireflies + n8n + HubSpot. After 200 calls over six weeks, BANT confidence reached ≥ 0.85 on 68% of fields overall. Budget had the lowest auto-write rate (51%) because UK B2B prospects typically avoid committing to numbers until late in the buying cycle. Timeline was the most reliable field (79% auto-write rate). Reps reported 4 minutes of post-call admin per call instead of 18.
Bad — 12-person consultancy, Zoom native + Make.com. Zoom's VTT files required a parsing step that failed silently when Zoom changed their export format in a minor platform update. The pipeline ran for three weeks producing empty extractions before a rep noticed the HubSpot fields were blank. Fix: always write a pipeline_run_at timestamp to a CRM field on every execution so data gaps appear in a deal report.
Ugly — 20-person financial services firm, Gong + Salesforce. Gong's API rate limits on their standard tier throttled the pipeline during a quarter-end spike when 40 calls came in over two days. Extractions queued for 19 hours. By that point, reps had already progressed deals based on memory rather than extracted data. The Gong API documentation specifies rate limits per tier — plan for burst capacity before go-live, not after your first peak period.
One counterpoint worth reading before you start building: Harvard Business Review research on CRM data quality argues that the bottleneck is often not data capture but data use — a populated HubSpot field that nobody references in pipeline reviews provides no value regardless of extraction accuracy. Build the rep review workflow before the extraction pipeline, or you will simply be archiving structured data instead of unstructured data.
Our SDR-to-AE handoff automation guide covers how extracted BANT fields can gate deal progression automatically. The Voice AI and Document Analysis portfolio case study shows the broader document processing patterns we apply across call recordings, contracts, and structured reports. For combining transcript signals with firmographic enrichment to produce qualification scores, see our CRM enrichment and ICP scoring guide.