Daily sales call recap into HubSpot from Drive recordings

Every weekday at 7am ET, transcribe yesterday's sales call recordings and drop the summary, objections, and follow-up tasks straight into the right HubSpot deal.

Agentic Task
Google DriveAssemblyAIHubSpotSlack BotSalesOperationsMeeting WorkflowsData SyncFeedback Triage

Build me an agent workflow that updates HubSpot from the previous day's sales call recordings, with no manual recap writing from my reps.

Trigger: a cron that runs every weekday at 7am America/New_York.

On each run, do the following:

1) Use Google Drive's List Files to find new audio recordings in the folder named "Sales Calls". Filter the Drive query by parent folder, by audio mimeType (audio/mpeg, audio/mp4, audio/wav, audio/x-m4a), and by modifiedTime greater than the previous run's timestamp so each file is only processed once. Persist the high-water-mark timestamp between runs.

2) For each new file, download it with Google Drive's Download File Content.

3) Send the bytes to AssemblyAI using Upload Audio File, then call Submit Transcript with speaker_labels enabled so the transcript is diarized. Poll Get Transcript until status is completed (or error out cleanly if the transcript fails).

4) From the diarized transcript, identify which speaker is the rep and which is the prospect (use cues like who is introducing the company, who is pitching, and who is asking pricing or evaluation questions). Then extract the prospect's name and company.

5) In HubSpot, use Search Contacts to find the prospect (match on name and email if available, then fall back to company). Use Search Deals to find an open deal associated with that contact or company.

6) If a matching deal is found, use HubSpot Create Note to attach a recap to the deal containing: a tight 3-5 bullet call summary, a clearly labeled "Objections" section, and a "Commitments" section listing what each side agreed to. Then use HubSpot Create Task for each follow-up action the rep promised, with the rep as the owner, a short subject, the commitment as the body, and a sensible due date (default to 2 business days unless the call specifies otherwise).

7) If no matching deal is found, do NOT guess. Use Slack Bot's Send a Message to post a one-line note to the channel I pick (e.g. #sales-ops) that reads something like: "Needs manual association: <file name> (<prospect name or company if known>)". Include the Drive link to the recording.

Other requirements: process files sequentially so I don't blow through AssemblyAI concurrency limits; keep a short log of which file ids have been processed so reruns are idempotent; and skip files that are already older than 7 days as a safety cap.

The point is reps stop writing recap notes by hand, the CRM stays current without anyone touching it, and anything ambiguous gets bumped to a human instead of being silently misfiled.

Additional information

What does this prompt do?
  • Sweeps a Google Drive folder of sales call recordings each weekday morning and picks up anything new since the last run.
  • Transcribes each call with speaker labels so the rep can be told apart from the prospect, then pulls out a tight summary, objections raised, and commitments made.
  • Finds the matching contact and deal in HubSpot and attaches a note plus follow-up tasks with sensible due dates, so the CRM updates itself.
  • When no deal matches, posts a quick heads-up in Slack so the rep can attach the call by hand instead of letting the agent guess.
What do I need to use this?
  • A Google Drive account with a dedicated folder where reps drop sales call recordings.
  • An AssemblyAI account for speech-to-text with speaker labels turned on.
  • A HubSpot account with permission to read contacts and deals, and to create notes and tasks.
  • A Slack workspace and a channel for the manual-association fallback messages.
How can I customize it?
  • Change the schedule or time zone, for example switch from weekdays at 7am ET to twice a day, or run it on weekends too.
  • Point it at a different Drive folder, or filter for specific reps or accounts based on file naming conventions.
  • Adjust the recap shape, like adding a sentiment line, pulling out pricing mentions, or setting different default due dates for follow-up tasks.
  • Pick the Slack channel for the manual-association fallback, or send it as a direct message to the rep instead.

Frequently asked questions

Do my reps have to do anything different than they do today?
No. As long as the recording lands in the shared Google Drive folder, the workflow picks it up on the next morning run. There is no plugin to install and no button to push after the call.
What happens if the workflow cannot figure out which deal a call belongs to?
It does not guess. Instead it posts a short message in the Slack channel you choose, with the file name and a one-line note that the call needs manual association. The rep can then attach the recording to the right deal themselves.
Will this work with HubSpot Free?
Yes. Notes and tasks are available on all HubSpot plans, including Free. The workflow uses standard contact and deal lookups, so any seat that can create notes and tasks in the HubSpot UI will work here.
How does it tell the rep apart from the prospect on the call?
AssemblyAI splits the transcript by speaker, and the agent labels each speaker by looking at who introduces themselves, who is pitching, and who is asking pricing or evaluation questions. You can also hard-code the rep's name in the workflow if you want to be extra safe.
Can I use Zoom Cloud Recordings or Gong recordings instead of Drive?
This template assumes Google Drive as the source of truth, but the same shape works with any storage tool we integrate with. Tell the builder which source you use and it will adapt the first step.

Stop hand-writing call recaps. Let HubSpot update itself.

Connect Google Drive, AssemblyAI, HubSpot, and Slack once, and Geni keeps every deal current with notes and follow-up tasks the morning after each call.