Home / Recipes / Call-recording scorecard + weekly coaching summary
Problem 5: Answered calls that never get booked
Call-recording scorecard + weekly coaching summary
Each recorded call is transcribed and checked: did we greet, get the name, address and problem, offer a time, and actually ask for the booking? Every 'yes' needs a quote from the call. On Mondays, each person gets one coaching focus based on what they missed most.
The problem
A call that's answered but not booked costs the same marketing money as a booked one. We don't attach a dollar figure.
- Only 45% of answered home-services calls asked for the appointment. Source: Invoca, Home Services Lead Conversion Benchmarks Report 2026 (Industry report by a call-tracking vendor)
- HVAC booked 38% of calls and plumbing 43% in ServiceTitan's data. Source: ServiceTitan booking-rate data, as summarized by Skygnosis (Secondary write-up of ServiceTitan data)
Background reading: How many calls is your HVAC shop missing, and what it costs
Who it's for
Shops with 1+ people answering phones (CSRs, the owner's spouse, office manager) that already record calls in Twilio, or can export recordings from CallRail or ServiceTitan.
Tools and monthly cost
| Tool | Official price |
|---|---|
| Twilio call recording | $0.0025 / minute recorded + $0.0005 / minute / month storage pricing page |
| Speech-to-text (example: OpenAI gpt-4o-mini-transcribe or whisper-1) | about $0.003 / minute (gpt-4o-mini-transcribe) or $0.006 / minute (whisper-1) pricing page |
| AI model (example: OpenAI gpt-4o-mini) | $0.15 per 1M input tokens, $0.60 per 1M output tokens pricing page |
| n8n | Community Edition: free if you self-host (you pay for the server). n8n Cloud: from EUR 20 / month (Starter) or EUR 50 (Pro) pricing page |
Example month: Illustrative arithmetic. Assume 400 calls of 3 minutes: recording 1,200 min x $0.0025 = $3.00, storage about $0.60 a month (growing unless you delete old recordings), speech-to-text $3.60-$7.20, AI scoring about $0.10-$0.20. Total about $7-$11 a month plus n8n. (Twilio's own transcription would be $0.05/min = $60.)
Setup
- Turn on recording for inbound calls (e.g. record on the <Dial>) and set recordingStatusCallback to the workflow's recording webhook, adding ?agent=NAME per line or queue so calls map to a person.
- Play a recording notice at the start of calls. Some US states and Canadian provinces require all-party consent.
- Set TWILIO_AUTH_TOKEN and PUBLIC_WEBHOOK_BASE so the workflow can verify Twilio's signature, plus your speech-to-text and model API keys.
- Import workflow-score-call.json and workflow-weekly-summary.json. Replace the mock 'sheet' URL with a Google Sheets node (or any table) for the call-scores log.
- Score a week of real calls, read 10 of them yourself, and only then share the weekly summary with the team.
Download
Contains the n8n workflows, AI prompts, a Claude skill version (documentation only, not executed in our tests), the mock data, the test runner with its last results, and the mock server we tested against. All keys in .env.example are fake.
Test result
Every workflow was imported into n8n 2.45.4 and run end to end on our test machine. Twilio, Jobber and Stripe were replaced by a local mock server that accepts the same request shapes as their documented APIs and records every call. The AI steps used a small local model (Qwen2.5-3B-Instruct, 4-bit) and the speech-to-text steps used Whisper base.en running locally. Mock data (customers, quotes, invoices, recordings) is invented. Nothing was sent to a real phone, customer or account.
8/8 scenarios passed (run 2026-10-27)
| PASS | C1 | Good call: all info captured, time offered, asked for the booking, booked |
| PASS | C2 | Price shopper: CSR quotes the fee, never offers a time or asks to book |
| PASS | C3 | CSR asks for the booking, customer declines (wants to talk to spouse) |
| PASS | C4 | Offers a time but never actually asks; customer says they'll call back |
| PASS | N1-forged-signature | N1-forged-signature |
| PASS | N2-duplicate-callback | N2-duplicate-callback |
| PASS | N3-short-hangup | N3-short-hangup |
| PASS | W1-weekly-summary | W1-weekly-summary |
Per-check accuracy on the 4 test calls: greeting 4/4 · got name 4/4 · got address 4/4 · got problem 4/4 · offered time 4/4 · asked for booking 4/4 · outcome 4/4
Actual output from the test run
Score row written for call C2. Names and numbers are invented.
{
"date": "2026-10-21",
"agent": "Tyler",
"call": "CAc2c2c2c2",
"seconds": 21,
"problem": "\"water heater leaking\"",
"greeting": true,
"greeting_evidence": "ridgeline this is tyler hi how much do",
"got_name": false,
"got_name_evidence": "",
"got_address": false,
"got_address_evidence": "",
"got_problem": true,
"got_problem_evidence": "\"water heater leaking\"",
"offered_time": false,
"offered_time_evidence": "",
"asked_for_booking": false,
"asked_for_booking_evidence": "",
"outcome": "not_booked",
"score": "2/6",
"unverified": "",
"tip": "It's better to ask about the service call fee after identifying the problem and the customer's interest in the service."
}Verified with mocks
- Four two-voice calls (synthetic voices, 8 kHz phone quality) recorded, downloaded with auth, transcribed and scored. The key check, 'asked for the booking', and the outcome were right on all 4 calls in the final run; see the per-check scores in test results.
- Twilio signature verified (forged callback rejected), duplicate callbacks and short hang-ups skipped.
- Evidence check: a 'yes' only counts if its quote really appears in the transcript.
- Weekly summary: counts per person and one coaching focus (e.g. ask for the booking with a direct question) computed in code, so the numbers can't be made up.
Documented from official API docs only
Built to the vendor's documentation but not run against a live account. Check these on yours.
- Twilio recording status callback fields, recording download (.wav) and request signing (Twilio docs).
- CallRail and ServiceTitan as recording sources: not checked; you'd need their recording export or API.
Limitations
- No speaker labels: the model infers who is the CSR. Dual-channel recording would make this more reliable.
- 4 test calls is a small sample, and the small local model missed 'caller described the problem' on some runs; treat scores as a conversation starter, not a performance review.
- Recording and transcribing calls has legal requirements; check yours.