How to sync two Google Calendars (sharing is not syncing)
June 22, 2026 · 6 min read
You have two Google accounts — work and personal, two jobs, your company and a client’s Workspace — and you want each calendar to know about the other. Google appears to have a built-in answer: sharing. It’s the first thing everyone tries, and it doesn’t do what you think it does.
Sharing shows you an overlay. It doesn’t block your time.
When you share calendar B into account A, you get B’s events drawn on A’s screen — for you. That’s the whole feature. Crucially:
- Availability tools can’t see it. When a colleague uses “Find a time,” or a client’s Outlook uses the Scheduling Assistant, or your Calendly checks for conflicts, they query account A’s own calendar. Your shared overlay isn’t part of it. The 2pm slot that’s blocked on calendar B shows as free — so people book it.
- It often doesn’t cross organizations. Workspace admins routinely restrict external sharing to “free/busy only” or block it entirely. The “your administrator does not allow this” wall is where most cross-org sharing attempts end.
- Notifications stay home. Reminders for calendar B’s events fire in account B, not where you’re looking.
Sharing is a viewing convenience. Syncing — actually creating events in calendar A that mirror calendar B — is what blocks your time. If you’ve ever been double-booked while using sharing correctly, this distinction is why.
Option 1: ICS subscription (free, slow, read-only)
Each Google calendar has a private ICS address (Settings → Integrate calendar). Subscribe to it from the other account and events appear — eventually. Google refreshes external feeds on its own schedule, typically every 12–24 hours, with no manual refresh. Fine for a low-stakes glance at a calendar that rarely changes; useless for same-day scheduling. Still read-only, and still invisible to most availability checkers since subscribed calendars typically don’t count toward free/busy either.
Option 2: Google Apps Script (free, DIY, fragile)
If you’re comfortable with code, a Google Apps Script can copy events from one account’s calendar into another’s on a time-driven trigger. This creates real events, so your availability is actually blocked — a genuine step up. The honest costs: triggers run at intervals (minutes at best, not real-time), the script must handle updates and deletions or you accumulate orphaned copies, recurring-event exceptions are easy to get wrong, and Google imposes daily quotas. You become the maintainer of a small sync engine. Plenty of people run this happily for simple two-calendar setups; it scales badly past that.
Option 3: A sync service (real events, real time)
A dedicated sync service connects both accounts via OAuth and mirrors events as native entries — created, updated, and deleted in seconds via push notifications rather than polling. Because the copies are real events, every availability tool sees them: Find a time, Scheduling Assistant, booking links, all of it. Good services also let you control what crosses the boundary — full details, or just a “Busy” placeholder so a work admin never sees the contents of your personal life (more on that in our guide to syncing work and personal calendars privately).
Which one should you use?
If you just want to see another calendar and nothing depends on it: sharing or ICS, free, done. If you’re technical, have exactly two calendars, and enjoy maintenance: Apps Script. If other people book your time — clients, colleagues, a booking page — copies need to be real, instant, and reliable, because the cost of one missed mirror is a double-booking you find out about in the meeting itself.
That last case is what twocal does: real-time sync between Google and Microsoft calendars, with privacy controls per pair and a public reliability dashboard. $19/month flat for up to 15 calendars, 14 days free.
Tired of sync that drops events?
twocal does one thing — keeps your calendars in sync, reliably. 14 days free, no credit card.