Claap to Google Slides, follow up decks ready fast
Sales calls end, then the real scramble starts. Notes live in Claap, the “what did they care about?” is buried in a transcript, and the follow-up deck somehow becomes a same-day fire drill.
This Claap Slides automation hits Account Executives first, but RevOps leads and small agency owners feel it too. You want a clean Google Slides recap that you can send fast, without rewriting the call from scratch.
This workflow turns Claap call notes into a Google Slides deck, shares it, and drops the link into Slack. You’ll see how it works, what you need, and how to tweak it for your team.
How This Automation Works
Here’s the complete workflow you’ll be setting up:
n8n Workflow Template: Claap to Google Slides, follow up decks ready fast
flowchart LR
subgraph sg0["Generate slide conte Flow"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Duplicate presentation"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Publish presentation"]
n2["<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/>Set user as editor"]
n3@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Select presentation template", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Extract call info", pos: "b", h: 48 }
n5@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set presentation id", pos: "b", h: 48 }
n6["<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/>Update presentation"]
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/webhook.dark.svg' width='40' height='40' /></div><br/>On new sales call recording"]
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/>Format challenges"]
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 to @user"]
n14@{ icon: "mdi:robot", form: "rounded", label: "Generate slide content", pos: "b", h: 48 }
n4 --> n3
n8 --> n0
n2 --> n6
n5 --> n14
n6 --> n10
n1 --> n2
n0 --> n1
n14 --> n8
n7 --> n4
n3 --> n5
end
subgraph sg1["Flow 2"]
direction LR
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Delete wrong currency slide"]
n11@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If there is a deal", pos: "b", h: 48 }
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/hubspot.svg' width='40' height='40' /></div><br/>Get deal info"]
n13@{ icon: "mdi:swap-vertical", form: "rounded", label: "Select slide to delete", pos: "b", h: 48 }
n12 --> n13
n11 --> n12
n13 --> n9
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 n14 ai
class n3,n11 decision
class n0,n1,n2,n6,n7,n9 api
class n8 code
classDef customIcon fill:none,stroke:none
class n0,n1,n2,n6,n7,n8,n10,n9,n12 customIcon
Why This Matters: Slow follow-ups lose deals
If your follow-up depends on someone “finding time” to turn a call into a deck, it’s not a process. It’s hope. The details that make a follow-up persuasive (pain points, objections, next steps, stakeholders) are freshest right after the call, yet that’s exactly when your calendar fills up. So the recap gets delayed, the deck is rushed, and you end up sending a generic email that doesn’t reflect what the prospect actually said. And honestly, prospects can tell.
The friction compounds. Here’s where it breaks down in real life.
- Someone has to re-read Claap notes or transcripts and manually translate them into slides, which is slow and surprisingly draining.
- Decks come out inconsistent across the team, so managers can’t rely on them and reps don’t reuse them.
- Sharing is another mini-task: permissions, “can you access this?”, and another back-and-forth thread.
- Slack updates get missed when they’re manual, especially when reps are jumping between meetings.
What You’ll Build: Claap notes into a ready-to-share deck
This workflow starts the moment a Claap webhook fires for a recorded call. It pulls the key call details, checks if the call is tied to a real deal, and (when it is) it can enrich the context by fetching deal details from HubSpot. From there, OpenAI drafts slide-ready copy: challenges, context, and follow-up structure that reads like a human wrote it. The workflow clones the right Google Slides template, applies the AI-written updates into the slides, and even removes a slide when it’s not relevant (for example, a currency slide in the wrong region). Finally, it shares the deck, grants editor access, and sends the link to the right person in Slack so the follow-up can go out immediately.
The workflow begins with Claap, then routes to the correct deck template. After AI generates structured content, Google Slides is updated automatically, shared, and pushed to Slack. You go from “call ended” to “deck ready” without opening Google Slides at all.
What You’re Building
| What Gets Automated | What You’ll Achieve |
|---|---|
|
|
Expected Results
Say you run 4 sales calls a day. Manually, a decent follow-up deck is usually about 30 minutes per call (review notes, write slides, clone a template, fix sharing, send the link), which is roughly 2 hours daily. With this workflow, the rep spends about 5 minutes checking the generated deck and adding a personal touch, while the cloning, writing, formatting, and sharing run in the background. That’s around 90 minutes back most days, and follow-ups land while the call is still fresh.
Before You Start
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Claap to send call webhooks and notes.
- Google Slides to clone and update your deck template.
- Slack to deliver the deck link to your team.
- OpenAI API Key (get it from the OpenAI Platform).
Skill level: Intermediate. You’ll connect a few accounts, paste API keys, and adjust template IDs and labels.
Want someone to build this for you? Talk to an automation expert (free 15-minute consultation).
Step by Step
Claap triggers the workflow via webhook. When a call is labeled (based on your Claap webhook setup), n8n receives the payload and extracts the call details you’ll want in the deck.
Deal context gets pulled in when available. An if-check looks for deal information. If it exists, the workflow retrieves the deal details from HubSpot, which gives the AI better inputs than raw notes alone.
OpenAI writes structured slide content. The workflow assigns a deck identifier, generates the slide copy, then formats tricky parts (like a list of challenges) so the output fits slide layouts instead of turning into a wall of text.
Google Slides is cloned, updated, and shared. A template is chosen, the deck is cloned, optional slides can be removed, updates are applied, and sharing + editor permissions are set. Then Slack gets the final link.
You can easily modify the template routing to support different call types (discovery vs. demo) based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Webhook Trigger
Set up the inbound webhook that starts the workflow whenever a call recording payload is received.
- Add the Inbound Call Webhook node and set HTTP Method to
POST. - Set the Path to
claap-recordings. - Use the test URL from Inbound Call Webhook to send a sample payload and confirm the node receives
body.event.recordingdata.
Step 2: Connect HubSpot and Gate Deal Retrieval
Check for a CRM deal and fetch details from HubSpot to support slide removal decisions.
- Configure Utility: Check Deal Presence to verify the deal exists with the condition left value
{{ $('Inbound Call Webhook').item.json.body.event.recording.deal.id }}. - Open Retrieve Deal Details and set Resource to
dealand Operation toget. - Set Deal ID to
{{ $('Inbound Call Webhook').item.json.body.event.recording.crmInfo.deal.id }}. - Credential Required: Connect your hubspotAppToken credentials in Retrieve Deal Details.
Step 3: Set Up Call Parsing and Template Selection
Extract call details and select the slide deck template based on labels.
- In Derive Call Details, map fields using these expressions:
client ={{ $json.body.event.recording.companies[0].name }}
domain ={{ $json.body.event.recording.meeting.participants.find(p => p.email && p.email !== $json.body.event.recording.recorder.email)?.email.split("@")[1] }}
dealId ={{ $json.body.event.recording.crmInfo.crmDealId === undefined ? "" : $json.body.event.recording.crmInfo.crmDealId}}
language ={{ $json.body.event.recording.transcripts[0].langIso2 === "fr" ? "french" : "english" }}
insights ={{ $json.body.event.recording.insightTemplates[0].insights[0].sections.map(section => `${section.title}:\n${section.description}`).join('\n\n') }} - Configure Choose Deck Template with label checks using:
{{ $('Inbound Call Webhook').item.json.body.event.recording.labels.includes('Discovery') }}and{{ $('Inbound Call Webhook').item.json.body.event.recording.labels.includes('Proposal') }}. - In Assign Deck Identifier, set presentationId to your template deck ID:
[YOUR_ID].
Step 4: Set Up AI Content Generation
Generate slide-ready content with OpenAI, then format the challenge list for slide insertion.
- In Compose Slide Content, select the model
gpt-4o-miniand keep JSON Output enabled. - Use the prompt provided in Compose Slide Content and ensure it references
{{ $('Derive Call Details').item.json.language }}and{{ $('Derive Call Details').item.json.insights }}. - Credential Required: Connect your openAiApi credentials in Compose Slide Content.
- In Format Challenge List, keep the code as:
return { challengesFormatted: $input.first().json.message.content.challenges.join('\n') };
{{ $('Format Challenge List').item.json.challengesFormatted }}.Step 5: Configure Slide Deck Actions and Updates
Clone the deck, share it, update placeholders, and optionally remove a currency slide.
- In Clone Slide Deck, set URL to
https://www.googleapis.com/drive/v3/files/{{ $('Assign Deck Identifier').item.json.presentationId }}/copyand JSON Body to{ "name": "Claap x {{ $('Derive Call Details').item.json.client }} - Demo" }. - Credential Required: Connect your googleDriveOAuth2Api credentials in Clone Slide Deck and Grant Editor Access.
- In Share Deck Publicly, set URL to
https://www.googleapis.com/drive/v3/files/{{ $json.id }}/permissions?supportsAllDrives=truewith the JSON body allowing anyone to read. - In Grant Editor Access, update emailAddress to your email in
{ "role": "writer", "type": "user", "emailAddress": "[YOUR_EMAIL]" }. - In Apply Slide Updates, keep the batchUpdate body to replace
$client,$date,$ambition, and$challengeswith these values:{{ $('Derive Call Details').item.json.client }}{{ new Date().toLocaleDateString('fr-FR') }}{{ $('Compose Slide Content').item.json.message.content.ambition }}{{ $('Format Challenge List').item.json.challengesFormatted }} - Credential Required: Connect your googleSlidesOAuth2Api credentials in Apply Slide Updates.
- In Pick Slide For Removal, set slide_to_delete to
{{ (!$json.properties.deal_currency_code.value || $json.properties.deal_currency_code.value === 'EUR') ? '[YOUR_ID]' : '[YOUR_ID]' }}and ensure the IDs match slide object IDs.
Step 6: Configure Notifications and Workflow End
Send a Slack message with the final presentation link.
- In Notify Slack User, keep Message Type as
blockand the block JSON using the presentation URL:https://docs.google.com/presentation/d/{{ $json.presentationId }}/edit#slide=id.g33acd02fb35_0_0. - Set the user target in Notify Slack User to your intended Slack username (e.g.,
@user). - Credential Required: Connect your slackApi credentials in Notify Slack User.
Step 7: Test and Activate Your Workflow
Validate end-to-end behavior and switch the workflow to production mode.
- Click Execute Workflow and send a sample payload to Inbound Call Webhook.
- Confirm that Clone Slide Deck creates a new deck, Apply Slide Updates replaces placeholders, and Remove Currency Slide runs when the condition is met.
- Verify the Slack message in Notify Slack User contains the correct client name and presentation link.
- When successful, toggle the workflow to Active to enable live processing.
Troubleshooting Tips
- Google Slides credentials can expire or need specific permissions. If things break, check the Google connection in n8n’s Credentials page first, then confirm the template deck is accessible to that Google account.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Slack messages can silently fail if the bot isn’t in the channel. Check the Slack app’s channel access and scopes, then reselect the channel in the “Notify Slack User” node.
Quick Answers
About 30 minutes once your Claap webhook and Google access are ready.
No. You’ll mostly paste IDs, connect accounts, and adjust a couple of fields. There is one small “Code” step in the workflow, but it’s already written for you.
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 only a few cents per deck.
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.
Yes, and you probably should. You can route different Claap labels through “Choose Deck Template,” swap the copy style in “Compose Slide Content (OpenAI),” and change what gets removed via “Pick Slide For Removal.” Common tweaks include separate templates for discovery vs. demo calls, pulling extra fields from HubSpot, and changing the Slack recipient based on deal owner.
Usually it’s permissions. The Google account behind your n8n credential needs access to the template deck and permission to create files in the destination Drive. If you’re cloning successfully but updates fail, double-check the presentation ID the HTTP Request nodes are using and confirm the Slides API scopes were approved.
A typical small team can run dozens of decks a day without thinking about it.
Often, yes, because this is more than a simple “A to B” zap. You’re branching on conditions (deal present or not), generating content with OpenAI, formatting it, then making multiple Google Slides API-style updates and permission changes. That’s the kind of multi-step logic that gets awkward and expensive in simpler tools. n8n also gives you the option to self-host, which matters if you’re running high volume or handling sensitive sales data. Zapier or Make can still be fine for a lightweight version, like “post a Slack message when a Claap recording is ready.” Talk to an automation expert if you want help choosing.
Follow-ups shouldn’t depend on someone staying late to build slides. Set this up once, and your post-call momentum stops slipping through the cracks.
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.