Automatically update ClickUp tasks when Google Calendar events are rescheduled using Make.com. Step-by-step mapping, idempotency, and error handling for reliable sync.
Introduction
Reschedules are the usual suspicious activity that breaks scheduling-to-workflow handoffs. Someone moves a Google Calendar meeting by 90 minutes and the ClickUp task still points to the old time, or worse, a second task is created. That creates confusion for delivery teams and forces manual cleanup.
In this post you will build a Make.com scenario that listens for Google Calendar event updates, finds the ClickUp task originally created for that event, updates the task dates and description, and notifies the right Slack channel. By the end you will have clear idempotency rules, exact field mappings, and the error handling patterns I use in production builds.
What you will know by the end: how to detect reschedules, how to match Calendar events to ClickUp tasks deterministically, how to update ClickUp date fields in epoch milliseconds, and how to avoid duplicates when webhooks retry.
What You'll Need
- A Make.com account with access to Google Calendar and ClickUp modules (paid plan recommended for reliable webhooks and retries).
- Access to the Google Calendar you will monitor, and permission to use the calendar API/webhook trigger in Make.com.
- A ClickUp workspace with a List where tasks are created and one custom text field reserved for the Calendar event id (for example
calendar_event_id). - A Slack workspace and channel for notifications (optional but recommended).
Permissions and plan notes: use a ClickUp API token or a Make.com ClickUp connection with write scope. Google Calendar triggers in Make.com can poll or use push; for reschedule handling you want the fastest available trigger and enough scenario runs to process updates promptly.
How It Works (The Logic)
Trigger: Google Calendar event update (reschedule).
Make.com receives the updated event payload, extracts the stable calendar event id and new start/end times, then looks up ClickUp tasks with custom field calendar_event_id equal to that id. If a task exists, Make.com updates its start_date/due_date (send epoch milliseconds), updates the description with the new time and the change reason, and posts a short Slack message. If no task exists, Make.com logs the event for manual review or creates a new task depending on your business rule.
In one sentence: Google Calendar event update → find ClickUp task by calendar_event_id → update dates and description → notify Slack and write an audit row.
Step-by-Step Setup
- Decide the matching key you will use
Use Google Calendar's event id (event.id) as the canonical matching key. In ClickUp create a custom text field calendar_event_id and ensure the initial Create Task flow writes that event id into the field. Do not rely on event title or participant email alone for matching; they change.
Why: event id is stable across reschedules and edits, and it is the right idempotency key for webhook-driven flows.
- Sample payloads and date handling
Test a calendar update in Make.com to capture a sample payload. Verify the payload contains id, start.dateTime (or start.date for all-day), and end.dateTime. Convert the ISO timestamp into epoch milliseconds before sending to ClickUp because ClickUp expects start_date and due_date as Unix epoch ms.
Make.com date function example: use formatDate or a built-in converter to output epoch milliseconds from the event start ISO.
- Build the Make.com scenario skeleton
Modules in order:
- Google Calendar: Watch Events (choose Updated events or use a webhook/Push if supported)
- Tools: Set variables / normalize payload (extract
event_id,start_time_iso,end_time_iso,summary,organizer.email) - ClickUp: Search Tasks (filter by custom field
calendar_event_id=event_id) - Router: Branch A if task found, Branch B if not 5A. ClickUp: Update Task (map dates, description, optionally assignee) 5B. Optional: Create Task or Write to Audit Log (if missing)
- Slack: Post message to team channel summarising the change
- Google Sheets or Make Data Store: Append audit row (event_id, old_time, new_time, task_id, run_status)
- Exact ClickUp field mapping (what to update)
When you update the ClickUp task, map these fields precisely:
- start_date: epoch milliseconds for the new start (if you use ClickUp start_date)
- due_date: epoch milliseconds for the new end (or start + duration if you prefer)
- due_date_time or due_date flags as required by your ClickUp schema
- description: append a small change log line such as "Calendar rescheduled: old 2026-07-28T10:00Z → new 2026-07-28T11:30Z by organizer@example.com"
- custom field
calendar_event_id: keep the original value to preserve the lookup
Gotcha: ClickUp often expects millisecond integers. If you send an ISO string the API can silently ignore or fail the field. Convert to epoch ms in Make.com before mapping.
- Deduplication and idempotency rules
Before updating, ensure you are not reprocessing the same update repeatedly. Implement these checks:
- Check your audit store (Google Sheets or Make Data Store) for a recent run for the same
event_idandsequence(if you choose to track event update sequence or a hash of start/end). If you find a successful run with identical new start/end times, stop the scenario. - Only write the audit row after ClickUp update and Slack succeed, so retries do actual retries rather than marking the event processed prematurely.
Why: Google Calendar webhooks and Make's trigger retries can deliver the same update multiple times. Idempotency prevents duplicate updates and duplicate Slack noise.
- What to do when no ClickUp task is found
Decide one of two policies:
- Create a new ClickUp task: good if some events originate outside your task-creation flow and you always want a task.
- Audit-only: write a row to a "missing mapping" sheet and notify ops to decide, which is safer when you expect most tasks to already exist.
I prefer audit-first during rollout: write a Google Sheets row and post to #ops with the event link and a link to create a task manually. After a week of clean data you can flip to auto-create if desired.
- Slack message content and noise control
Post a short message only when the start or end changed materially:
- "Calendar: Meeting moved — Project Kickoff Old: 2026-07-28 10:00 → New: 2026-07-28 11:30 ClickUp: Changed by: organizer@example.com"
Add a filter to only notify for changes larger than a threshold (for example more than 5 minutes) if you expect frequent micro-edits.
- Error handling and retries
Use Make.com's scenario error route:
- For transient ClickUp or Google Calendar 5xx responses, let Make.com retry with exponential backoff.
- For 4xx errors (bad token, permission), write the failure to the audit sheet and post to
#opsimmediately. - If the ClickUp update succeeds but Slack fails, still mark the audit row as succeeded but queue a small retry for Slack so the main system stays correct.
- Test cases to run before go-live
- Simple reschedule: update the event start time and confirm ClickUp task dates update and Slack notifies once.
- Repeated identical update (simulate webhook retry): confirm the scenario does not create duplicate updates or duplicate Slack posts.
- Event renamed but not rescheduled: confirm your filter prevents an unnecessary date update but optionally logs the title change into ClickUp.
- Event deleted/cancelled: decide whether to set ClickUp status to Cancelled or add a comment.
Real-World Business Scenario
A consultancy had recurring kickoff meetings created by sales. When prospects rescheduled, delivery missed the change because the ClickUp tasks were stale. We built the reschedule sync: every Calendar update finds the original ClickUp task via calendar_event_id, updates dates in epoch ms, appends a short audit line to the description, and posts one Slack message to the delivery channel. After two weeks the team stopped missing moved meetings and had a small audit sheet for the odd unmatched events.
Common Variations
- Use a two-way sync: after ClickUp date changes, also update the Google Calendar event. This needs stronger ownership rules to avoid loops and a change source flag.
- Reschedule thresholding: only update ClickUp when the delta is greater than X minutes to reduce noise from tiny edits.
- Reschedule digest: batch multiple reschedules in a 15-minute window and send a single Slack digest instead of multiple messages.
Putting it into operational practice
You built a reliable pattern that treats Google Calendar as the schedule of record and ClickUp as work items that follow calendar changes. The two keys to reliability are a deterministic match key (calendar_event_id) and correct date formats (epoch milliseconds) when writing to ClickUp.
If you want this implemented and hardened across multiple calendars or ClickUp Lists, Olmec Dynamics builds and operates these exact automations for clients. For a related build that creates ClickUp tasks from calendar events, see our guide on automating ClickUp task creation from Google Calendar: https://olmecdynamics.com/news/google-calendar-to-clickup-automate. If you use Calendly in front of calendar events, our Calendly to ClickUp walkthrough is useful as well: https://olmecdynamics.com/news/calendly-to-clickup-task-slack-make.
Olmec Dynamics can map your exact custom field ids, set up safe idempotency stores, and document runbooks so your team can trust reschedule syncs in production.