Call Quality Audit

Paste a call transcript, score it against the Quality Audit Guide, then submit straight to the Quality Audits sheet.

Awaiting audit

Call details

Basic identifiers for the record — matches the columns in the Quality Audits sheet.

Staff Name
Date
Call Type
Canvas Details
Call ID
Auditor

Submit connection

One small relay script, deployed once, lets this page write finished audits into the Quality Audits sheet.

⚙ One-time setup (2 minutes, no API keys needed)
  1. Go to script.google.com → New project (already hardcoded to write into the Quality Audits spreadsheet by ID/tab, so it doesn't need to be opened from inside that sheet).
  2. Delete the placeholder code and paste in the script below.
  3. Deploy → New deployment → Web app. Execute as Me, Access Anyone. The first deploy will prompt a Google OAuth consent screen asking for Sheets access — approve it (this is your own script, running as you). Copy the resulting URL into the field above.
function doPost(e) {
  var body = JSON.parse(e.postData.contents);
  if (body.action === 'submit') return handleSubmit(body.payload);
  return json_({error: 'Unknown action'});
}

function doGet(e) {
  return json_({status: 'Audit relay is running'});
}

var TARGET_SPREADSHEET_ID = '1y_iwRNLomBeeXM9g6nXzIJwfq-X_xMhrsUQnTjHTjCE';
var TARGET_GID = 2132488623;

function getTargetSheet_() {
  var ss = SpreadsheetApp.openById(TARGET_SPREADSHEET_ID);
  var sheets = ss.getSheets();
  for (var i = 0; i < sheets.length; i++) {
    if (sheets[i].getSheetId() === TARGET_GID) return sheets[i];
  }
  throw new Error('Tab with gid ' + TARGET_GID + ' not found in the target spreadsheet.');
}

function handleSubmit(payload) {
  var sh = getTargetSheet_();
  if (sh.getLastRow() === 0) {
    sh.appendRow(['Staff Name','Date','Call Type','Canvas Details','Call ID',
      'Identity verified (Name, DOB, address) before sharing details','Safety signal handled','Consent integrity',
      'Introduction + referral reason','Program explained (plain language)','Insurance confirmed + cost reassurance-first',
      'Scheduling completed cleanly','Consent + portal + save number; Closing recap','Objection handled with the right reframe',
      'Accuracy, Tone / rapport','Contacted within SLA','Canvas documentation accurate','Consent/portal actually sent',
      'Notes','Final Score','Auditor']);
  }
  sh.appendRow([payload.staffName, payload.date, payload.callType, payload.canvasDetails, payload.callId,
    payload.identity, payload.safety, payload.consent, payload.intro, payload.program,
    payload.insurance, payload.scheduling, payload.closing, payload.objection, payload.tone,
    payload.sla, payload.canvas, payload.consent_sent, payload.notes, payload.finalScore, payload.auditor]);
  return json_({status: 'ok'});
}

function json_(obj) {
  return ContentService.createTextOutput(JSON.stringify(obj)).setMimeType(ContentService.MimeType.JSON);
}

Find calls from Aircall

Lists your Aircall calls for a date range and sorts them using the tags your team puts on calls in Aircall (Enrolled / Successful / Declined, plus New Referral / Proactive Outreach / Reschedule). Click Audit on a call to load it into the form below.

Transcript

Put the Aircall link (or call ID) in Call ID above and click Import transcript from Aircall — the transcript, staff name, date and call direction fill in automatically. Then click "Copy audit prompt," paste it into claude.ai, and paste Claude's reply back below. No API key needed. If Aircall has no transcript for a call, paste it into the box by hand. Every result is editable.

Tiered scoring framework

Tiered Scoring Framework Quality Metrics Scores
Green Zone (≥ 90%) → Excellent quality call Critical Guardrail —
Yellow Zone (85–89%) → Acceptable but improvable Core Execution —
Red Zone (< 85%) → Needs coaching or corrective action Process/Compliance —
Total Score —

Notes