Guides

Guide · n8n template · 5 min read

Reschedule Google Calendar appointments with n8n and Google Sheets

Rescheduling is where booking agents quietly break: the old slot never gets freed, or the new one is already taken. This sub-workflow does it in one safe step. It finds the existing booking by phone number, checks the new slot and only then moves the Google Calendar event.

Free template: Reschedule calendar appointments with Google Sheets and Google Calendar

By MD Faizan Uzzaman · Verified n8n Creator · Published 12 Oct 2026

How do you reschedule a Google Calendar event with n8n?

Find the booking (here by phone number in Google Sheets), check the new slot is free, then update the event's start and end time using its stored event_id.

  1. Another n8n workflow calls this one with the phone number, the current date and time, the new date and time and the new service type.
  2. It looks up the existing booking in Google Sheets by phone and current date/time.
  3. If it finds a match, it builds start and end timestamps for the new slot.
  4. It calls a Check Slot Availability sub-workflow to make sure the new slot is free.
  5. If it is, it updates the matching Google Calendar event with the new times, an updated summary and the phone number in the description.
  6. It returns Rescheduled=true with the formatted date and time, or one of four error codes.

What does it return when a reschedule fails?

One of four error codes, so your voice agent can say the right thing instead of a generic failure.

Error codeMeaning
appointment_not_foundNo booking matches that phone number and current time
new_slot_unavailableThe requested new slot is already taken
calendar_unavailableGoogle Calendar couldn't be updated
crm_unavailableThe bookings sheet couldn't be read or updated

What columns does the sheet need?

preferred_date, preferred_time, status, phone, event_id and name. The event_id is what links a sheet row to its Google Calendar event.

Input from the calling workflowFormat
phoneE.164, e.g. +14155550123
new_dateYYYY-MM-DD
new_timeHH:mm (24-hour)

How do you set it up?

You need Google Sheets OAuth, Google Calendar OAuth connected in n8n. Then:

  1. Import the template into n8n.
  2. Connect Google Sheets OAuth, replace YOUR_GOOGLE_SHEET_ID and make sure the required columns exist.
  3. Connect Google Calendar OAuth and select the calendar that stores appointments.
  4. Link a Check Slot Availability sub-workflow that accepts preferred_date and preferred_time and returns an available boolean.
  5. Make sure the calling workflow sends phone in E.164, new_date as YYYY-MM-DD and new_time as HH:mm.

What should you test before it goes live?

The edge cases, not just the happy path.

TestWhat should happen
Wrong phone numberappointment_not_found, nothing changed
New time already bookednew_slot_unavailable, original booking kept
Valid rescheduleCalendar event moved, Rescheduled=true returned
Appointments longer than 30 minutesChange the default duration first, or the end time will be wrong

How does it find the right appointment?

By the caller's phone number plus the current appointment date and time, matched against the bookings sheet.

What if the new time is taken?

It returns new_slot_unavailable and leaves the original appointment untouched.

How long are appointments?

30 minutes by default. Change it if your appointments run longer.

Related

About the author

I'm Faizan, a Verified n8n Creator. I build n8n automations and the booking back-ends behind voice agents. This template is free on n8n.io.

Want this set up for your business or your clients?

I build and test these workflows for small businesses and voice AI agencies, paid through Upwork escrow.