The HubSpot CRM Integration establishes a bidirectional, secure, and real-time data bridge between Supsis—where omnichannel customer communication and live support are managed—and HubSpot CRM, where corporate marketing, sales pipeline, and customer success operations take place. Thanks to this integration, new customers arriving via WhatsApp, Instagram, Live Chat (WebChat), or other communication channels can be automatically created as contacts and deals in HubSpot according to configured business rules and transfer modes.
The integration connects directly using an Access Token without requiring complex OAuth authorization popups. Depending on your business needs, you can choose between a rapid setup via Service Key or a full-featured Private App method supporting real-time automation events (webhooks). Live support agents can inspect the customer's HubSpot contacts, open deals, associated companies, and activity history directly within the chat interface without switching tabs, as well as append new notes and tasks. In addition, real-time events in HubSpot (such as deal stage changes or contact updates) can instantly trigger Supsis automations.
1- HubSpot CRM Integration Overview
1.a – What is HubSpot CRM and the Purpose of the Integration
HubSpot is a cloud-based CRM platform that enables sales, marketing, customer support, and operations teams to manage contacts, deals, companies, tickets, and engagement activities within a unified database.
Organizations typically run their multi-channel customer conversations through Supsis while tracking their sales pipeline and customer lifecycle inside HubSpot. Without integration, agents are forced to constantly switch back and forth between messaging windows and CRM tabs, manually copy-pasting customer details and logging every new conversation. This leads to operational friction, data discrepancies, and lost sales opportunities.
The Supsis HubSpot CRM Integration eliminates this disconnect through a bidirectional automated flow:
- Supsis → HubSpot (Data Forwarding): When a new customer reaches out via WhatsApp, Instagram, or WebChat, phone and email deduplication checks are executed. If no matching record exists, Supsis automatically creates a Contact (and optionally an associated Deal) in HubSpot.
- HubSpot → Supsis (In-Chat CRM Widget): In the live support interface, the right-hand customer profile panel displays a dedicated HubSpot tab. Contact details, open/closed deals, associated companies, and tasks are displayed in real time. Agents can review the HubSpot profile and add notes to deals without leaving the conversation.
- HubSpot Events → Supsis Automations (Webhooks): Powered by Private App webhooks, when a deal stage changes in HubSpot (e.g., to "Closed Won"), a contact is deleted, or a company is updated, Supsis automations are triggered immediately to send notifications via WhatsApp, SMS, or email.
1.b – Two-Tier Configuration Architecture
The HubSpot CRM integration operates on a two-tier structural model:
| Tier | Location | Scope and Responsibility |
|---|---|---|
| 1. HubSpot Integration Channel | Integrations > CRM > HubSpot CRM | The centralized site-wide HubSpot connection. Manages the Access Token, connected Portal ID, token type (Service Key / Private App), webhook endpoint, user mapping, and visibility permissions. Only 1 HubSpot channel can be created per site. |
| 2. Source Channel Forwarding Settings | Channel Details > CRM Forward > HubSpot | Configured independently for each communication channel (e.g., WhatsApp, Instagram, or WebChat). Toggles "Forward new contacts to HubSpot", selects the forward mode (Contact or Contact + Deal), phone format, Lifecycle Stage, default Owner, and dynamic field mappings. |
Single Channel Per Site Rule
On the Supsis platform, only 1 HubSpot CRM channel can be created per site/workspace. If a user attempts to add a second channel, the system displays the warning "You cannot create more than one HubSpot channel" and disables adding another.
1.c – Glossary of Terms
The key concepts utilized throughout the HubSpot integration interface and documentation are detailed below:
| Term | System / Scope | Description |
|---|---|---|
| HubSpot | External CRM Platform | The central CRM system where marketing, sales, and service records are maintained (app.hubspot.com). |
| Portal / Hub ID | HubSpot Account Identifier | The unique numerical identifier of your HubSpot portal. Found under the top-right profile menu or in Settings → Account Defaults. Stored in the Supsis channel and used for webhook signature verification. |
| Access Token | Supsis & HubSpot | The secret API key used by Supsis to authenticate Bearer requests to HubSpot REST APIs (pat-na1-... or pat-eu1-...). Masked in the UI. |
| Service Key | HubSpot Connection Method | HubSpot's direct API key model that does not require app creation. Does not support webhooks; ideal for quick contact forwarding and chat widget usage. (Public Beta). |
| Private App | HubSpot Connection Method | The dedicated custom app model created within your HubSpot account. Produces an Access Token alongside a Client Secret, supporting webhook subscriptions for automation triggers. |
| Client Secret | Private App Security | The secret key found under the Auth tab of a Private App. Configured in Supsis to verify the X-HubSpot-Signature-v3 HMAC signature on incoming webhooks. |
| Scope (Permission) | HubSpot API Permissions | Defines the data boundaries that the token is authorized to access. If required scopes are missing, Supsis rejects the connection. |
| Contact | HubSpot CRM Object | An individual customer record containing email, phone, lifecycle stage, and assigned owner. Forms the core of Supsis contact forwarding. |
| Deal | HubSpot CRM Object | Represents a sales opportunity tied to a specific pipeline and deal stage. Automatically associated with the contact in Contact + Deal mode. |
| Company | HubSpot CRM Object | The corporate organization record tied to the contact. Displayed as read-only in the chat widget. |
| Ticket | HubSpot Service Hub | Customer support ticket records. Can be created via automation blocks and SDK; listened to via ticket.creation webhook. |
| Note & Task | HubSpot Activities | Timeline engagement records attached to contacts or deals. Agents can append notes directly from the chat widget. |
| Owner | HubSpot User | The team member responsible for a record in HubSpot. Mapped to Supsis agents via email address. |
| Lifecycle Stage | Customer Journey Stage | Identifies where the contact is in the marketing/sales funnel (Lead, Subscriber, MQL, SQL, Opportunity, Customer, etc.). Replaces a standalone "Lead" object in standard HubSpot CRM. |
| Pipeline & Deal Stage | Sales Funnel & Stage | The progression milestones of sales deals. Mandatory when configuring Contact + Deal forwarding. |
| Association | HubSpot Object Link | A bidirectional link between HubSpot objects (e.g., Contact ↔ Deal). Supsis automatically creates this association when creating deals. |
| Dedup (Deduplication) | Forwarding Logic | The pre-forward search mechanism that matches phone and email against existing HubSpot contacts to prevent duplicate CRM records. |
| token-invalid | Channel Status | Indicates that the Access Token has expired, been revoked, or rotated. The channel card displays an orange "Reconnection required" badge. |
2- Connection Methods: Service Key vs. Private App
The Supsis HubSpot CRM integration does not use a third-party OAuth popup. Users simply copy their Access Token from HubSpot and paste it into Supsis. You can choose between two methods based on your functional requirements:
| Feature & Comparison | Easy Path: Service Key | Full-Featured Path: Private App |
|---|---|---|
| Setup Complexity | Very Easy (One-step key generation) | Standard (App creation & webhook configuration) |
| HubSpot Navigation | Settings → Integrations → Service Keys | Settings → Integrations → Private Apps (Legacy Apps) |
| Webhook Support | None (Cannot listen to HubSpot events) | Supported (Full automation trigger support) |
| Automation Triggers | Not Supported | 10 Different HubSpot Events supported |
| Contact Forwarding (CRM Forward) | Fully Supported | Fully Supported |
| Live Chat HubSpot Widget | Fully Supported | Fully Supported |
| Automation Action Blocks | Fully Supported | Fully Supported |
| JavaScript SDK Support | Fully Supported | Fully Supported |
| Required Credentials | Access Token only | Access Token + Client Secret |
| Release Status | Public Beta (Requires Developer Tools access) | Stable / Enterprise Standard |
Do you need Automation Triggers (Webhooks)?
Generated in a single step under HubSpot Settings → Integrations → Service Keys.
Created under HubSpot Settings → Integrations → Private Apps (Legacy Apps).
Transitioning from Service Key to Private App Without Deleting Channel
If you initially connected using a Service Key, you do not need to delete your channel to enable webhooks later! Simply create a Private App in HubSpot and enter the Client Secret into your channel's Detail tab in Supsis. The Access Token can remain your Service Key, and webhook processing will activate immediately.
3- Required Scopes
Regardless of which connection method you use, the Access Token must include all the following scopes. If any scope is missing, Supsis will reject the connection and display the name of the missing scope in the error message:
crm.objects.contacts.read– Permission to read contactscrm.objects.contacts.write– Permission to create and update contactscrm.objects.deals.read– Permission to read dealscrm.objects.deals.write– Permission to create and update dealscrm.objects.owners.read– Permission to read HubSpot owners/userscrm.objects.companies.read– Permission to read associated company datacrm.schemas.contacts.read– Permission to inspect contact property schemascrm.schemas.deals.read– Permission to inspect deal property schemascrm.schemas.companies.read– Permission to inspect company property schemas
Ticket and Custom Object Scopes
If you intend to create HubSpot Support Tickets via automation blocks or Chatbot JS SDK scripts, make sure to add tickets (read and write) permissions to your Private App scopes.
4- Setup Steps
4.a – Accessing the Integration Card
- Log in to the Supsis administration panel and navigate to Integrations in the left navigation menu.
- Under the CRM section, locate the HubSpot CRM card featuring the green
● FREEbadge. - Click the card to open the HubSpot CRM Channels list.



