Guides
Step-by-step guide to syncing AI voice agent conversations, transcripts, and lead qualification data back to HubSpot using Thoughtly's native integration and post-call automations.
Last updated
Every call your AI voiceAI voiceAn artificially generated, natural-sounding voice produced by a TTS model. Thoughtly supports a library of AI voices and brand-specific cloning. agent handles generates valuable data: who called, what they asked for, whether they qualified, and what happens next. If that data stays trapped in a separate tool, your sales team rebuilds context from scratch every time they open a contact record. Pipeline visibility suffers, follow-up sequences fire blind, and reporting gaps widen with every conversation.
This guide walks through connecting Thoughtly to HubSpot so that every AI conversation — transcripts, qualification outcomes, deal-stage changes, and structured field updates — writes back to the correct contact record automatically. No middleware, no manual entry, no data lag.
By the end, you will have a working post-call automation that pushes conversation data into HubSpot the moment each call ends.
Before starting, make sure you have the following:
Thoughtly uses OAuthOAuthAn authentication standard that lets Thoughtly connect to your CRM or app without storing your password. to authenticate with HubSpot, which means no API keys to manage and no tokens to rotate. The connection is secure, scoped, and takes about two minutes.
At this point, Thoughtly can read HubSpot Contacts, Companies, Deals, and Custom Objects. It can also write back Engagements, property updates, and lifecycle-stage changes.
Field mapping tells Thoughtly which HubSpot properties to read for call context and which ones to update after a conversation. Good mapping means your agent knows who it is talking to and your CRMCRMThe system of record for leads, contacts, deals, and activity. Thoughtly reads from and writes to your CRM continuously. reflects what happened.
Select the HubSpot properties your agent needs during the call — for example, lead source, lifecycle stage, service area, or any custom property that helps the agent personalize the conversation. These map to Thoughtly contact attributes so the agent can reference them in prompts.
| HubSpot Property | Thoughtly Attribute | Why It Matters |
|---|---|---|
| First Name | first_name | Personalize the greeting |
| Lifecycle Stage | lifecycle_stage | Route differently for MQLs vs SQLs |
| Lead Source | lead_source | Adjust script based on channel |
| State/Region | region | Service-area eligibility checks |
| Custom: Insurance Type | insurance_type | Vertical-specific qualification |
Decide which call outputs should write back. The most common fields are qualification outcome, next step, and appointment date — but you can map any variableVariableA named value the voice agent stores during a conversation — caller name, intent, qualifying answers — and uses to drive routing and post-call actions. your agent captures.
| Thoughtly Variable | HubSpot Property | Example Value |
|---|---|---|
| qualification_result | Lead Status | Qualified / Not Interested |
| appointment_date | Next Activity Date | 2026-06-03T10:00:00Z |
| call_summary | Last AI Call Notes (custom) | Caller interested in 30-yr fixed, income verified, appointment booked for Tuesday. |
| preferred_callback | Preferred Callback Time (custom) | Mornings before 10 AM |
Use stable, descriptive attribute names in lower_snake_case so that automations and downstream HubSpot Workflows can reference them reliably.
Variables are how your Thoughtly voice agentVoice agentAn autonomous, conversational interface that interacts with humans over the phone — answering, qualifying, and routing calls without human staffing. extracts structured data from a conversation. Each variable pulls a specific piece of information from the caller's responses and makes it available for post-call automations — including your HubSpot sync.
Open your agent in the Agent Builder, select a Speak node, and scroll to the Variables panel. Click Add variable for each data point you want to capture.
For a typical inbound lead qualification agent, you might configure:
Set the Source to Current speak node when you want extraction from the latest response only (good for confirmations) or Conversation history when the detail may have been mentioned earlier.
The recommended path for syncing call data to HubSpot is the On Call Completed trigger inside Thoughtly Automations. This replaces the legacy post-call settings and gives you conditional logic, multi-step workflows, and error handling.
The On Call Completed trigger fires after every qualifying call, giving you access to the full transcriptTranscriptThe text record of a voice conversation, used for review, training, compliance audit, and search., all extracted variables, call metadata, and the contact record.
With the trigger in place, add the integration steps that write data to HubSpot. Thoughtly's native HubSpot actions let you create, search, update, and retrieve contacts and deals directly.
Add a HubSpot → Search Contact step first. Search by phone number or email to find the matching HubSpot contact. This prevents duplicate records and ensures you are updating the right person.
Add a HubSpot → Update Contact step. Map your captured variables to the corresponding HubSpot properties:
Thoughtly's empty-field filtering prevents accidental overwrites: if a variable was not captured on a particular call, that property will not be blanked out in HubSpot.
If the call outcome should move a Deal forward, add a HubSpot → Update Deal step. Map the qualification result to the appropriate deal stage — for example, if qualification_result is "Qualified," move the deal to "Connect Call Completed" or your equivalent pipeline stage.
Use a Conditions step between the trigger and HubSpot actions to route different outcomes differently. For example:
Before activating the automation for production traffic, validate the full loop on a test contact.
Every call lands as a HubSpot Call Engagement with the recording link, full transcript, AI-generated summary, structured outputs, and the agent name. It appears on the contact timeline identically to a manually-logged call.
Post-call write-back is only half the picture. To keep your Thoughtly Audiences and HubSpot contacts aligned, enable CRM Sync for inbound data as well.
With bidirectional sync active, new HubSpot contacts that meet your filter criteria automatically appear as Thoughtly contacts, and every Thoughtly conversation writes results back to HubSpot. No CSV uploads, no manual imports, no stale data.
These are the issues teams run into most often when setting up a HubSpot sync. Avoiding them upfront saves debugging time later.
Once the sync is live, track these metrics to confirm it is working and delivering value:
| Metric | Where to Measure | Target |
|---|---|---|
| Sync success rate | Thoughtly Automation logs | > 98% of completed calls trigger a successful HubSpot update |
| Time-to-CRM-update | Compare call end timestamp vs HubSpot property last-modified | < 60 seconds after call ends |
| Contact match rate | Search Contact step success vs failure | > 95% (low unmatched rate means your de-dupe logic is working) |
| Rep time saved on data entry | Track manual CRM edits before/after | Measurable reduction in post-call admin tasks |
| Pipeline visibility | HubSpot reporting on AI-sourced deals | Deals from AI calls visible in pipeline dashboards without manual creation |
Review the Thoughtly Automation logs weekly for the first month. Look for failed steps, field-mapping errors, and unmatched contacts. Most issues surface in the first week and are fixable by adjusting field types or adding fallback logic.
No. Thoughtly runs its own voice infrastructure. Calls are billed through Thoughtly per minute. The HubSpot integration writes call data back as Engagements, but it does not consume HubSpot Calling minutes or require a Sales Hub Pro/Enterprise calling seat.
Yes. The On Call Completed trigger fires for any call the selected agents complete, regardless of direction. You can use Conditions steps to branch logic based on whether the call was inbound or outbound if you need different HubSpot update behavior for each.
You can configure your automation to create a new HubSpot contact when the Search Contact step returns no match. Thoughtly respects HubSpot's duplicate-property rules and can be set to "update only" mode if you prefer that unmatched contacts are not created automatically.
Yes. Every synced call lands as a HubSpot Call Engagement on the contact timeline. It includes the recording link, full transcript, AI-generated summary, structured variable outputs, and the agent name. For reporting purposes, it looks identical to a manually-logged call.
Thoughtly reads HubSpot Contacts, Companies, Deals, and Custom Objects. Write-back support for Custom Objects depends on the specific object and field configuration. Contact your Thoughtly account team if you need to map variables to a Custom Object.