CRM sync and booking
Docs · CRM and calendar
Send contacts and conversations to HubSpot or Salesforce, and let the AI book meetings in Calendly, Cal.com, Google Calendar or Microsoft 365. Both live under Settings → CRM & calendar.
Before you start
- Difficulty: Medium
- Time: 15 minutes
- You need: An admin or owner account
- You need: HubSpot: a private app access token. Salesforce: your org ID, or a connected app for REST
- You need: Calendly: a personal access token. Cal.com: an API key
- You need: Google Calendar or Microsoft 365: an OAuth client of your own (Google Cloud project or Entra app registration)
Steps
Connect HubSpot
In HubSpot, create a private app (Settings → Integrations → Private apps) with the crm.objects.contacts.read and crm.objects.contacts.write scopes, plus crm.objects.deals.write if you want deals. Paste its access token into ZChat. Contacts are matched by email, and each conversation is posted as a note on the contact.
Or connect Salesforce
Web-to-Lead needs only your org ID (00D...) and creates a lead once per contact. REST uses your own connected app with the OAuth client-credentials flow: paste its consumer key and secret and your My Domain (*.my.salesforce.com). REST creates or updates a lead matched by email and adds the conversation as a completed task. Switching modes needs a new connection.
Choose when to sync
By default ZChat syncs when a lead is captured (pre-chat form, details shared, a booking) and when a conversation ends, with the transcript, a summary or nothing as the note. The inbox contact panel shows each synced record with a link to it and a Sync now button.
Connect a calendar
Paste a Calendly personal access token or a Cal.com API key and pick one event type. The AI then offers 3 to 5 open times as buttons in the visitor's time zone and books the one the visitor picks, with their name and email. The calendar provider sends the invitation.
Or connect Google Calendar or Microsoft 365
ZChat has no Google or Microsoft app of its own: you create the OAuth client and keep control of it. Google: in the Google Cloud console enable the Google Calendar API, set up the OAuth consent screen with the calendar.events, calendar.freebusy and calendar.settings.readonly scopes, and create an OAuth client ID of type Web application. Microsoft: register an app in Entra with the delegated Graph permissions Calendars.ReadWrite, MailboxSettings.Read, User.Read and offline_access, and add a client secret. Register the redirect URI below in either, paste the client ID and secret (and the Microsoft tenant ID) into ZChat and sign in.
Redirect URI: https://api.zchat.com/api/integrations/calendar/oauth/callback
Set your working hours
For Google and Microsoft, ZChat reads free/busy from the calendars you list and offers times inside your working hours and days, in your time zone, with the meeting length, a buffer around other events, a minimum notice, how many days ahead (up to 14) and an optional cap on meetings per day. Right before booking it checks the time is still free. The visitor is invited by email, with an optional Google Meet or Microsoft Teams link, and gets a cancel link that removes the event.
Plans and limits
CRM sync: CRM sync (HubSpot and Salesforce) is on paid plans. A workspace that drops to the free plan keeps its connection and synced records; new syncs pause until it upgrades.Booking: Booking in chat (Calendly, Cal.com, Google Calendar and Microsoft 365) is on every plan. One calendar can be connected at a time.Salesforce Web-to-Lead: Creates a lead once per contact and cannot update it, attach notes or report errors. The transcript goes in the lead description once the conversation has ended. Salesforce caps it at 500 leads a day.Calendly: Booking directly in chat uses Calendly's Scheduling API, which needs a paid Calendly plan; otherwise the button opens Calendly at the chosen time.Google and Microsoft sign-in: Authorization code with PKCE and a single-use state. The client secret and tokens are stored encrypted and never shown again; access tokens refresh on their own. If access is revoked or the client secret expires, the connection shows Reconnect needed and the AI shares your booking link instead.Google Testing apps: Google expires sign-ins of an External app in Testing status after 7 days. Publish the app so the connection keeps working.Retries: Each sync is a durable job, tried up to 5 times on timeouts, rate limits and server errors. Other errors are shown in the problems list on the CRM & calendar page.
Good to know
- ZChat pushes to the CRM; it does not read CRM fields back. The inbox shows ZChat's record of what it sent, with links.
- Salesforce REST creates leads and tasks, not opportunities.
- Rescheduling a Google or Microsoft booking means cancelling it and asking the AI for a new time.
- Microsoft 365 needs a work or school account; free/busy lookups do not work for personal Outlook.com accounts.
Booking a meeting is an AI action like any other, so you can require the visitor's or a teammate's confirmation first.