How to stop double-booking across calendars

By Rida F'kih · December 28, 2025 · Updated October 29, 2026

Double-booking across calendars happens because Google Calendar, Outlook and iCloud each check for conflicts only against their own events, so a meeting on one calendar leaves the same hour looking free on the others. To stop it, every calendar has to show the busy time from all the rest. Keeper.sh, a calendar sync service, copies each calendar's events onto the others as busy blocks and keeps the copies current; blocking time by hand and subscribing calendars to each other are the manual alternatives.

Why calendars on different accounts double-book

Each calendar account keeps its own list of events and knows nothing about your other accounts. A work calendar on Google Calendar, a work calendar on Outlook and a personal calendar on iCloud are three separate records of your week, and each one shows the hours booked on the other two as open.

That gap matters most when someone else books your time. A colleague who checks your work calendar, a client who picks a slot from a booking page, or an assistant who schedules from one account can only see the events stored there. A dentist appointment on iCloud does not stop a 2pm meeting landing on Google Calendar.

Booking tools have the same limit, because they check only the calendars connected to them. Calendly's free plan connects 1 calendar and its paid plans connect up to 6, according to Calendly's calendar connection help page (checked 29 October 2026). Any calendar left out is invisible to your booking link. The Calendly-specific fixes are covered in how to stop Calendly double-booking.

Manual blocks and calendar subscriptions, and their limits

Without a sync service, the two options are blocking time by hand and subscribing one calendar to another, and both leave gaps.

Blocking by hand means adding a placeholder event, such as "Busy", to every other calendar each time something is booked. It works for a handful of events a week. It breaks as soon as a meeting moves or is cancelled, because the placeholder stays where it was.

A subscription adds another calendar's published link to your calendar app. In Google Calendar that is Other calendars > From URL, which works only in a computer web browser, and Google publishes no refresh interval, per Google's subscription help page (checked 29 October 2026). In Outlook, Microsoft says a subscribed calendar refreshes about every 3 hours in Outlook.com and about every 6 hours in Outlook on the web, and either can take more than 24 hours, per Microsoft's import and subscribe page (checked 29 October 2026).

A subscription is also a separate, read-only calendar. Its events are not written into your main calendar, so anyone who sees only that main calendar still finds the hour open.

Block the same time on every calendar automatically

Keeper.sh copies each event from one calendar onto your other calendars as a busy block, and keeps those copies correct when the original moves, changes length or is deleted. Every calendar then shows the same busy time, whichever account a meeting was booked on.

Each copy is named after the calendar it came from, so a meeting on your work calendar shows on your personal calendar as a block labelled with the work calendar's name. On Pro, that name can be changed per calendar.

Each connection runs one way, from a source calendar to a destination calendar. For two-way sync, add the reverse connection as well. One calendar can send events to several others, and one calendar can receive events from several.

Setup is two steps: connect your accounts, then choose which calendar sends events to which. The full walkthrough for a work and personal pair is in sync work and personal calendars.

What gets copied and what stays private

Each copy is a busy block named after the source calendar. The title, description and location are hidden by default, Pro can turn them back on per calendar, and guest lists are never copied.

With no guest list on the copy, nobody is re-invited to a meeting that was copied onto another calendar.

On Pro, event filters can leave out events that should not block time elsewhere, such as all-day events; the calendar sync features page lists the rest.

Which calendars Keeper.sh connects

Keeper.sh connects Google Calendar, Outlook and Microsoft 365, iCloud, Fastmail and any calendar server that uses the CalDAV standard. It can also read any calendar shared as an ICS or iCal link.

Google Calendar and Outlook connect by signing in with the account. iCloud connects with an app-specific password, so Keeper.sh never holds your Apple Account password; Apple explains how to create one on using app-specific passwords (checked 29 October 2026). Fastmail connects with an app password, and other CalDAV servers with the server's address and your sign-in details.

Pasted ICS links are read-only. Keeper.sh can copy their events onto your other calendars as busy time, but it cannot write anything back to them. That covers calendars you cannot sign in to, such as a university timetable, a sports fixture list or a shared family feed.

How fast changes land and what it costs

On the Free plan, changes land every 30 minutes. On Pro, Google and Outlook changes land within seconds, and iCloud, Fastmail and CalDAV changes land every minute.

The Free plan is $0 with no card, and includes 2 calendar accounts, 3 connections, 1 shareable calendar link and 25 API calls a day. Two calendars synced both ways use two of the three connections, so a work and personal pair fits on Free.

Pro is $5 a month or $45 a year (pricing), with unlimited accounts and connections, event filters and per-calendar control of what each copy shows.

Free timing suits calendars that rarely change on short notice, such as a personal calendar beside a work one. Pro timing matters when other people book against your calendar during the day, because a gap of half an hour is enough for a second booking to land. For how Keeper.sh fits against other tools, compare calendar sync tools.

Keeping copies correct when events change

Keeper.sh tracks every copy it makes, so a moved event moves its copies and a deleted event removes them. It only ever removes copies it created, and it ignores its own copies when reading a calendar, which stops two calendars synced both ways from copying the same event back and forth. The detail is in what calendar sync is.

Who builds Keeper.sh

Keeper.sh is built and maintained by Rida F'kih, who wrote it to stop double-booking across his own four calendars on Google Calendar, Fastmail and iCloud. The about page has more on who runs it. Create a free account.

Common questions about double-booking across calendars

Why does my work calendar show me free when my personal calendar is booked?

Each calendar account checks conflicts only against its own events. A booking on a personal iCloud or Google calendar is invisible to a work Outlook or Google calendar until a copy of it is written there.

Can a booking page see all my calendars?

No. A booking page checks only the calendars connected to it. Calendly's free plan connects 1 calendar and its paid plans connect up to 6, so a calendar left out stays invisible to the booking link until its events are copied onto a calendar Calendly checks.

Does a subscribed calendar stop double-booking?

No. A subscription is a separate read-only calendar that refreshes on the receiving app's schedule, about every 3 hours in Outlook.com and about every 6 hours in Outlook on the web, and people who check only your main calendar do not see its events.

Will people on my work calendar see what my personal events are?

No, not by default. Each Keeper.sh copy is a busy block named after the source calendar, with the title, description and location hidden, and guest lists are never copied.

What happens to a copy when the original event moves or is cancelled?

Keeper.sh moves the copy with the original and removes it when the original is deleted. It only ever removes copies it created.

Can Keeper.sh use cookies for analytics?