Home / Recipes / Call-recording scorecard + weekly coaching summary

Problem 5: Answered calls that never get booked

Call-recording scorecard + weekly coaching summary

Verified with mocksLast tested 2026-10-27 · pricing checked October 2026

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.

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

ToolOfficial 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
n8nCommunity 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

  1. 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.
  2. Play a recording notice at the start of calls. Some US states and Canadian provinces require all-party consent.
  3. 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.
  4. 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.
  5. Score a week of real calls, read 10 of them yourself, and only then share the weekly summary with the team.

Download

Download call-scorecard.zip

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)

PASSC1Good call: all info captured, time offered, asked for the booking, booked
PASSC2Price shopper: CSR quotes the fee, never offers a time or asks to book
PASSC3CSR asks for the booking, customer declines (wants to talk to spouse)
PASSC4Offers a time but never actually asks; customer says they'll call back
PASSN1-forged-signatureN1-forged-signature
PASSN2-duplicate-callbackN2-duplicate-callback
PASSN3-short-hangupN3-short-hangup
PASSW1-weekly-summaryW1-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.