# Sync Vapi call outcomes to HubSpot and Slack

> Close the loop after every Vapi call. Log the outcome in HubSpot, create the follow-up task, and post a summary to your sales channel in Slack.

- Workflow type: agent
- Services: Vapi, HubSpot, Slack
- Categories: Sales, Operations
- Published: 2026-07-08

## What it does

- Runs the moment a Vapi call finishes, using the end of call report as the signal.
- Pulls the transcript, summary, duration, and recording link and extracts caller details, qualification signals, sentiment, and any next steps.
- Finds the matching contact in HubSpot by phone or email, updates lifecycle stage and last call outcome, saves a note with the summary and recording link, and creates a follow-up task only when the call actually committed to one.
- Posts a compact card to your sales Slack channel with the caller name, one-line outcome, qualification tier, and links to the HubSpot contact and the recording.
- If no HubSpot contact matches, skips the CRM updates and flags it in Slack so a rep can create the record manually.

## What you'll need

- A Vapi account with at least one assistant that runs calls and produces end of call reports.
- A HubSpot account where your sales team keeps contacts and tasks.
- A Slack workspace with a sales or revenue channel where the summaries should land.

## Prompt

Build an agent workflow that closes the loop after every Vapi call by syncing the outcome into HubSpot and notifying my sales team in Slack.

Trigger: an incoming webhook from Vapi. Subscribe to Vapi's end-of-call-report event (fired once Vapi finishes call analysis) and use the callId from the webhook payload as the entry point for the run.

Step 1. Load the full call from Vapi. Use Vapi Get Call with the callId from the webhook to retrieve the transcript, structured summary, duration, recording URL, and any customer identifiers (phone number, email, or name) captured on the call.

Step 2. Reason over the transcript. Extract: (a) the caller's identifying info (name, phone, email, company if mentioned); (b) qualification signals — budget, timeline, decision maker, pain points; (c) overall sentiment; (d) any explicit next-step commitments the caller or the assistant agreed to (demo booked, proposal to send, callback time, contract review, etc.). Assign a simple qualification tier (for example hot / warm / cold) based on the signals. Only record next steps that the transcript actually contains — do not invent one.

Step 3. Match the caller in HubSpot. Use HubSpot Search Contacts, first by phone number and then by email as a fallback, to find the matching contact. If exactly one contact matches, continue. If none match, skip all HubSpot writes and flag the miss in Slack (see Step 5). If multiple match, pick the most recently updated one.

Step 4. Update HubSpot for the matched contact. Do all three of these:

• HubSpot Update Contact — set lifecycle stage based on the qualification tier and set a last_call_outcome (or equivalent) property with a short human-readable outcome string.

• HubSpot Create Note — attach a note to the contact containing the full call summary, the qualification signals, sentiment, and a link to the Vapi recording URL.

• HubSpot Create Task — ONLY when the transcript contains an explicit next-step commitment. Set the task subject to the committed action, the due date based on what was agreed on the call (default to two business days if the caller said "soon" without a date), and associate the task with the contact. If the contact has a HubSpot owner, assign the task to that owner.

Step 5. Post a summary card to Slack. Use Slack Send a Message to post to the sales channel (make the channel a workflow input). The message should be compact and include: contact name (or phone number if unknown), one-line outcome, qualification tier, call duration, a link to the Vapi recording, and a link to the HubSpot contact. If no HubSpot contact was found in Step 3, replace the HubSpot link with a clear note like "No matching HubSpot contact — please create one" so a rep knows to add the record manually.

Inputs to expose on the workflow: the Slack channel to post to, the default HubSpot owner for unassigned tasks, and the qualification-tier → lifecycle-stage mapping.

Guardrails: never fabricate qualification data or commitments not present in the transcript; never create a task unless the call actually committed to one; never overwrite a HubSpot lifecycle stage that is further along than the tier implies (do not downgrade a Customer back to a Lead).

## How to customize

- Change which Slack channel the summaries post to, or route different qualification tiers to different channels.
- Adjust which HubSpot fields get updated after a call, such as lifecycle stage, lead status, or a custom last call outcome field.
- Tune the qualification rubric the agent uses (budget, timeline, decision maker, pain points) to match how your team scores leads.
- Decide when a follow-up task should be created and who it should be assigned to based on the call outcome.

## FAQ

### Does this run automatically after every call?

Yes. Vapi sends an end of call report the moment analysis finishes, and the workflow picks it up from there. You do not need to run anything manually.

### What happens if the caller is not already in HubSpot?

The workflow skips the CRM updates and posts a note in Slack so a rep can create the contact by hand. This keeps HubSpot clean and prevents duplicate or half-populated records.

### Will it always create a follow-up task?

No. A task is only created when the call actually ends with a concrete next step, like a demo booked or a proposal promised. If nothing was committed, no task is created.

### Can I use this if my team uses HubSpot Free?

Yes. The workflow uses standard contact, note, and task actions that are available on every HubSpot tier, including Free.

### Does the Slack post include the call recording?

Yes. The Slack message includes a link to the Vapi recording and a link to the HubSpot contact, so anyone in the channel can jump straight to the source.

Use this prompt in General Input: https://www.generalinput.com/prompts/sync-vapi-call-outcomes-to-hubspot-and-slack