Automate Calendly webhooks in Make.com to create ClickUp tasks, de-duplicate events, update task fields, and notify Slack with booking links.
Introduction
If your team is still handling Calendly bookings manually, the failure mode is predictable. Someone books, you miss it, you create the task late, or you create it twice after retries or reschedules. Then you end up fixing the queue in ClickUp while trying to remember which booking change triggered which task.
This guide shows you how to automate Calendly to ClickUp tasks using Make.com webhooks. The build is designed for real webhook behavior, including retries and updates, so your ClickUp list stays clean and you can trust the workflow.
By the end, you will know how to wire Calendly webhooks into Make.com, create or update ClickUp tasks deterministically, and send a Slack notification only when it matters.
If you want the mental model for how this fits into system design, see Cross-Platform Automation (XPA).
What You'll Need
- Calendly account
- Permission to configure webhooks for your workspace
- Make.com account
- A plan that supports webhooks and enough scenario operations for your booking volume
- ClickUp account
- Permission to create tasks in the target Space and List
- A custom field to store Calendly Event ID (highly recommended)
- Slack workspace
- Permission to post to the channel (or to a user) you want alerts in
- A timezone strategy
- Decide whether ClickUp due date/time uses booking start time in local timezone or normalized to UTC
How It Works (The Logic)
When Calendly sends a webhook into Make.com, Make extracts stable identifiers and computes a deterministic processing key from the event. Make then checks an idempotency log, and only if the event has not been processed does it create a ClickUp task. For reschedule or other update events, Make searches ClickUp by Calendly Event ID and updates the same task instead of creating a new one. Finally, Make posts a Slack message with the ClickUp task link, and logs the run so retries do not spam tasks.
In short: Calendly webhook trigger → dedupe via processing key → ClickUp create/update → Slack notify → idempotency log write-back.
Step-by-Step Setup
1) Add custom fields to ClickUp for stable dedupe
In your ClickUp Space and List where booking tasks live, add custom fields:
- Calendly Event ID (Text)
- Calendly Event Type (Text)
- Invitee Email (Text)
- Booking Start (Date or DateTime, whatever your process uses)
Task naming pattern that stays readable:
Booking: {invitee_name} ({invitee_email}) [{booking_start}]
Gotcha: do not rely only on task name to prevent duplicates. Reschedules and minor payload differences will eventually create multiple tasks if you do.
2) Decide which Calendly webhook events you will handle
Pick a small set first. Typical ones:
- schedule_created
- invitation_accepted
- schedule_canceled
- schedule_rescheduled
You can expand later, but start with one create event and one update event so you validate the idempotency behavior.
3) Create the Make.com webhook scenario entry point
In Make.com:
- Create a new Scenario.
- Add Webhooks trigger for receiving an incoming webhook.
- Configure it to accept JSON.
- Copy the webhook URL.
Paste that webhook URL into Calendly webhook configuration, scoped to the events you chose.
Gotcha: Calendly webhook payloads vary by event type. You will handle this downstream with safe mappings.
4) Normalize the payload and compute a processing key
Add a step that maps webhook JSON fields into scenario variables you will reuse.
You want at minimum:
event_type(Calendly event name)event_id(Calendly stable identifier from the payload, if present)invitee_nameinvitee_emailbooking_startbooking_end
Then compute:
processing_key = event_id + ':' + event_type
If your payload does not include a stable event_id for every event type, use a composite key:
processing_key = event_type + ':' + booking_start + ':' + invitee_email
5) Build the idempotency log in Make.com (store processed keys)
Create a small audit store for processed webhook keys.
Practical options:
- Make.com Data Store (best for staying inside Make)
- Google Sheets or Airtable log (best if your team already uses it)
Create a collection/table like:
processing_key(unique)processed_atclickup_task_idevent_payload_hash(optional)
In the scenario, add:
- Lookup by
processing_key - Router:
- If found: skip ClickUp create/update
- If not found: proceed
Gotcha: only write to the log after ClickUp succeeds, otherwise a transient ClickUp error blacklists the event.
6) Search ClickUp by Calendly Event ID before creating
Add a ClickUp lookup step:
- ClickUp > Search Tasks (or “Get tasks” equivalent)
- Search criteria: Custom field Calendly Event ID equals
event_id
Then route:
- If task exists: update that task
- If no task exists: create a new task
7) Create the ClickUp task with deterministic field mappings
For the create branch, add ClickUp > Create Task.
Map:
- Task name:
Booking: {{invitee_name}} ({{invitee_email}}) [{{booking_start}}] - Description: include key details and what triggered it, for example:
- Calendly event type
- Booking start/end
- The invitee email
- Custom fields:
- Calendly Event ID =
event_id - Calendly Event Type =
event_type - Invitee Email =
invitee_email - Booking Start =
booking_start
- Calendly Event ID =
8) Update the existing ClickUp task on reschedule/cancel
For the update branch, use ClickUp > Update Task.
Update:
- Booking Start custom field
- Booking details in description (append the new times)
Gotcha: decide your policy for canceled events.
- Common pattern: keep the task but set a “Status” custom field to Canceled.
- If you remove tasks, you break traceability when duplicates appear later.
9) Post Slack with controlled noise
Add Slack > Post a message after ClickUp create/update.
Message content that works in real teams:
- Title:
Calendly booking {{event_type}} - Lines: invitee name, invitee email, booking start/end
- Include the ClickUp task link
Noise control rule:
- Notify only on
schedule_createdandschedule_rescheduled. - Skip notifications for acceptance events if your team already gets them elsewhere.
If you want the same “don’t spam” logic applied to a digest flow, reuse the pattern from How to Automate an Airtable to Slack Digest Using Make.com.
10) Write back to the idempotency log
After ClickUp and Slack succeed:
- Insert a row into your processing log with:
processing_keyprocessed_atclickup_task_id
That is what turns a fragile automation into a reliable Cross-Platform Automation (XPA).
11) Add an error route that preserves safety
In Make.com, configure error handling:
- If ClickUp fails before the log write, do not mark the key as processed.
- Post an error Slack message to an ops channel with:
event_typeevent_id(or composite key components)- a short sanitized payload snippet
You get deterministic debugging without creating duplicate tasks.
12) Test like production, not like a demo
Test at minimum:
- schedule_created webhook, confirm one ClickUp task created
- send the same webhook again manually, confirm no duplicate
- schedule_rescheduled for the same booking, confirm same task updates
- cancel event, confirm your cancel policy behaves correctly
Real-World Business Scenario
A services business uses Calendly for discovery calls, and ClickUp is their delivery operations board. After a simple connectivity issue, they started seeing duplicate ClickUp tasks because Calendly retried webhooks.
We implemented this Make.com webhook-to-ClickUp automation with an idempotency log keyed by the Calendly event. Now each booking change maps to exactly one ClickUp task identified by Calendly Event ID, and Slack notifications include the ClickUp link for fast action. Their ops lead no longer audits duplicates after every network hiccup.
Common Variations
- Assign tasks to different ClickUp assignees
- Use Calendly meeting type or question answers to select the correct assignee and set ClickUp custom fields accordingly.
- Create subtasks automatically
- After creating the booking task, add subtasks like “Send onboarding email” and “Prepare kickoff agenda”. Use the same Calendly Event ID in each subtask description for traceability.
- Two-phase notifications
- Notify Slack immediately on schedule_created.
- Notify again only on schedule_rescheduled if start time changes materially.
The workflow you now have in place
You built a Cross-Platform Automation (XPA) that treats Calendly as the source of booking truth, Make.com as the orchestration layer, ClickUp as the task system, and Slack as the human alert surface.
The reliability comes from two practical safeguards: a deterministic idempotency processing key, and ClickUp task lookup by Calendly Event ID.
If you want this tuned to your exact ClickUp schema, custom fields, and Calendly event types, Olmec Dynamics builds these XPAs end to end. You can explore more at Olmec Dynamics, and revisit the XPA approach at Cross-Platform Automation (XPA).