What Calendly adds to Halo
Connect at Settings > Integrations > Calendly.
Setup
Connecting
Click Connect with Calendly and approve the OAuth consent screen. Halo connects as the Calendly user who approves it: their event types are what the sales agent can pick, and their bookings are what syncs. The consent screen asks for these Calendly scopes, and nothing else:Self-hosting Halo? The OAuth app you create in Calendly’s developer console (My Apps, Production environment, redirect URI
<your app URL>/api/integrations/calendly/callback) must have exactly these five scopes ticked. Calendly refuses an authorization that requests a scope the app wasn’t configured with, and Halo refuses a grant that is missing one. Set the app’s client ID and secret as CALENDLY_CLIENT_ID and CALENDLY_CLIENT_SECRET, and the app’s webhook signing key (shown on the app in the developer console) as CALENDLY_WEBHOOK_SIGNING_KEY: Calendly signs an OAuth app’s webhook deliveries with that key.invitee.created and invitee.canceled and runs an initial sync of the last 30 days of bookings. The initial sync imports quietly: contacts and meetings are created, but no lead alerts, series or workflows fire for old bookings.
Calendly only allows webhook subscriptions on its paid plans. If registration is refused, the integration page says so and bookings are picked up by the hourly sync instead. They still reach contacts, alerts and the AI, just not instantly. Reconnect after upgrading to turn on real-time delivery.
Using it in the sales agent
- On the sales agent, under Integration embeds, click Add integration and pick Calendly.
- Choose an event type from the list (or paste a scheduling link if you prefer).
- Give it a label. The event type’s name is used until you change it.
What happens on a booking
- The invitee becomes a lead contact in Contacts, or lands on their existing contact when the email is already known. Booking questions are stored as contact attributes.
- A meeting is recorded with the event type, time, join link, and cancel/reschedule links, and shown on the contact’s timeline.
- Your lead notifications fire for a fresh lead, naming the event type they booked.
- A booking made inside the chat is attached to that conversation: the visitor’s anonymous contact gets the booking, the transcript links to the contact, the alert goes through the sales agent that ran the chat, and the AI sees “Booked ‘30 min demo’ for … in this conversation” so it confirms instead of offering to book again.
salesforce_uuid tracking slot (and in utm_content when the page has no UTM content of its own). Calendly echoes it back on the booking. If you also use Calendly’s own Salesforce integration, bookings made inside the chat carry this reference instead of a Salesforce id.