Why does Apple Calendar sync to Google Calendar in only one direction?
Adding Google to Apple Calendar creates a real account connection, while getting Apple's own events into Google is a one-way subscription, and those are two different mechanisms rather than two settings on the same feature. Apple's apps let you log into Google as an account type, the same way you'd log into iCloud, so Google's calendars appear alongside your own and pick up changes on Apple's refresh schedule. Apple does not publish a matching account type inside Google Calendar, so there is nothing to log into from that side. The only route back is a subscribed link, which Google reads on its own timetable rather than writing your Apple events in as real entries, unless a separate tool is doing the writing for you.
The tell is which direction is actually failing. If Google's events already show up inside Apple Calendar but nothing you create in Apple ever reaches Google, the account connection is fine and the return trip was simply never built, because Apple never offers one by default. If neither side shows anything, the problem is the account connection itself.
So a genuine two-way setup, where an event made in either app lands in the other, is really two separate one-way arrangements, one in each direction. What fills that second, missing direction is covered next.
How do I get Google Calendar events into Apple Calendar?
On a Mac, open Calendar, go to Calendar > Preferences > Accounts, click Add, choose Google, click Continue, and follow the on-screen steps to sign in. This is the account-connection route described above, so Google's calendars appear alongside your own inside Apple Calendar. Once the account is added, the Accounts tab has a Refresh Calendars menu that sets how often Apple Calendar checks Google for changes; Apple documents the menu but does not publish what its interval choices mean in minutes, so treat it as adjustable rather than a fixed number.
On iPhone or iPad, the path is Settings > Calendar > Accounts > Add Account > Google, then sign in. On that account screen, turn off the other Google services if you only want the calendar to sync. On an older OS still using 2-Step Verification, Google's sign-in asks for an app password instead of your regular account password.
Before you connect, Google's own help page for this setup lists which Google Calendar features do not carry over into Apple Calendar, worth checking against your setup: https://support.google.com/calendar/answer/99358.
How do I get Apple Calendar events into Google Calendar?
The return trip is a public share link: publish a link from the Apple calendar in iCloud, then add that link to Google Calendar as a subscribed URL. At iCloud.com/calendar, hover over the calendar in the sidebar, click its Calendar Information button, and turn on Public Calendar; a Copy link option appears next to the generated URL, and that's what you paste into Google. This only works for a calendar that lives in iCloud, since the share link is an iCloud feature — a calendar kept only on one device, never synced to iCloud, has no link to generate. In Google Calendar, click the plus icon next to Other calendars in the left sidebar, choose Add other calendars, then From URL, paste the copied link, and click Add calendar.
That subscription is a different mechanism from the account connection covered above: instead of logging into an account, Google periodically re-reads the published feed at that URL rather than writing real events into your Google calendar, the way the Google-into-Apple direction does.
Three limits follow. The copy in Google is read-only, so you cannot edit those events from the Google side. Nothing you change in Google travels back to Apple Calendar, because the link only flows outward from iCloud. And Google refreshes the subscription on its own schedule — Google does not publish an interval for how often it re-checks, so treat any number from a forum thread as unverified rather than something to plan around.
Why isn't my Apple Calendar syncing with Google Calendar?
Missing events after you sync Apple Calendar with Google Calendar usually trace to one of a handful of causes, each with its own tell.
On iPhone or iPad, check Settings > Calendar > Accounts: if the Google account's Calendars toggle is off, or the account shows a re-authentication prompt instead of your calendar list, sign-in was lost, often after a password change. Next, check where new events are actually saved. Apple Calendar has its own default-calendar setting, and an event saved to a personal Apple calendar instead of the one connected to Google never crosses over, even though the account connection itself is fine (see the account-connection setup above). If sign-in itself fails, an Apple ID with two-factor on needs an app-specific password; the regular Apple ID password gets rejected.
For the Apple-into-Google direction, a lag is not a bug. Apple exposes an Auto-refresh menu for subscribed calendars, and Google re-reads the published link on its own schedule; neither publishes an interval (see the subscription setup above). And an edit made in Google that reverts on the next refresh just reflects that same read-only subscription.
What are the options for real two-way sync between Apple and Google Calendar?
Four real options exist for how to sync Apple Calendar to Google Calendar with real two-way sync, and only one runs unattended while writing real events in both directions: manual double entry, a share-link subscription, a desktop syncing program, or a hosted sync service.
Manual double entry means creating each event twice, by hand, in both apps — it works but does not scale and is not sync at all.
A share-link subscription, the route covered above for Apple-to-Google, is a read-only feed that Google re-reads on its own schedule; no configuration of it writes events into either calendar's real event list.
Desktop syncing programs run as software on a machine you own. Outlook Google Calendar Sync (OGCS) is the well-known one, and its own FAQ concedes the PC has to be powered on for it to sync. Its minimum automatic interval is 15 minutes, and it bridges Outlook and Google only — no Apple pairing appears, so it does not serve an Apple-Google setup at all.
Hosted sync services run on someone else's servers, so they keep working with every device of yours shut, asleep, or dead. That's the category to pick from: Keeper.sh runs server-side and unattended, nothing installed, no machine of yours has to stay awake, and each direction is its own connection, so full detail can travel one way and a placeholder the other.
The honest limit: because Apple publishes no way for a calendar tool to be told an event changed, Keeper.sh checks iCloud on a timer rather than being notified — within a minute on Pro, every 30 minutes on Free — so this is the pairing where its lead is smallest, though the Pro timer is still well inside OGCS's 15-minute floor, and it runs whether or not your machine is on.
How do I set up two-way Apple and Google sync with Keeper.sh?
Sign in with your Apple ID on the Connect Apple Calendar screen, generate an app-specific password at Apple's account page, label it so you remember what it's for, then paste that password into the field on the connect screen. Connect the Google account next, using the usual Google sign-in.
With both accounts linked, you have two calendars but zero connections: a connection moves events one direction only, so the pair needs two. From the dashboard, open the Apple account, select the calendar you want to send from, and tick the Google calendar under Send Events to Calendars. That builds the Apple-to-Google direction. Then open the Google account, select its calendar, and tick the Apple calendar there for the return trip. Skip the ICS upload screen — Keeper.sh doesn't support uploading an ICS file, only feed links and live connections.
On cadence: Keeper.sh reads every source once a minute regardless of plan. Writing the copy out is where plans diverge — every 30 minutes on Free, every minute on Pro. Google and Outlook also get realtime push on Pro, landing within seconds, but that doesn't extend to Apple, so the Apple half of this pair always runs on the polling timer.
Free covers 2 calendar accounts and 3 connections, so this Apple-Google pair fits inside it. Pro is $5 a month or $42 a year.
What should I expect once both directions are running?
Every event now exists twice, once in each calendar, and each copy is a real event rather than a subscription entry. From then on the two directions correct themselves: move the original and the copy moves, delete it and the copy is deleted, so the receiving calendar does not collect duplicates as changes pile up over time. By default the copy carries the source calendar's name as its title, with no description or location — turn on Sync Event Name for that calendar to carry the real title across instead. That's what makes it safe to sync an iCloud calendar with a Google calendar someone else can see: the times cross over, the contents do not. Cleanup only ever touches events Keeper.sh created, so an event you typed into either calendar yourself is never deleted. Untick the destination later and the copying stops — and the copies Keeper.sh already made in that calendar are removed on the next pass, which is scheduled straight away rather than left to the next tick.