There are two ways to run WhatsApp with HubSpot Service Hub. HubSpot offers its own WhatsApp channel in its inbox through the WhatsApp Business API, which means a number registered on the API, approved templates for messages outside the 24-hour window, and per-message fees. The other way keeps WhatsApp on the number your customers already use, with Spun as the WhatsApp workspace, and creates HubSpot tickets through a workflow in your own n8n.
This page covers the second route, for HubSpot tickets from WhatsApp: every one-to-one conversation becomes a ticket in the pipeline you pick, every message is logged on the ticket and the contact timeline, and agents reply to WhatsApp from the ticket. It works alongside Spun's HubSpot CRM contact sync, which keeps contacts in step and does not create tickets.
HubSpot tickets from WhatsApp: what the workflow does
- Every one-to-one WhatsApp conversation becomes a HubSpot ticket in the pipeline and stage your admin picks. Group chats are skipped.
- Every message is logged on the ticket as a WhatsApp communication and also shows on the contact's timeline, with the speaker named in the text.
- Replies your team sends from the Spun inbox are logged on the ticket too, so both sides can answer.
- Archiving in Spun moves the ticket to the closed stage, and unarchiving moves it back to the open stage. Closing in HubSpot can archive the conversation in Spun as well, an option that is off until you turn it on.
[WhatsApp] Maria Lopez (+15550142233): Hi, my order has not arrived yet
[Sent from Spun] Alex: Sorry about that, checking now.
[Sent from HubSpot] It ships today, here is the tracking link.Replying from the ticket with the Spun reply field
Agents reply by typing into a Spun reply property on the ticket and saving. Within a few seconds the text reaches the customer on WhatsApp, it is logged on the ticket, and the field is empty again. If a reply could not be sent, a note on the ticket says why.
Replies are text only; ticket attachments are not forwarded. HubSpot notes and emails stay internal. Anything written into Spun reply is sent, whoever writes it, so keep that property out of bulk edits, imports and HubSpot workflows.
Working alongside the HubSpot CRM contact sync
Spun's HubSpot CRM contact sync owns contacts; this workflow owns tickets. The workflow uses its own HubSpot key and never edits a contact. With the contact sync connected, it never creates a contact either: a brand-new customer's ticket is linked once the sync has pushed the contact, which happens on Sync Now or a mapped label rather than on every message.
Setup, step by step
You need HubSpot Service Hub, a user who can create properties, keys and webhook subscriptions, an n8n instance that HubSpot and Spun can reach over HTTPS, and an app to carry the reply webhook: a legacy private app (create it before October 26, 2026, when HubSpot stops new ones for existing accounts) or a project-based app, which is built with the HubSpot CLI and needs a developer.
- 1
Create two ticket properties
Spun chat id (single-line text) and Spun reply (multi-line text). Add Spun reply to the ticket sidebar so agents see it.
- 2
Create a key for API calls
A service key or the access token of your legacy private app, with the ticket and contact scopes in the setup guide, stored in n8n as a Header Auth credential.
- 3
Import the workflow
Run its setup helper once to list your ticket pipelines and stages, and copy the ids into the Settings node.
- 4
Tell it about the contact sync
Keep the contact sync setting on if Spun's HubSpot contact sync is connected, or if you are unsure.
- 5
Subscribe the app to ticket changes
Point the app's webhook at the workflow's reply URL with a subscription on the Spun reply property, and paste the app's client secret into the workflow.
- 6
Create a Spun API key
Settings, then Webhooks, then Manage API Keys, with the Send Messages scope. Tick "Close & Reopen Conversations" too if closing in HubSpot should archive the conversation in Spun.
- 7
Subscribe Spun to the workflow
Add a webhook for incoming messages, outgoing messages, conversation closed and conversation reopened, with the payload template set to raw, and paste its signing secret into the workflow.
- 8
Send a test message
Message the line from another phone. A ticket appears in HubSpot; type a reply into Spun reply, save, and the reply reaches the phone.
Related: Docs: HubSpot Service Hub via n8n, the full setup guide · WhatsApp + n8n: the API and webhooks underneath
What to know before you build
- HubSpot webhooks are signed and the workflow checks the signature. Spun's own events are HMAC-signed.
- Media goes onto the ticket as a link valid for 24 hours, not as a HubSpot file.
- HubSpot API limits apply per key (100 or 190 requests per 10 seconds, plus a daily limit per account). A new conversation costs four or five calls and a later message two.
- Each delivered event uses AI tokens from your Spun plan. How this is metered for helpdesk use is still being reviewed.
Related: All WhatsApp helpdesk integrations · WhatsApp as the helpdesk itself