I recently (finally) started using online appointment scheduling software.
There are many players in this space, but Calendly is the most popular and featureful. It’s awesome—but in order to use it, you have to give it direct access to whichever calendars you want it to check for conflicts.
That means access to all sensitive details like online meeting URLs, attendee information, etc.—and it gives me the creeps. This isn’t unique to Calendly as most booking software works exactly this way. Additionally, Calendly’s free tier is limited in that:
- You can only connect a single calendar. Connect your work calendar, or home calendar, but not both.
- You can only have one active “event type”—i.e., a duration that a guest can book with you. For example, a guest could choose to book either 30 min, or 60 min, but not both.
Their cheapest paid plan is $10/mo and relieves those limitations, but I’m still stuck with the core security concern of not wanting to grant Calendly direct access to sensitive details on my calendars. So, I hacked together a scheduler that’s:
- Zero-knowledge: booking software can’t see sensitive details of events on your connected calendars.
- Minimally permissive: doesn’t require your IT team at work to grant permission for booking software to access your work calendar.
- Fast: new bookings immediately show up as time blocks on your work calendar, etc.
- Free: it’s free.
In total, the setup process probably takes ~30 min. You might not implement this the same way I did (or perhaps even at all), but hopefully this guide will inspire you to be a bit more creative when it comes to securing your sensitive calendar data.
How it works
- Home and work calendars share their availability (“busy/free”) status with the central scheduler. The scheduler, in turn, exposes that availability to the booking software so it can check those calendars for scheduling conflicts.
- Someone books an appointment in the booking software, which adds an event to the scheduler calendar.
- The new booking on the scheduler calendar immediately triggers an automated synchronization script.
- The automation adds you as an attendee on the home calendar.
- The automation creates a time block on the work calendar.
Booking view
Here’s what a guest sees when booking an appointment with you:
Scheduler view
After the appointment is booked, here’s what you see in the scheduler:
-
Scheduler
is the calendar that the booking software uses to create new bookings. -
Blocker
is a calendar that simply mirrors the Scheduler. -
Work
andHome
calendars represent “busy/free” availability windows that the booking software checks for scheduling conflicts.
Blocker view
On the scheduler above, there’s a booking titled “Call with doctor” from 2:15–2:45 PM on Wed 23 Nov. Here’s what that booking looks like when mirrored as a time block on your work calendar. Note that the actual title of the booking is redacted, along with any event details—it simply serves as a time block so your coworkers don’t schedule meetings with you during your booked appointments.
How to set it up
Scheduler: Google Calendar
Create a single-purpose Google account for your scheduler (I’m referring to this account as (scheduler account)@gmail.com
below), and create two calendars called
Scheduler
and
Blocker
.
Home: Google Calendar
In your home Google account (i.e., not the scheduler Google account you just created above), share your home calendar with the scheduler email address under Settings and sharing > Share with specific people or groups. Your scheduler Google account will get an email with subject “(home email) has shared a calendar with you”; click the “Add this calendar” link in that email. This will show up as the
Home
calendar in the scheduler view above.
Work: Outlook Calendar
In your work Outlook account, share your work calendar with the scheduler email address under Settings > View all Outlook settings > Calendar > Shared calendars > Share a calendar. Your scheduler Google account will get an email with subject “You’re invited to share this calendar”; click the “Add this calendar” button in that email (you can also try grabbing the URL from “Try adding an Internet calendar and providing this URL,” and add it in Google Calendar in Other calendars > Add > From URL). This will show up as the
Work
calendar in the scheduler view above.
Booking: Koalendar
Koalendar is a service comparable to Calendly, but it’s free tier doesn’t have limits on calendars and active event types. Calendly also doesn’t let you choose calendars in the “Other calendars” section of Google Calendar, which is necessary for this configuration (it seems they’ve fixed this). Create a new booking page, connect it to your scheduler Google account, and set it up as follows. Now, when guests book an appointment with you, that’ll show up on the
Scheduler
calendar.
Sync: Google Apps Script
Finally, to synchronize your bookings with your home and work calendars, visit https://script.google.com/home/start, create a new project, and follow these steps. I tested out several different services in an attempt to synchronize calendars, like IFTTT and Zapier—but they either lacked important features, or were too slow and expensive. Apps Script is flexible, fast, free, and fits the bill perfectly.
Editor
Paste the following code into the editor:
Triggers
Click Add Trigger, and make it look like this:
Project Settings
Under Script Properties, set the following properties:
Property | Value |
---|---|
schedulerCal |
Calendar ID of
Scheduler
. |
homeEmail |
Email that should be added as an attendee on
Scheduler
events. |
blockerCal |
Calendar ID of
Blocker
. |
workEmail |
Email that should be added as an attendee on
Blocker
events. |
Calendar IDs can be found by hovering over the calendar name, clicking the kebab menu icon, and looking for Calendar ID under Integrate calendar. Now, when guests book an appointment with you, this Apps Script will automatically:
- Add your
homeEmail
as an attendee on theScheduler
event. - Create a corresponding time block event on the
Blocker
calendar, and invite yourworkEmail
as an attendee.