How to Sync Google Calendar with iCloud

By Rida F'kih · August 11, 2026

Your Watch stays silent for the standup you are already late for, because the meeting lives in Google and your phone runs on iCloud.

The obvious fix is adding your work Google account to your iPhone. Plenty of people cannot: IT locks those accounts down, or the account drags mail and device management onto a personal phone with it.

Keeper.sh copies your Google meetings into an iCloud calendar instead. Every Apple device you own picks them up, and your employer never touches your phone.

What lands on your iPhone

Your 3pm in Google turns up in the Calendar app on your iPhone, your Watch and your Mac. It arrives in an iCloud calendar of your choosing, one you can hide on Saturday.

Each connection runs one direction, and this one is Google into iCloud. Keeper.sh never writes into your Google calendar here, so your colleagues see nothing change.

Want it both ways? Add the reverse connection and personal appointments start blocking time at work.

Make a home for the meetings first

In the Calendar app on your iPhone or Mac, create a new iCloud calendar and call it something like "Work".

It gets its own color, you can hide it on weekends, and deleting it later removes every copied meeting at once.

Generate an Apple app-specific password

Apple will not let an outside app write into your iCloud calendar with your normal Apple Account password. You issue a second password that reaches your calendar and nothing else, and cancel it whenever you like without changing the real one.

Keeper.sh shows you these steps on the connect screen, and Apple documents them too:

  1. Navigate to appleid.apple.com
  2. Sign in with your Apple ID
  3. Select "App-Specific Passwords"
  4. Click the "+" next to "Passwords"
  5. Label it, generate it, and copy the password — you will paste it into Keeper.sh in the next step

Two-factor authentication has to be on, or the App-Specific Passwords option never appears at all. Apple shows the generated password once, so copy it before you close the box.

Connect iCloud

iCloud goes in first, because it is where the meetings will land. Create a free account — two accounts and three connections, no charge — then open Import Calendars and choose Connect iCloud.

The screen headed Connect Apple Calendar asks for two things:

  • Apple ID — the email address you sign in to Apple with
  • App-Specific Password — the one you just generated, not your usual password

Press Connect. Keeper.sh brings in every calendar on the account, including the "Work" one you just made. Press Skip at setup, because you will build the connection from the Google side in a moment.

Invalid credentials almost always means the password field. Either your usual Apple password went in by mistake, or the generated one has since been canceled.

Connect Google Calendar

Back on Import Calendars, choose Connect Google Calendar. Keeper.sh lists what it is about to ask Google for:

  • See your email address
  • View a list of your calendars
  • View events, summaries and details
  • Add or remove calendar events

Press Connect and finish signing in with Google.

Point Google at your iCloud calendar

Setup now runs for your Google account.

Which calendars would you like to configure? Tick your main work calendar. Google's primary calendar arrives named after your email address.

Rename Your Calendars. Change it to something you will recognize, like "Work". Google keeps its own name for it, and by default this one becomes the title on the copies in iCloud.

Where should 'Work' send events? Tick the iCloud calendar you created earlier. That is the connection made.

The next question is the mirror image, asking which calendars should feed events into 'Work'. Leave it empty. Ticking anything there would start copying events back into your work calendar.

Press Next to finish. Keeper.sh reads your Google calendar within the minute.

On Pro the copy usually reaches iCloud about a minute after the change, two minutes at the outside. On free it is usually about fifteen minutes, thirty-one at the outside.

Three connections, and this uses one

Keeper.sh's free plan covers two connected accounts and three connections, and this whole setup fits inside it. Google is one account and iCloud is the other. Work into iCloud spends one connection, leaving two spare.

Connecting an account is what counts, not how many calendars sit inside it. A Google account with five work calendars in it is still one of your two. Each direction you actually sync spends one of the three connections.

Let the real titles through

Every Google calendar you connect starts private. What lands in iCloud is a start time, an end time, and a title borrowed from the calendar it came from — no description, no location. That default is right when events are heading somewhere other people can see.