4.b – Method 1: Full Setup via Private App (Recommended)
Follow these steps to enable full CRM management along with automation triggers and webhook notifications:
HubSpot UI Update: Legacy Apps
In recent updates, HubSpot has relocated this section under Legacy Apps. When clicking Private Apps, HubSpot will automatically redirect you to the "Legacy Apps" view. This does not affect integration functionality.
- Navigate to Private Apps in HubSpot: In your HubSpot account, click the gear icon (Settings) in the top right. In the left-hand sidebar, go to Integrations → Private Apps.
-
Initialize App Creation: Click Create legacy app (or Create a private app) and select Private in the modal.
-
Define Basic Info: Set the application name to
Supsis AI Integration. Optionally, add a brief description and upload the Supsis logo. -
Add Scopes: Switch to the Scopes tab. Search for and check all Contact, Deal, Owner, Company, and Schema scopes listed in Section 3. Confirm all selections in the Summary sidebar.
-
Generate the App and Retrieve Credentials: Click Create app in the top right and confirm with Continue creating.
- Copy the generated Access Token (
pat-na1-...). -
Switch to the Auth tab and copy the Client Secret for webhook signature verification.
-
Connect in Supsis: Return to the Add Channel modal in Supsis. Enter a channel name, paste the Access Token and Client Secret, and click Connect.






