🀝 Convert sales call recordings into HubSpot CRM notes with WayinVideo and GPT-4o-mini

⚑ 13 views · 🀝 CRM & Sales Operations

Description

Sales Call to HubSpot CRM Note Logger (WayinVideo + GPT-4o-mini + HubSpot)


Short Description

Paste any Zoom, Google Meet, or Teams recording URL into a simple form along with the contact email, company name, call purpose, and sales rep name and the workflow logs everything to HubSpot automatically. WayinVideo transcribes the full call with speaker labels and timestamps, then GPT-4o-mini extracts nine structured CRM fields including pain points, objections, key quotes, next steps, deal stage recommendation, sentiment, and a confidence score. A formatted note is created on the matching HubSpot contact and a follow-up task is created with the agreed next steps. Everything is also logged to Google Sheets with the HubSpot Note ID, Task ID, and Contact ID. Built for sales teams, account managers, and agencies who want structured CRM notes created automatically after every call.


What This Workflow Does


Setup Requirements

Tools Needed

Credentials Required

> ⚠️ WayinVideo API key appears in 2 steps β€” replace YOUR_WAYINVIDEO_API_KEY in both 2. WayinVideo β€” Submit Transcription and 4. WayinVideo β€” Get Transcript Results. Missing either one will cause the workflow to fail.

> ⚠️ HubSpot Private App token appears in 3 steps β€” replace YOUR_HUBSPOT_PRIVATE_APP_TOKEN in 11. HTTP β€” Search HubSpot Contact, 13. HTTP β€” Create HubSpot Note, and 14. HTTP β€” Create HubSpot Task. Missing any one will cause those steps to fail.

Estimated Setup Time: 25–30 minutes


Step-by-Step Setup

  1. Import the workflow β€” Open n8n β†’ Workflows β†’ Import from JSON β†’ paste the workflow JSON β†’ click Import

  2. Get your WayinVideo API key β€” Log in to your WayinVideo account β†’ go to Account Settings β†’ copy your API key

  3. Add your WayinVideo API key to node 2 β€” Open node 2. WayinVideo β€” Submit Transcription β†’ find the Authorization header value Bearer YOUR_WAYINVIDEO_API_KEY β†’ replace YOUR_WAYINVIDEO_API_KEY with your actual key

  4. Add your WayinVideo API key to node 4 β€” Open node 4. WayinVideo β€” Get Transcript Results β†’ find the same Authorization header β†’ replace YOUR_WAYINVIDEO_API_KEY with the same key

  5. Connect OpenAI β€” Open node 9. OpenAI β€” GPT-4o-mini Model β†’ click the credential dropdown β†’ add your OpenAI API key β†’ test the connection

  6. Create your HubSpot Private App β€” Go to your HubSpot account β†’ Settings β†’ Integrations β†’ Private Apps β†’ Create a private app β†’ give it a name β†’ under Scopes, enable: crm.objects.contacts.write, crm.objects.notes.write, crm.objects.tasks.write β†’ click Create app β†’ copy the access token

  7. Add your HubSpot token to node 11 β€” Open node 11. HTTP β€” Search HubSpot Contact β†’ find the Authorization header value Bearer YOUR_HUBSPOT_PRIVATE_APP_TOKEN β†’ replace YOUR_HUBSPOT_PRIVATE_APP_TOKEN with your actual token

  8. Add your HubSpot token to node 13 β€” Open node 13. HTTP β€” Create HubSpot Note β†’ find the same Authorization header β†’ replace YOUR_HUBSPOT_PRIVATE_APP_TOKEN with the same token

  9. Add your HubSpot token to node 14 β€” Open node 14. HTTP β€” Create HubSpot Task β†’ find the same Authorization header β†’ replace YOUR_HUBSPOT_PRIVATE_APP_TOKEN with the same token

  10. Create your Google Sheet tab β€” Open your Google Sheet β†’ add a tab named exactly CRM Call Log β†’ add these 16 column headers in row 1: Contact Email, Contact Name, Company, Call Purpose, Call Date, Sales Rep, Call Duration (min), HubSpot Contact ID, HubSpot Note ID, HubSpot Task ID, Deal Stage, Sentiment, Confidence Score, Follow-up Date, Recording URL, Created On

  11. Connect Google Sheets β€” Open node 15. Google Sheets β€” Log CRM Entry β†’ click the document field β†’ replace YOUR_GOOGLE_SHEET_ID by selecting your spreadsheet or entering the Sheet ID (the string between /d/ and /edit in your Sheet URL) β†’ click the credential dropdown β†’ add Google Sheets OAuth2 β†’ authorize access

  12. Activate the workflow β€” Toggle the workflow to Active β†’ copy the Form URL from node 1. Form β€” Call Recording + CRM Details β†’ open it in a browser to submit your first call


