> ## Documentation Index
> Fetch the complete documentation index at: https://docs.voxworks.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# HubSpot Call Sync

> Automatically log every completed Voxworks call in HubSpot CRM — with the summary, outcome, duration, and phone numbers — using a Call Completed automation.

## Overview

HubSpot Call Sync posts each completed Voxworks call into HubSpot as a call engagement. After a call finishes and its summary is generated, the automation sends the call to HubSpot automatically — no manual logging.

Each synced call appears in HubSpot under **CRM → Calls** with:

* the call summary as the call notes;
* the call time, direction, and duration;
* the call outcome (Connected, No answer, Busy, Left voicemail); and
* the from/to phone numbers.

```text theme={null}
Call finishes
  -> Voxworks generates the call summary
  -> Your Call Completed automation runs
  -> The call record is created in HubSpot
```

***

## Before You Start

You need:

* a HubSpot account (any tier, including free); and
* permission to create service keys in that HubSpot account.

***

## Step 1: Create a HubSpot Service Key

1. In HubSpot, go to **Settings → Integrations → Account service keys**.
2. Create a new key with these scopes:
   * **Contacts — Read**
   * **Contacts — Write**
   * **Calls / engagements — Read & Write**
3. Copy the key. HubSpot shows it only once.

> Use an **account service key** — not a personal access key, developer API key, or the legacy `hapikey`. Those are for different purposes and will not work.

***

## Step 2: Connect HubSpot in Voxworks

1. Go to **Integrations** in your team workspace.
2. Select **HubSpot** and paste the service key.
3. Save.

The key is encrypted before it is stored. It is the only credential you ever need to enter — everything else in this guide is configuration.

***

## Step 3: Create the Automation

1. Go to **Automations → New Automation**.
2. Choose the **Call Completed** trigger, then **Create & Configure**.
3. In the trigger settings, optionally select which Scripts and call statuses should sync. Leave the filters empty to sync every completed call.

***

## Step 4: Add the HubSpot Destination

Add a **Destination** step to the pipeline and configure it:

| Setting               | Value                               |
| --------------------- | ----------------------------------- |
| Destination type      | Integration Sync                    |
| Connected integration | HubSpot                             |
| Method                | `POST`                              |
| Endpoint              | `/crm/objects/2026-03/calls`        |
| Header                | `Content-Type` : `application/json` |

Paste this into the **Body Template**:

```json theme={null}
{
  "properties": {
    "hs_timestamp": "{{call.actual_time}}",
    "hs_call_title": "Voxworks call — {{contact.full_name}}",
    "hs_call_body": "{{call.call_summary}}",
    "hs_call_status": "COMPLETED",
    "hs_call_direction": "{{call.direction}}",
    "hs_call_disposition": "{{integration.call_disposition}}",
    "hs_call_duration": "{{call.duration_ms}}",
    "hs_call_from_number": "{{call.phone_ai}}",
    "hs_call_to_number": "{{call.phone_user}}"
  }
}
```

Every `{{...}}` value is filled in automatically for each call.

Save the automation and make sure it is **enabled**.

***

## Step 5: Test It

### Quick connection test

The **Test Request** button in the destination step sends a request immediately — but without a real call behind it, so the `{{...}}` values are empty. To test the connection, temporarily use this static body:

```json theme={null}
{
  "properties": {
    "hs_timestamp": "2026-07-14T00:00:00.000Z",
    "hs_call_title": "Voxworks integration test",
    "hs_call_body": "Connection test",
    "hs_call_status": "COMPLETED",
    "hs_call_direction": "OUTBOUND"
  }
}
```

A **201** response means the connection works. Restore the full body template from Step 4 afterwards, and delete the test record in HubSpot.

### End-to-end test

Run a test call on a Script covered by the automation and let it finish naturally. The summary takes about 30–60 seconds to generate after the call ends; the HubSpot record appears right after. Check **CRM → Calls** in HubSpot.

***

## Where Calls Appear in HubSpot

Synced calls are listed in HubSpot's global Calls view (**CRM → Calls**). They are not yet attached to individual HubSpot contact records — contact matching is coming in a future update. Until then, find synced calls by title ("Voxworks call — …") or by date.

***

## Troubleshooting

Every sync attempt is recorded in the automation's **Execution Log**, including HubSpot's exact response when something fails. Check there first.

| What you see                  | What it means                                                   | What to do                                                                                                                                                  |
| ----------------------------- | --------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `401` error                   | The service key is invalid or was revoked                       | Create a new key in HubSpot and reconnect the integration                                                                                                   |
| `403` error                   | The key is missing a scope                                      | Add the missing scope in HubSpot and reconnect with a new key                                                                                               |
| `400` error naming a field    | HubSpot rejected one of the values                              | Check the execution log for the field name; verify the body template matches Step 4                                                                         |
| Call appears with empty notes | The call produced no summary (very short calls sometimes don't) | Verify the call has a summary in Voxworks before expecting one in HubSpot                                                                                   |
| Nothing appears at all        | The automation didn't run                                       | Check it is enabled and that the call's Script and status match the trigger filters; a call with no conversation (never answered) does not trigger the sync |

***

## Current Limitations

* **No contact association yet.** Calls appear in the global Calls list, not on contact timelines.
* **No call recordings.** Recording links are not included in the synced record.
* **One-way sync.** Calls flow from Voxworks to HubSpot; nothing is read back.
