Cal.com integration: new bookings mark leads booked
A Cal.com webhook tells ZenMode when a prospect books, and the lead is promoted to meeting_booked automatically.
Verified against the product on September 3, 2026 · Updated · Set up in /dashboard/settings
What this integration is
Cal.com is wired as an inbound webhook. Nothing is installed, no OAuth screen appears and no API key changes hands: the Calendar section of ZenMode's settings hands you a webhook URL that belongs to your account alone — it carries a per-user token and identifies Cal.com as the sender — and you register that URL in Cal.com's own webhook settings.
From then on Cal.com pushes each new booking to ZenMode, and ZenMode marks the matching lead as booked. It is one of the four scheduling tools ZenMode parses for real, next to Calendly, Acuity Scheduling and HubSpot Meetings.
What it triggers
| Direction | Event | What ZenMode reads | What it does |
|---|---|---|---|
| Cal.com to ZenMode | BOOKING_CREATED | name and email from attendees[0] in the payload | promotes the lead's status to meeting_booked and stamps meeting_booked_at |
Note the index. ZenMode reads the first attendee on the booking, so a booking whose first attendee is not the prospect — a round-robin host arrangement, or a guest added ahead of them — is matched on that first record, not on everyone in the list. Nothing else is taken from the payload: no event type, no start time, no duration, no booking questions.
The status change is promote-only. It moves a lead forward into meeting_booked and never moves
one backwards, so a prospect who has already got further along the pipeline is left alone, and a
booking that is later cancelled or rescheduled does not undo the promotion.
To decide which lead the booking belongs to, ZenMode first uses the signed token carried on the tracked booking link the prospect clicked, and falls back to matching the attendee's name. A booking with neither — a stranger who found your Cal.com link elsewhere and booked under a different name — has no lead to attach to.
How to set it up
- Open the Calendar section of ZenMode's settings and pick Cal.com. Copy the tokenized webhook URL it shows for that provider.
- Guard that URL. The token in it is what proves a delivery belongs to your account, so it should not be pasted anywhere public.
- In Cal.com, open your webhook settings, add a new webhook with that URL as its subscriber endpoint, and enable the Booking Created event.
- Test it by booking a slot on one of your own event types and checking that the lead in ZenMode
turns to
meeting_booked.
Because attribution leans on the tracked booking link ZenMode serves through its own redirect, the webhook and the link work as a pair: the link supplies the signed token, and the webhook supplies the booking.
When it runs
The moment Cal.com sends the event. There is no schedule, no manual sync and nothing to press.
The two properties that describe ZenMode's outbound webhooks — the 10-second delivery timeout,
and the X-ZenMode-Signature HMAC header on API deliveries — do not apply on this rail, because
here ZenMode is the receiver rather than the sender. Authentication is the token in the URL you
registered, and a delivery that names a provider ZenMode has no parser for is refused with an
error rather than silently ignored.
What it's useful for
Self-hosted and open-source Cal.com setups tend to sit outside the usual sales stack, which makes
the meeting the one moment that never gets recorded. This closes that: a prospect who accepts,
replies and books is marked meeting_booked in ZenMode with a time, without a rep touching a row.
That also keeps campaign reporting honest. Meetings attributed through the tracked link belong to the sequence that produced them, so the number you read is the number the outreach earned rather than a manual tally.
What it doesn't do (yet)
BOOKING_CREATEDis the only event parsed. Cancellations, reschedules, no-shows and payment events change nothing in ZenMode.- Only the first attendee is read, and only their name and email.
- It is not two-way. ZenMode never creates, edits or cancels bookings in Cal.com and has no view of your availability.
- An unmatched booking stays unattributed — there is no queue of unmatched bookings to reconcile by hand.
- Automatic booking detection exists for four providers only: Cal.com, Calendly, HubSpot Meetings and Acuity Scheduling. Microsoft Bookings, Google Calendar, Chili Piper and SavvyCal are link-only — paste your booking link and ZenMode will track the click, but no booking is ever detected for them.
FAQ
Which plans include the Cal.com webhook?
All plans. Booking detection has no tier gate, so every ZenMode plan can register the tokenized URL in Cal.com.
Does it need my LinkedIn password?
No. The exchange is Cal.com posting booking data to a ZenMode URL. No ZenMode integration asks for, stores or transmits LinkedIn credentials.
Is it two-way?
No. Cal.com writes to ZenMode and ZenMode writes nothing back — your event types, availability and bookings are untouched.