How It Works (Step by Step)

Step 1 β€” Form: Call Recording + CRM Details You open the form URL in a browser and fill in seven fields: the call recording URL (Zoom, Google Meet, Teams, or Loom), the contact email address in HubSpot, the contact name, the company name, the call purpose (e.g. Discovery Call, Demo, Negotiation), the call date, and the sales rep name. Submitting the form starts the workflow.

Step 2 β€” HTTP: WayinVideo β€” Submit Transcription The recording URL is sent to the WayinVideo transcription API with the target language set to English. WayinVideo accepts the job and returns a task ID confirming transcription has started.

Step 3 β€” Wait: 90 Seconds The workflow pauses for 90 seconds before the first status check. Sales calls are typically 30–60 minutes long and need more initial processing time than short videos.

Step 4 β€” HTTP: WayinVideo β€” Get Transcript Results A GET request checks the WayinVideo results endpoint using the task ID from step 2. It returns the current processing status and, once complete, the full speaker-labeled transcript.

Step 5 β€” IF: Transcription Complete? This is the polling gate. If the status equals SUCCEEDED (YES path), the transcript is ready and the workflow moves forward to formatting. If still processing (NO path), the workflow routes to 6. Wait β€” 30 Seconds Retry which pauses 30 seconds then loops back to step 4 to check again. This repeats until SUCCEEDED.

Step 6 β€” Wait: 30 Seconds Retry When the transcript is not yet ready, the workflow waits 30 seconds then returns to step 4 for another check. The loop continues automatically.

Step 7 β€” Code: Format Transcript Each segment is formatted as [Speaker Name | MM:SS] text. Total call duration in minutes, unique speaker names, and all seven form inputs are packaged here for the AI prompt.

Step 8 β€” AI Agent: Extract CRM Note GPT-4o-mini receives the formatted transcript and a detailed system prompt. It extracts nine labeled sections: a 3–4 sentence call summary, pain points the prospect actually mentioned, objections raised during the call, the most important quotes, next steps with owners, the agreed follow-up date (or TBD), a deal stage from a fixed seven-option list, a sentiment label from a fixed five-option list, and a confidence score from 1–10. GPT is instructed to write only from what was actually said β€” no invented content.

Step 9 β€” OpenAI: GPT-4o-mini Model This is the language model powering the CRM extraction. It runs with default settings for consistent, structured output.

Step 10 β€” Code: Parse CRM Output All nine labeled sections are extracted from the AI output using regex. A full formatted HubSpot note body is assembled with sections for summary, pain points, objections, quotes, next steps, and a deal intelligence line showing stage, sentiment, and confidence score in one readable block. A follow-up timestamp is calculated β€” if a specific date was mentioned in the call it is used; if not, a default of 7 days from now is set for the HubSpot task due date. All call metadata is carried forward for the sheet log.

Step 11 β€” HTTP: Search HubSpot Contact A POST request searches HubSpot for a contact matching the email address you submitted. It returns the contact’s details including the HubSpot internal contact ID.

Step 12 β€” Code: Extract HubSpot Contact ID The contact ID is extracted from the search results. If no contact is found for that email, the step throws a clear error stopping the workflow β€” preventing a note from being created on the wrong contact or no contact at all.

