Olmec Dynamics
H
·8 min read

How to Automatically Create ClickUp Tasks from Calendly Webhooks Using Make.com

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:

  1. Create a new Scenario.
  2. Add Webhooks trigger for receiving an incoming webhook.
  3. Configure it to accept JSON.
  4. 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_name
  • invitee_email
  • booking_start
  • booking_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_at
  • clickup_task_id
  • event_payload_hash (optional)

In the scenario, add:

  1. Lookup by processing_key
  2. 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

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_created and schedule_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_key
    • processed_at
    • clickup_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_type
    • event_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:

  1. schedule_created webhook, confirm one ClickUp task created
  2. send the same webhook again manually, confirm no duplicate
  3. schedule_rescheduled for the same booking, confirm same task updates
  4. 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

  1. Assign tasks to different ClickUp assignees
  • Use Calendly meeting type or question answers to select the correct assignee and set ClickUp custom fields accordingly.
  1. 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.
  1. 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).