4.c – Method 2: Quick Setup via Service Key
If you only need in-chat contact inspection and automatic contact forwarding without webhooks, you can connect in seconds using a Service Key:
- Navigate to Service Keys: In HubSpot, go to Settings → Integrations → Service Keys (or Development → Keys → Service Keys in some accounts) (See: Integrations Settings Screen above).
- Create a Key: Click Create Service Key and provide a descriptive name.
- Select Scopes: Select the required read/write scopes listed in Section 3 and verify the summary.
- Copy the Token: Copy the generated Access Token.
- Add Channel in Supsis: In Supsis, open the Add Channel modal, paste the token, and click Connect.




5- Forwarding Data from Channels (CRM Forward)
5.a – Enabling Forwarding
Once the HubSpot channel is established, contact forwarding must be enabled on your source messaging channels (e.g., WhatsApp or WebChat):
- In Supsis, go to Settings > Channels or open the channel details from the left menu (e.g., WhatsApp Channels → Channel Details).
- Open the CRM / HubSpot tab.
- Toggle on Forward new contacts to HubSpot.

5.b – Forwarding Modes and Parameters
Configure the following parameters in the forwarding tab:
- Forward Mode:
- Contact (Contact Only): Creates only a contact record in HubSpot for each new customer.
- Contact + Deal: Creates both a contact and a new sales deal, automatically linking them together (Association). In this mode, selecting a Pipeline and Deal Stage is mandatory.
- Lifecycle Stage: HubSpot CRM does not have a separate "Lead" object in standard configurations. In Supsis, the lead state is managed through the contact's Lifecycle Stage. Available values:
lead(Default)subscribermarketingqualifiedlead(MQL)salesqualifiedlead(SQL)opportunitycustomerevangelistother- Phone Format:
E.164 (with +):+905xxxxxxxxxWithout +:905xxxxxxxxx(HubSpot searchesphone,mobilephone, and computed normalized phone fields simultaneously).- Default Owner: Specifies the default HubSpot user assigned to newly created records. If left blank, HubSpot's portal default applies.
- Field Mapping:
Map Supsis contact and session variables to HubSpot custom properties using templates (e.g.,
{{contact.phone}},{{contact.name}}).
5.c – Deduplication Logic (Dedup)
To prevent duplicate contact records from polluting your CRM database:
Incoming Customer & HubSpot Contact ID Check
If a previously stored HubSpot Contact ID exists, no new record is created; the chat is linked directly.
If no ID exists, queries are dispatched to the HubSpot REST API across phone and email fields.
Search Result & Record Creation
Existing HubSpot Contact is linked and updated with the Supsis visitor, preventing duplicates.
A new record is created automatically according to the selected mode (Contact or Contact + Deal).
6- HubSpot Widget in Live Chat
When the HubSpot integration is active, agents gain access to a dedicated CRM panel directly inside the live chat interface:
- Access: In the chat view, click the HubSpot tab in the right-side customer profile pane.
- Contacts Tab: Shows customer name, title, email, phone, lifecycle stage, and assigned owner. The "View in HubSpot" button opens the record directly in HubSpot with a single click.
- Deals Tab: Lists all active and closed deals associated with the contact, showing stage, amount, and close date. Agents can append notes directly to deals from this panel.
- Companies Tab: Displays associated organization details in read-only mode.
- Activities Tab: Displays tasks and past communication touchpoints tied to the contact.