Step 13 β€” HTTP: Create HubSpot Note A POST request creates an engagement note on the HubSpot contact using the full formatted note body. The note timestamp is set to the call date you submitted. The note is associated with the contact using HubSpot’s standard association type ID 202.

Step 14 β€” HTTP: Create HubSpot Task A follow-up task is created on the same HubSpot contact. The task subject includes the contact name and company. The task body contains the next steps extracted from the call. The task due date is set to the follow-up timestamp calculated in step 10. The task is marked HIGH priority and type CALL, and starts with NOT_STARTED status.

Step 15 β€” Google Sheets: Log CRM Entry One row is appended to your CRM Call Log tab with all 16 columns: contact email, name, company, call purpose, date, sales rep, duration, HubSpot Contact ID, Note ID, Task ID, deal stage, sentiment, confidence score, follow-up date, recording URL, and the log timestamp.


Key Features

βœ… Contact lookup by email β€” No manual contact ID lookup needed β€” the workflow finds the HubSpot contact automatically using the email you provide at submission βœ… Nine structured CRM fields per call β€” Pain points, objections, key quotes, deal stage, sentiment, and confidence score are all extracted separately β€” not lumped into one generic note βœ… Fixed deal stage and sentiment options β€” GPT is constrained to exact picklist values for both fields so every entry in your sheet is filterable and consistent βœ… Follow-up task created automatically β€” You never need to manually create a follow-up task β€” it is generated from the next steps in the call with the agreed due date already set βœ… HubSpot Note ID and Task ID logged to Sheets β€” Every row in your Google Sheets log contains the exact HubSpot IDs so you can cross-reference or deep-link directly to the record βœ… 7-day default due date when follow-up not mentioned β€” If no specific follow-up date was discussed, the task is automatically due in 7 days so nothing falls through the cracks βœ… Full note body formatted for HubSpot readability β€” The note is structured with labeled sections and a deal intelligence summary line so any sales rep who opens the contact record can scan it in 30 seconds


Customisation Options

Add a retry limit to stop infinite polling β€” Before node 6. Wait β€” 30 Seconds Retry, add a Set step that increments a poll counter, then add a second IF check to stop after 15 polls and send a Slack or Gmail error notification instead of looping indefinitely β€” this is noted as a known risk in the workflow overview.

Create the HubSpot contact if not found β€” In node 12. Code β€” Extract HubSpot Contact ID, instead of throwing an error when no contact is found, add an HTTP step that creates the contact in HubSpot using the form’s contact name, email, and company name β€” then continue to note and task creation.

Update the HubSpot deal stage property β€” After node 13. HTTP β€” Create HubSpot Note, add a PATCH request to https://api.hubapi.com/crm/v3/objects/contacts/{id} with the dealstage property set to the extracted deal stage value β€” keeping the contact record’s pipeline stage in sync with every call.

Send the rep a summary email after logging β€” After node 15. Google Sheets β€” Log CRM Entry, add a Gmail step that sends the sales rep a plain-text email with the call summary, action items, and a direct link to the HubSpot contact so they have everything in their inbox immediately.

Log calls to a HubSpot Deal instead of Contact β€” In nodes 13 and 14, change the association type and target object from contacts to deals β€” and add a step before note creation that searches HubSpot for a deal associated with the contact β€” routing notes and tasks to the deal record instead.


Troubleshooting

WayinVideo returning an error on submission:

Workflow stuck in the polling loop:

HubSpot contact not found:

HubSpot note or task not being created:

Google Sheets not logging the row:


Support

Need help setting this up or want a custom version built for your team or agency?

πŸ“§ Email: info@incrementors.com 🌐 Website: https://www.incrementors.com/

πŸ”— Nodes Used

Google Sheets, HTTP Request, AI Agent, OpenAI Chat Model, n8n Form Trigger

πŸ“₯ Import

Download workflow.json and import into n8n: Workflow menu β†’ Import from File

πŸ“– Importing guide Β· πŸ”‘ Credential setup