tl;dv to Slack, sales call coaching delivered fast
Your team is having sales calls every day, but coaching still depends on one thing: somebody finding time to listen. That usually means feedback arrives late, half-remembered, or not at all.
Sales managers feel it first. Sales enablement teams chase consistency. And AEs who want to improve get stuck guessing. This tl;dv Slack coaching automation turns each transcript into fast, structured coaching without piling more work onto your calendar.
You’ll see how the workflow grabs the transcript, uses GPT‑4 to evaluate the conversation, then posts coaching to Slack and logs the same data to Google Sheets for trend tracking.
How This Automation Works
See how this solves the problem:
n8n Workflow Template: tl;dv to Slack, sales call coaching delivered fast
flowchart LR
subgraph sg0["Flow 1"]
direction LR
n0["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Filter Slack Response"]
n1["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Extract Sheets Data"]
n2@{ icon: "mdi:swap-vertical", form: "rounded", label: "Extract Meeting ID", pos: "b", h: 48 }
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Webhook - Trigger"]
n4["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Fetch Meeting Details"]
n5@{ icon: "mdi:swap-vertical", form: "rounded", label: "Parse Transcript", pos: "b", h: 48 }
n6@{ icon: "mdi:swap-vertical", form: "rounded", label: "Parse Meeting Data", pos: "b", h: 48 }
n7["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/merge.svg' width='40' height='40' /></div><br/>Merge Data Meeting"]
n8["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Prepare Video Analysis"]
n9["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Analyze Emotions"]
n10["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Send Slack"]
n11["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Send Webhook Response"]
n12["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Fetch Transcript"]
n13["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Analyze Transcript GPT"]
n14@{ icon: "mdi:swap-vertical", form: "rounded", label: "Parse GPT Analysis", pos: "b", h: 48 }
n15["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/merge.svg' width='40' height='40' /></div><br/>Merge All Analyses"]
n16["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Generate Final Report"]
n17@{ icon: "mdi:swap-vertical", form: "rounded", label: "Extract Final Report", pos: "b", h: 48 }
n18["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Build Slack Blocks"]
n19@{ icon: "mdi:database", form: "rounded", label: "Append to Google Sheets", pos: "b", h: 48 }
n20@{ icon: "mdi:swap-vertical", form: "rounded", label: "Format Sheets Data", pos: "b", h: 48 }
n9 --> n15
n12 --> n5
n5 --> n7
n3 --> n11
n18 --> n1
n2 --> n12
n2 --> n4
n20 --> n19
n15 --> n16
n7 --> n8
n7 --> n13
n14 --> n15
n6 --> n7
n1 --> n20
n1 --> n0
n17 --> n18
n4 --> n6
n0 --> n10
n16 --> n17
n13 --> n14
n8 --> n9
n11 --> n2
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n19 database
class n3,n4,n11,n12,n13,n16 api
class n0,n1,n8,n9,n18 code
classDef customIcon fill:none,stroke:none
class n0,n1,n3,n4,n7,n8,n9,n10,n11,n12,n13,n15,n16,n18 customIcon
The Challenge: Sales coaching can’t keep up with call volume
When transcripts are available but coaching isn’t, you end up running a sales team on vibes. The rep thinks the call went great. The manager only heard a two-minute recap. Meanwhile the real coaching moments are buried in a 30-minute recording that no one has time to review. Multiply that by a handful of reps and a week of calls, and you get the familiar result: inconsistent feedback, missed patterns (good and bad), and “next steps” that sound clear in the moment but never make it into the CRM or the follow-up.
It adds up fast. Here’s where it breaks down in real life.
- Managers end up sampling one or two calls a week, so coaching is based on fragments instead of the full picture.
- Reps wait days for feedback, which means they repeat the same mistakes on the next call.
- Even when feedback exists, it’s scattered across DMs, docs, and meeting notes, so trend tracking is basically impossible.
- Listening ratio, question quality, clarity, and engagement are hard to score consistently by hand, especially across multiple managers.
The Fix: tl;dv transcripts analyzed and coached automatically
This workflow kicks in the moment tl;dv says a transcript is ready. n8n receives the webhook, uses the meeting identifier to pull the full meeting details plus the transcript text, and then prepares that content for analysis. Next, GPT‑4 reviews the conversation and produces structured outputs: coaching notes, performance scores (think speaking vs. listening balance, clarity, next steps), and a concise summary your team can actually read. From there, the workflow formats a clean Slack message (a quick summary plus a detailed markdown-style report) and posts it to your chosen channel. Finally, it appends the same scores and meeting metadata into Google Sheets, so you can track rep performance over time without building a reporting project.
The flow starts with tl;dv’s TranscriptReady event and immediately acknowledges the webhook so tl;dv doesn’t keep retrying. Then it fetches details and transcript content, runs AI analysis plus an extra summary pass, and ships the results to Slack and Google Sheets in a consistent template.
What Changes: Before vs. After
| What This Eliminates | Impact You’ll See |
|---|---|
|
|
Real-World Impact
Say your team runs 20 calls a week and you try to review even half of them. If a manager spends about 45 minutes per call between listening, writing notes, and sending a Slack recap, that’s roughly 7 hours a week. With this workflow, the manager’s time drops to a quick skim and a targeted follow-up, maybe 5 minutes per call. You still get coaching on all 20 calls, and you get your week back.
Requirements
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- tl;dv (Business Plan) for webhook + API transcript access
- Slack to deliver coaching to the team channel
- Google Sheets to store scores and summaries over time
- OpenAI API key (get it from the OpenAI dashboard)
Skill level: Intermediate. You’ll paste a webhook URL into tl;dv and map a few sheet columns in n8n.
Need help implementing this? Talk to an automation expert (free 15-minute consultation).
The Workflow Flow
Transcript ready trigger from tl;dv. tl;dv calls your n8n webhook when the TranscriptReady event fires. n8n sends a quick “received” response so the event doesn’t get stuck or retried.
Meeting data and transcript retrieval. Using the meeting identifier, the workflow makes HTTP requests to tl;dv to fetch meeting details and the full transcript text. It also maps the fields you care about (meeting name, participants, timestamps) into a clean internal format.
AI scoring and coaching generation. The transcript is assembled and passed through an OpenAI analysis step (GPT‑4 recommended) that produces performance scoring and coaching insights. A follow-up AI pass creates a tighter final summary, then the workflow extracts the text you’ll actually share.
Slack delivery plus Google Sheets logging. n8n composes Slack blocks for a readable post, sends a channel update, and formats a spreadsheet row with the same scores and summary. Google Sheets becomes your lightweight coaching database.
You can easily modify the scoring criteria and Slack formatting to match your sales process and tone. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Webhook Trigger
Set up the webhook entry point and immediate response so external systems can trigger the workflow and receive a quick acknowledgement.
- Open Incoming Webhook Trigger and set Path to
tldv-feedback-v7159. - Set HTTP Method to
POSTand Response Mode toresponseNode. - In Return Webhook Status, set Respond With to
jsonand Response Body to{{ { "status": "received", "message": "Processing started" } }}. - Confirm the execution flow Incoming Webhook Trigger → Return Webhook Status → Capture Meeting Identifier is connected.
Step 2: Capture Meeting Metadata and Retrieve Source Data
This step parses the webhook payload, then fetches meeting details and transcript data from the source API.
- In Capture Meeting Identifier, set the assignments to
{{ $json.body.data.meetingId }},{{ $json.body.event }}, and{{ $json.body.executedAt }}. - Ensure Capture Meeting Identifier outputs to both Retrieve Transcript and Retrieve Meeting Details in parallel.
- In Retrieve Transcript, set URL to
=https://pasta.tldv.io/v1alpha1/meetings/{{ $json.meetingId }}/transcriptand add the headerx-api-keywith[CONFIGURE_YOUR_API_KEY]. - In Retrieve Meeting Details, set URL to
=https://pasta.tldv.io/v1alpha1/meetings/{{ $json.meetingId }}and add the headerx-api-keywith[CONFIGURE_YOUR_API_KEY].
Step 3: Prepare Transcript and Meeting Context
Transform the transcript and meeting data into a normalized structure for downstream analysis.
- In Assemble Transcript Text, map transcriptData to
{{ $json.data }}and fullTranscript to{{ $json.data.map(item => `[${item.speaker}] ${item.text}`).join('\n') }}. - In Map Meeting Fields, set videoUrl to
{{ $json.url }}, meetingName to{{ $json.name }}, organizer to{{ $json.organizer }}, invitees to{{ $json.invitees }}, and duration to{{ $json.duration }}. - Confirm Assemble Transcript Text and Map Meeting Fields merge in Combine Meeting Streams with Mode set to
combineand Combination Mode set tomergeByPosition.
Step 4: Configure AI and Analysis Processing
Run parallel analysis on transcript content and video/emotion signals, then merge results into a unified report.
- Confirm Combine Meeting Streams outputs to both Setup Video Analysis and Analyze Transcript via AI in parallel.
- In Analyze Transcript via AI, set URL to
https://api.openai.com/v1/chat/completions, Method toPOST, and Temperature to{{ 0.3 }}. - Credential Required: Connect your openAiApi credentials in Analyze Transcript via AI.
- In Parse AI Output, map analysisResult to
{{ JSON.parse($json.choices[0].message.content) }}and keep meeting fields from Combine Meeting Streams using{{ $('Combine Meeting Streams').item.json.meetingId }},{{ $('Combine Meeting Streams').item.json.meetingName }}, and{{ $('Combine Meeting Streams').item.json.duration }}. - Ensure Setup Video Analysis feeds into Evaluate Emotion Signals, then Evaluate Emotion Signals and Parse AI Output are combined in Merge Analysis Results.
- In Create Final Summary, set URL to
https://api.openai.com/v1/chat/completions, Method toPOST, and Temperature to{{ 0.5 }}. - Credential Required: Connect your openAiApi credentials in Create Final Summary.
Step 5: Build Slack Message and Sheet Metrics
Extract the final report, construct Slack blocks, and generate metrics to store in Google Sheets.
- In Extract Summary Text, map finalReport to
{{ $json.choices[0].message.content }}and reportGeneratedAt to{{ new Date().toISOString() }}. - Verify Extract Summary Text flows to Compose Slack Blocks, then to Derive Sheet Metrics.
- Because this workflow uses multiple transformation nodes, keep the existing grouped logic in Derive Sheet Metrics, Compose Slack Blocks, and the related set nodes to avoid breaking field mappings.
- Confirm Derive Sheet Metrics outputs to both Format Sheet Row and Prepare Slack Payload in parallel.
Step 6: Configure Output Destinations (Slack and Google Sheets)
Send the feedback report to Slack and append the summary row to your Google Sheet.
- In Prepare Slack Payload, replace
[YOUR_ID]in thechannelfield with your Slack channel ID. - In Dispatch Slack Update, set Text to
{{ "商談フィードバックレポート: " + $json.meetingName }}and Blocks UI to{{ $json }}. - Credential Required: Connect your Slack credentials in Dispatch Slack Update.
- In Append to Spreadsheet, set Document ID to
[YOUR_ID]and Sheet Name to商談フィードバック, with Operation set toappend. - Credential Required: Connect your Google Sheets credentials in Append to Spreadsheet.
⚠️ Common Pitfall: If the Slack blocks fail to render, double-check that Compose Slack Blocks outputs a valid blocks array and that Prepare Slack Payload does not throw the “slackBlocks no es un array” error.
Step 7: Test & Activate Your Workflow
Validate the webhook, AI calls, and outputs, then activate the workflow for production use.
- Click Execute Workflow and send a test POST request to the Incoming Webhook Trigger URL with a sample payload containing
body.data.meetingId. - Confirm a successful response from Return Webhook Status includes
{"status":"received","message":"Processing started"}. - Verify that Dispatch Slack Update posts a message with rendered blocks and that Append to Spreadsheet appends a new row in
商談フィードバック. - When the test run succeeds, toggle the workflow to Active to enable production processing.
Watch Out For
- tl;dv API credentials can expire or be limited by plan permissions. If things break, check your tl;dv webhook settings and x-api-key header first.
- If you’re using Wait nodes or external processing, timing can vary. When Slack posts arrive without the expected details, increase the wait or confirm the transcript fetch returned full text.
- Default AI prompts are frankly bland. Add your scoring rubric and brand voice early, or you will spend forever “fixing” the coaching tone after the fact.
Common Questions
About an hour if your tl;dv, Slack, and Google Sheets accounts are ready.
Yes, but plan on someone careful with setup details. You’ll paste a webhook URL into tl;dv and match a few Google Sheets columns.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in OpenAI API costs, which are usually a few cents per call depending on transcript length.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Start by editing the AI analysis prompt used in the “Analyze Transcript via AI” step so it reflects your rubric (discovery depth, objection handling, MEDDICC, whatever you run). You can also adjust what gets posted by tweaking “Compose Slack Blocks,” which is where the message structure is assembled. Common customizations include adding a “one thing to try next call,” tagging the rep’s manager in Slack, and writing different score columns into Google Sheets for different call types.
Usually it’s an invalid or missing x-api-key header in the HTTP Request nodes. Regenerate the tl;dv API key, update the Header Auth in n8n, and confirm the webhook event in tl;dv is set to TranscriptReady. If it works sometimes but not others, rate limits or incomplete transcripts can also cause the AI step to fail because it receives partial text.
On a typical n8n Cloud plan, you can handle thousands of transcript events per month, and self-hosting removes the execution cap. The real limit is usually OpenAI throughput and transcript size, so high-volume teams often batch analysis during peak hours or route only qualified calls into the workflow.
Often, yes. This workflow has multiple HTTP calls, merges, conditional logic, and a more involved message build, and n8n handles that kind of branching without turning every little thing into a paid “task.” Self-hosting is also a big deal if you process lots of calls. Zapier and Make can still be fine for a lightweight “transcript posted to Slack” setup, but the moment you want consistent scoring and Sheets logging, complexity rises quickly. If you’re torn, Talk to an automation expert and we’ll map it to your volume and tools.
Once this is running, every transcript turns into coaching and a trackable record automatically. Your team gets better faster, and you don’t have to live inside call recordings to make it happen.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.