HubSpot
The HubSpot integration logs Speechlytics calls on your HubSpot CRM timeline: each call becomes a HubSpot call activity with its recording and summary, associated with the matching contact.
HubSpot is an outbound integration: Speechlytics does not import calls from HubSpot. Calls come from any other source (API, upload, SFTP, Aircall, FrontSpin, 3CX, Teams) and are sent to HubSpot automatically.
Setting it up
1. Create a private app in HubSpot
In HubSpot, go to Settings → Integrations → Private Apps, create an app and grant it these scopes:
| Scope | Used to |
|---|---|
crm.objects.contacts.read | Find the contact for a call. |
crm.objects.contacts.write | Associate the call with the contact. |
files | Upload recordings to the File Manager. |
Copy the app's access token.
2. Configure Speechlytics
Provide the access token to your Speechlytics representative. The integration has these settings:
| Setting | Default | Meaning |
|---|---|---|
| Access Token | — | The private app token. Stored masked. |
| Recordings Folder | /CallRecordings | HubSpot File Manager folder where recordings are uploaded. |
| Base Url | https://api.hubapi.com | HubSpot API address. |
Once saved, the integration is switched on.
What is written to HubSpot
For each call, Speechlytics:
- uploads the recording to the Recordings Folder;
- looks up the contact (see below);
- creates a HubSpot call activity and associates it with the contact when one was found;
- stores the HubSpot call id on the Speechlytics call.
| HubSpot field | Value |
|---|---|
| Title | "Call with customer name", or "Call number" when no name is known. |
| Body | The call summary, or a short note with the duration and score when no summary exists. |
| Duration | The call duration. |
| Direction | Inbound or outbound, from the call's metadata. |
| Status | Completed. |
| Disposition | Connected, or No answer for unanswered calls. |
| Recording URL | The uploaded recording. |
| Source | Integrations platform. |
Each call is sent once. A call that already has a HubSpot call id is not sent again, so later changes in Speechlytics (a resync, a polish, a re-summarize) are not reflected in HubSpot.
Contact matching
Speechlytics searches HubSpot for a contact whose Phone number property equals the customer's number on the call. The first matching contact is used. If no contact matches, the call is still logged on the timeline, without a contact.
For reliable matching:
- store contacts' numbers in HubSpot's Phone number property, in the same format your phone system reports them (for example
+15551234567); - send customer numbers on API submissions in the
metadata(remotefor the customer side).
Things to know
- Recordings are uploaded to HubSpot's File Manager as MP3 files and are accessible to anyone with the recording URL. Apply your HubSpot file-access policies accordingly.
- The activity's timestamp is the time Speechlytics logged it, which is shortly after the call was processed.
- The call is logged as soon as Speechlytics first reports on it. When summaries are enabled, a call can be logged before its summary is ready, in which case the body contains the short duration-and-score note.
Troubleshooting
| Symptom | What to check |
|---|---|
| No call appears in HubSpot | The integration is enabled and the access token is valid and has the scopes above. |
| The call is not on a contact | No contact's Phone number matched the customer's number exactly. |
| The body has no summary | The call was logged before its summary was ready. |
| No recording on the activity | The recording could not be read or uploaded; check the files scope. |