Every WhatsApp chat,
on one contact.
Conversations land on your HubSpot timeline as notes, against the contact that number belongs to. Not a second contact, not a merge job later - the same one, every time.
- Keyed to a unique property
- Notes on the timeline
- One private-app token
Two messages, one minute apart, still one contact.
This is the failure every WhatsApp-to-HubSpot connector has to survive, and the one worth checking before you trust any of them with your portal.
HubSpot’s search index lags its own writes. Two messages close together both search, both find nothing, and both create.
The phone number is stored on a unique property, and the write goes through HubSpot’s own upsert keyed on it. HubSpot decides create-or-update, so there is no window to lose.
A number you already have in HubSpot is adopted, not duplicated.
The first time a number comes through, we look for a contact that already carries it on phone or mobilephone and stamp our id onto that record. One lookup per number, ever - after that the upsert handles it. There is also a backfill button for the contacts that existed before you connected.
Three things, each with its own switch.
Nothing is ever deleted from HubSpot, and a name already set there is never overwritten. Turn any of these off and the rest keep working.
The contact
First name, last name and the number, on a contact keyed to that number. A name already set in HubSpot is never overwritten.
sync_contactsA note per message
Every inbound WhatsApp message lands on that contact's timeline as a note, with the text and the time it arrived.
log_messagesYour replies too
The messages your team sends are written the same way, so the timeline reads as the conversation rather than half of it.
log_outboundOne token, and you are done.
- 1
Make a Service Key
In HubSpot: Settings → Integrations → Private Apps. Tick the three scopes and copy the token it gives you.
contacts.readcontacts.writenotes.write - 2
Paste it in
Open the HubSpot card in your dashboard, paste the token, and connect. We check it against your portal before saving.
Connectedpat-na1-•••• - 3
The property is made for you
On connect we create the unique property the upsert is keyed on. Nothing to add by hand in HubSpot.
aionechat_wa_idunique
A rotated token is loud, not silent.
The usual way a CRM sync dies is that someone rotates the key and nobody notices for a fortnight. Your HubSpot card keeps a count, and a row per write with the reason attached - so a 401 shows up against the exact contact it failed on.
contactthe contact was created or updatedmessagea note was written on the timelinebackfillthe one-off push of contacts you already had
Numbers in the log are masked to their last four digits, and rows expire after 30 days on their own.
messagefailedHubSpot answered 401 - the token was rotated•••• 4455messagesynced•••• 3344contactsynced•••• 2233messagesynced•••• 3210A rotated token shows up here as a 401 against the exact contact it failed on, rather than as silence.
Put the conversation where the deal is.
Create a private-app token with three scopes, paste it in, and the next WhatsApp message lands on the contact.
