Connect and sync to HubSpot
Push your customers into HubSpot as contacts — create a private-app token, paste it, and let the daily sync keep them current.
CRM Sync pushes your Tillable customers into HubSpot as contacts, so your marketing lives in the tool you already use while Tillable stays the clean source of truth. This guide covers the HubSpot path end to end.
CRM must be switched on for your account. If you don't see CRM Sync in the sidebar, see Set up CRM for your account.
Before you start
- You need a HubSpot account with admin access — enough to create a Private App.
- You need some customers in Tillable to push. A brand-new account with no sales has nothing to sync yet — take a test sale, booking or QR order first.
Step 1 — Create a HubSpot Private App token
HubSpot connects with a Private App token, a key you make inside HubSpot and paste into Tillable. It takes a couple of minutes and you can do it yourself.
- 1
Open Private Apps in HubSpot
In HubSpot, go to Settings → Integrations → Private Apps and click Create a private app. Give it a name like "Tillable Sync".
- 2
Set the scopes
Open the Scopes tab and switch on exactly these three permissions — they let Tillable create and update contacts, and nothing else:
crm.objects.contacts.read,crm.objects.contacts.write, andcrm.schemas.contacts.write. No other permissions are needed. - 3
Copy the token
Save the app, then copy the access token it shows you (it starts with
pat-).
Step 2 — Paste it into Tillable
In the portal, open CRM Sync from the sidebar, paste the token into the HubSpot card's Private-app token field, and click Connect HubSpot.
Heads up
The token is stored encrypted and never shown again — Tillable can't display it back to you. Keep your own copy in HubSpot if you might need it.
Step 3 — Check it connected
Once connected, the HubSpot card shows a Connected badge and a Last synced time. If something's wrong, the badge shows Error with a Last error message — usually a token that's expired or missing a scope. See CRM troubleshooting.
Tillable creates the custom contact properties it needs in HubSpot for you automatically, in a property group called Tillable: Tillable Customer ID, Tillable Lifetime Spend, Tillable Visits and Tillable Last Visit. There's nothing else to set up there.
If you connected HubSpot a while ago and those properties still show an older name, the next sync renames them for you — you don't need to reconnect. If you renamed any of them yourself in HubSpot, Tillable leaves your name alone.
What gets synced
For each customer, Tillable fills in on their HubSpot contact:
- First and last name, email, phone — so you can recognise and reach them.
- Lifetime spend — their total with you.
- Visits — how many times they've ordered.
- Last visit — when you last saw them.
- A stable Tillable customer ID, used to match the contact.
Contacts are matched on that stable ID, not their email, so the same person is never duplicated on later syncs even if they change email. Order history, notes and tags are not synced.
When it syncs
- On connect — a full push of every customer.
- On Sync now — a full re-push, any time, from the HubSpot card.
- Once a day, overnight (around 03:00 UTC) — re-pushes only customers whose spend, visits or last-visit changed since the last sync.
The sync is one-direction: Tillable pushes out to HubSpot and never reads your HubSpot contacts back, never sends marketing, and never deletes anything. Consent and campaigns live entirely in HubSpot.
First-sync duplicates
If a contact with the same email or phone already exists in HubSpot from before, the first sync may create a second contact alongside it — merge the two manually in HubSpot. From then on, matching is on the stable Tillable customer ID, so no new duplicates appear.
Sync now and disconnect
The connected card gives you Sync now (an immediate full re-push) and Disconnect (stops syncing and clears the stored token; the status returns to Not connected).