7- User Mapping and Visibility
7.a – User Mapping
Under the User mapping tab of your HubSpot channel, match Supsis support agents with HubSpot Owners via their email addresses:
- When an agent reassigns record ownership in the chat widget, this mapping table is referenced.
- When records are assigned in HubSpot, notifications can be routed to the corresponding Supsis agent.

7.b – Visibility
Control which departments and agent teams can access the HubSpot CRM channel and inspect CRM widget data using the Visibility tab.

8- Webhook Setup and Automation Triggers
Accounts connected via Private App can receive real-time webhook events from HubSpot to trigger Supsis automations.
8.a – Webhook Configuration Steps
- In Supsis, go to Integrations > HubSpot CRM > Channel Detail > Webhooks.
- Copy the dedicated Target URL.
(Format:
https://socket.supsis.live/webhook/hubspot/{siteId}/{channelId}) - In your HubSpot Private App settings, open the Webhooks tab and paste the Target URL.
- Under Event subscriptions, subscribe to the recommended events:
contact.creation,contact.propertyChange,contact.deletiondeal.creation,deal.propertyChange,deal.deletioncompany.creation,company.propertyChangeticket.creation- Save the webhook settings in HubSpot.
- Copy the Client Secret from the Private App Auth tab, paste it into the Detail tab of your Supsis channel, and save.
HMAC Signature Verification (X-HubSpot-Signature-v3)
If no Client Secret is configured, webhook requests are validated only against Portal ID matching. When a Client Secret is supplied, requests are cryptographically verified using X-HubSpot-Signature-v3, and requests older than 5 minutes are rejected for security.
8.b – Automation Trigger Events
Under the HubSpot module in the Supsis Automation Designer, 10 distinct events are available:
| Trigger Event Name | System Event Code | Description |
|---|---|---|
| When HubSpot contact is created | hubspot.contact_created |
Fires when a new contact is created in HubSpot. |
| When HubSpot contact is updated | hubspot.contact_updated |
Fires when contact properties are modified. |
| When HubSpot contact is deleted | hubspot.contact_deleted |
Fires when a contact is removed. |
| When HubSpot deal is created | hubspot.deal_created |
Fires when a new deal is opened. |
| When HubSpot deal is updated | hubspot.deal_updated |
Fires when deal properties are updated. |
| When HubSpot deal stage changed | hubspot.deal_stage_changed |
Fires when a deal moves to a new pipeline stage (e.g., Won/Lost). |
| When HubSpot deal is deleted | hubspot.deal_deleted |
Fires when a deal is removed. |
| When HubSpot company is created | hubspot.company_created |
Fires when a new company is added. |
| When HubSpot company is updated | hubspot.company_updated |
Fires when company properties are updated. |
| When HubSpot ticket is created | hubspot.ticket_created |
Fires when a new service ticket is opened. |

9- Supsis Automation Designer & Action Blocks
The Automation Flow Designer provides 4 dedicated blocks under the orange HubSpot Actions palette:
- Find HubSpot Contact by Phone: Searches for a contact using their phone number and returns the HubSpot Contact ID for subsequent blocks.
- Create HubSpot Record: Creates a Contact, Deal, Note, Task, or Ticket object with dynamic property values populated from HubSpot schemas.
- Update HubSpot Record: Updates properties on an existing record (including reassigning owners).
- Add Note to HubSpot: Appends a rich-text note to the timeline of an associated contact or deal.


9.a – JavaScript SDK and Code Blocks
Custom programmatic workflows can be executed within Chatbot and Automation JavaScript code blocks via the supsis.hubspot object:
// Example: Find contact in HubSpot by phone number
const contact = await supsis.hubspot.findContactByPhone("+15551234567");
if (contact) {
// Create a new Deal associated with the contact
await supsis.hubspot.createRecord("deals", {
dealname: "WhatsApp Inquiry Lead",
amount: "15000",
dealstage: "appointmentscheduled",
pipeline: "default"
}, { associateContactId: contact.id });
// Append an activity note
await supsis.hubspot.addNote(contact.id, "Customer requested a live demo via WhatsApp.");
}
10- Troubleshooting & FAQ
10.a – "Channel card displays 'Reconnection required' warning"
- The Access Token in HubSpot may have been rotated, deleted, or the user who created it may have lost developer permissions.
- Resolution: Generate a new Access Token in HubSpot, navigate to HubSpot CRM > Channel Detail > Detail in Supsis, paste the token, and save.
10.b – "Duplicate contacts are created in HubSpot"
- The phone number formatting in the source channel might not match the format stored in HubSpot (e.g., numbers formatted with
+vs without+). - Resolution: In WhatsApp channel settings, align the Phone Format setting with your HubSpot database standard (
E.164 with +orWithout +).
10.c – "Automation does not trigger when Deal stage changes"
- The
deal.propertyChangesubscription may be missing from your Private App webhooks. - Resolution: In HubSpot Private App → Webhooks, ensure
deal.propertyChangeis active and verify that the Client Secret is entered in Supsis channel details.
10.d – "Rate Limit (429 Too Many Requests) errors"
- The HubSpot Search API enforces a limit of approximately 4–5 requests per second. Burst requests during bulk messaging campaigns can exceed this threshold.
- Resolution: Introduce short delay blocks between sequential searches in automation flows or leverage Contact ID caching.