Call QA desk that scores recordings against your own rubric
Open one desk each morning to see every call recording scored against your rubric, with quotes as evidence, and nothing saved until you agree.
Build me a call QA desk that my support and sales leads open every morning. Our calls are recorded by our phone system and land as audio files in a Google Drive folder, and nobody has time to listen to them, so they go unreviewed. The app should turn that folder into a review queue where every call arrives with a scorecard already drafted against our own rubric, a human agrees with it or corrects it, and only then does anything get recorded or sent. The integrations are Google Drive for the recordings, Google Gemini for the scoring, Google Sheets for our QA register, and Slack Bot for coaching notes.
The landing view is the call list. Use Google Drive List Files scoped to a configured folder to list every recording, showing the rep, the call date, and the duration. Read date and duration from the file metadata List Files returns, and fall back to the file's created time when duration is not available. Match recordings to reps by convention, either a subfolder per rep or the rep name embedded in the file name, and make that rule configurable in settings with an Unmatched group for anything the rule could not assign, so no call silently disappears. Every row carries a QA status of not scored, draft, or saved. Give me filters by rep, by date range, and by status, and default the view to calls that still need a review, because the whole point is that the backlog is visible.
The rubric is the heart of this app and it lives in the app as editable data, not in code. A QA lead opens a rubric editor and manages a list of criteria, each with a name, a short description of what good looks like, a scoring scale, and a weight. Seed it with greeting, discovery questions, objection handling, whether a next step was booked, and the required compliance line, but every one of those must be editable, removable and reorderable, and new criteria must be addable without a developer. Weights roll up into a weighted total on each scorecard. Version the rubric so a scorecard saved last month keeps the criteria and weights it was actually judged against, and changing the rubric today never silently rewrites history. Show which rubric version a saved review used.
Scoring a call is a background job kicked off from the call row. The handler downloads the audio with Google Drive Download File Content, sends those bytes to Google Gemini Upload File to put the recording in the Files API, then polls Google Gemini Get File until the file state turns from PROCESSING to ACTIVE, and only then calls Google Gemini Generate Content with a reference to that file plus the current rubric. Getting this order right matters: calling Generate Content against a file still in PROCESSING fails, and a state of FAILED needs a visible error on the row with a retry rather than an empty scorecard. Use the Files API rather than inlining the audio, because call recordings routinely exceed the inline request size limit. Uploaded files are only retained for about 48 hours, so treat the file reference as short lived, persist the returned scorecard rather than the file handle, and re-upload if a call needs scoring again. Ask Gemini for structured output: for each criterion in the rubric, a score on that criterion's scale, a one line reason, and one or more verbatim quotes from the call with their timestamps.
Opening a call shows the scorecard, labelled a draft in a way nobody can miss until a human saves it. Each criterion is a row showing the drafted score, the one line reason, and the timestamped quotes underneath as the evidence, so the reviewer is checking a claim against what was actually said instead of trusting a number. The reviewer can override any score, and when they do, show the original drafted score beside the override so the disagreement stays visible. There is a free text note per call, which is what gets sent to the rep, and a weighted total that recalculates live as scores change. Nothing on this page writes to Google Sheets or Slack. Persist the draft so a reviewer can leave a call half reviewed and come back to it.
Saving is the commit step and it does two things. It appends a row to our QA register with Google Sheets Append Values: the call date, the rep, the call name, each criterion's final score, the weighted total, whether any score was overridden, the reviewer, and the rubric version. Then it sends the rep their coaching note in Slack, using Slack Bot Look Up User by Email to resolve the rep to a Slack user, Slack Bot Open a Conversation to open the direct message, and Slack Bot Send a Message to send it. The message carries the reviewer's note plus the final scores, written as coaching rather than as a verdict. Let an admin choose in settings whether notes go to the rep as a direct message or to a team channel. If a rep has no matching Slack user, save the review anyway and flag the delivery failure on the row instead of losing the review.
Add a Coach this rep button. It runs a background agent over that rep's last ten saved scorecards, the human approved ones and never the drafts, looking across calls rather than at any single one. The agent writes a coaching brief back into the app, filed against the rep, containing the patterns it sees, the criteria where the rep is consistently strong or weak, whether anything has moved since the last brief, and exactly two things for that rep to practise this week. Keep every brief with its date so a manager can open a rep and read the history before a one to one. Show progress while the agent is running, because reading ten calls takes time.
Two rules hold the whole app together. Scores are drafts until a human saves them, so the AI never puts a number on a person's record by itself. And the rubric is data a QA lead edits, so changing what we judge calls on never requires a developer. Keep the call list dense and scannable, because the daily job there is working a backlog down, and keep the scorecard page calm and readable, because the job there is judging one call carefully.
What does this prompt do?
- Lists every recording in your Google Drive folder with the rep, the date and how long the call ran, so the backlog is visible instead of ignored
- Opens each call with a scorecard already drafted against your rubric: a score, a one line reason, and the exact quotes from the call that earned it
- Keeps every score a draft until a reviewer agrees with it or changes it, so nobody is judged on a number a person never checked
- Files the final scores to your QA spreadsheet on save, and sends that rep their coaching note in Slack
- Reads a rep's last ten scored calls on demand and writes back the patterns it sees plus two things for them to practise this week
What do I need to use this?
- A Google Drive folder where your call recordings land, either a folder per rep or the rep's name in the file name
- A Google Gemini account, which is what listens to the calls and drafts the scores
- A Google Sheet to keep as your QA register
- A Slack workspace, so coaching notes reach reps where they already work
- Your rubric: the handful of things you actually judge a call on, and how much each one counts
How can I customize it?
- Edit the rubric whenever your standards change: add, reword or remove criteria and change how much each one weighs, without anyone touching code
- Choose what saving sends: which spreadsheet the register lives in, and whether the rep gets a direct message or the note goes to a team channel
- Change how recordings are matched to reps, and how many past calls the coaching agent reads before it writes a brief
FAQs
Do we need a call recorder like Gong or Fireflies for this to work?
Can an AI score end up on a rep's record without anyone checking it?
Can I change the rubric myself, or does that need a developer?
How long a call can it handle?
What does the rep actually receive?
What happens if a recording will not process?
Related templates
Stop buying stale lists. Reps run a saved search, work the results like an inbox, and only the accounts they approve ever reach your CRM.
See how your brand's news coverage and sentiment stack up against four competitors, then let an assistant write the weekly report for you.
One screen showing every social post waiting on approval, sorted by deadline, so reviewers can approve or reject without leaving the page.
Every Monday, find the past champions and closed-won contacts who changed jobs, update Attio, and get the moves worth chasing in Slack.
Staff submit what happened, your social manager edits the copy, picks the accounts and puts it on the calendar without a single spreadsheet.
Drag creators through Sourced to Wrapped on a board grouped by campaign, with audience stats on every card and a one-click brief for each creator.
Stop letting call recordings pile up unlistened.
Give your team a review desk where the rubric is yours, the evidence is quoted, and no score counts until a human agrees with it.