On your own phone you want the opposite. A meeting on your Watch is no use if it only says "Work".

Three Pro switches under Sync Settings decide this. Sync Event Name brings the real meeting titles across, and Sync Event Location puts the address in the notification. Sync Event Description carries the agenda and the dial-in notes.

Turn them on and your Watch tells you it is the 3pm with Legal, at the address, before you have looked at your phone. Free accounts run on the private default and cannot change it.

Nine calendars is $25 per user a month at OneCal, billed annually (August 2026), and it meters you per calendar. Pro is $5 a month whether you connect three or thirty.

Get real meeting titles with Pro.

Keep focus time and out-of-office off your Watch

Google has a few event kinds that are not really meetings, and they clutter a phone if you let them through.

Exclude Focus Time Events and Exclude Out of Office Events live under Exclusions, one section below Sync Settings. Turn them on if you block focus time regularly, or every protected work block reappears on your personal devices. Exclude All Day Events handles company holidays the same way.

All three are Pro switches, so one visit to your settings keeps the whole category off your Watch. Working Location entries never cross over on any plan, because Google emits them constantly and nobody wants "Home" on their Watch.

Your colleagues see nothing change

Keeper.sh leaves the guest list behind, so nobody on the Google invite gets a second notification from a calendar they have never heard of. Video call links stay in Google as well, so you join the call from your work calendar.

Edit the copy in iCloud and Keeper.sh puts it back to match Google on the next pass. What your Watch shows is always what your colleagues actually booked.

How fast it moves, and how far ahead

Reads run every minute on every plan. The wait is on the write into iCloud: every minute on Pro, every thirty on free.

End to end that is usually about a minute on Pro against about fifteen on free, two and thirty-one minutes at the outside. That is the difference between your Watch buzzing before your afternoon gets rearranged and after.

Get the one-minute version.

The copy window runs from a month back to two years ahead, so next quarter's offsite is already on your phone and last spring's is not. Pro sets that window per calendar. Bring two years of history across when you are reconstructing where the year went, or set a tighter window, which clears the copies that fall outside it.

When your Watch goes quiet

Meetings stopped appearing and nothing looks broken. Changing your Apple Account password cancels every app-specific password you have ever created, including this one, without telling you. Generate a fresh password and reconnect iCloud.

The iCloud calendar will not accept events. A calendar shared with you by someone else, or one you subscribed to from a link, usually arrives read-only. Keeper.sh can copy events out of it but not into it, so pick a calendar you created yourself.

Your employer disconnects the Google account. Losing access stops the copying, and existing events stay behind in iCloud. Deleting that one iCloud calendar clears them.

A calendar pauses, then catches up. Google rate-limits hard, so Keeper.sh stays inside its 500-requests-a-minute ceiling rather than sending until Google refuses. When a request is rejected or times out anyway, that calendar waits longer before the next attempt.

The wait is recorded per calendar in the database rather than in memory, so a restart on our side does not reset it. Left alone, the calendar comes back.

Tested against ten real calendar feeds

Keeper.sh ships with 1,086 tests, including regression runs against ten real calendar feeds captured from Google, GOV.UK, Meetup and an Exchange server. Testing against what those calendars actually emit is the version of "it syncs reliably" you can check.

The code that reads Google and writes to iCloud is public under AGPL-3.0. The privacy behavior above is something you can verify rather than something you have to take on trust.

Would you rather run it yourself?

Keeper.sh is open source, and the keeper-standalone image brings up the database, the workers and the web app in one container. Every Pro feature is included when you run it, the one-minute writes and the real meeting titles among them.

You then buy the server and the domain, apply the updates, keep the backups and get paged when it stops. Google sign-in also needs your own Google app registered before it will work at all.

The hosted version is the same code with all of that handled for you.

Get work meetings buzzing on your Watch tonight

Connect Google and iCloud, tick one calendar, and you are done. The meetings come across on their own from there.

Get work meetings on your Watch — free

Can Keeper.sh use cookies for analytics?