How do you share a Google Calendar with someone?
In Google Calendar on the web, open My calendars in the left panel, hover the calendar you want, click More (the three dots) → Settings and sharing → Shared with → Add people and groups, type the person's email address, then click Send. That is the whole path.
A few details decide whether it works the first time. Sharing is per calendar, not per account: one share covers one calendar. If someone needs your work calendar, your personal calendar, and a project calendar, that is three separate shares, each done from that calendar's own settings screen.
The person you added receives an email invitation, and the calendar appears in their left panel under Other calendars, alongside anything else they subscribe to.
The same Add people and groups field accepts a Google Workspace group address, so entering [email protected] shares the calendar with every member of that group at once rather than adding people one by one.
Before you press Send, a permission dropdown sits beside the address you entered; it controls how much of each event the recipient can see. The next section covers what each level exposes.
What does each Google Calendar sharing permission actually show?
Google offers five levels, and only the first hides what your events actually are. The rest expose the full event record, differing only in what the other person can do to it.
| Permission level (as Google names it) | What the other person sees | What they can do |
|---|---|---|
| See only free/busy (hide details) | Blocks of busy time, nothing else | Nothing |
| See all event details | Title, location, description, guests | Nothing |
| Make changes (see private events as free/busy) | Full details; private events appear as busy | Create, edit, delete events |
| Make changes and see all event details | Full details, private events included | Create, edit, delete events |
| Make changes and manage sharing | Full details, private events included | The above, plus adding and removing people |
The dividing line sits after the first row: free/busy shows a block of time with no title, no location and no description. Every other level hands over the whole event. Pick free/busy unless the other person needs to act on the calendar; then choose a Make changes level.
There is nothing between the two. You cannot show titles while hiding locations, or expose some events and not others. That gap is the real constraint in how to share a Google Calendar; later sections cover the in-between case and audiences that need different amounts of detail.
How do you share a Google Calendar publicly or as a link?
Publishing to anyone starts on the same Settings and sharing screen: scroll to Access permissions for events, tick Make available to public, then choose See only free/busy (hide details) or See all event details. Those two are the same coarse pair from the permission table above, offered again — not a third, gentler option for strangers.
A subscribable address lives elsewhere. Open Settings → under Settings for my calendars click the calendar → Integrate calendar, and copy the Secret address in iCal format.
The two are different in kind. A named share is an account permission: it is attached to a Google account, and it travels with that account. A secret address is a URL. Anyone holding the string can read the calendar — forwarded in an email thread, pasted into a shared document, or sitting in a browser history — whether or not you meant them to. Nothing about the address asks who is fetching it.
Whoever you hand it to adds it in the left panel: next to Other calendars, click Add other calendars → From URL, paste the address, then Add calendar. It then sits alongside their other subscriptions.
How long does a shared Google Calendar take to update?
A named share updates immediately: the person you added reads your calendar through Google using their own account, so an edit you make is there the next time their app talks to Google. Nothing is being copied or polled.
A subscribed address behaves differently. A public or secret ICS link is a subscription, and the app holding it decides when to re-read. Microsoft documents a figure for its own side: in Outlook.com and Outlook on the web, updates to a subscribed calendar "should happen approximately every 6 hours," and "this update can take more than 24 hours." Google does not publish a refresh interval for calendars added from a URL. In both cases the publisher has no lever — you cannot make the recipient's app ask sooner.
Keeper.sh sits on both sides of that line. A Keeper.sh iCal feed is rebuilt every time it is read, so it never serves a stale cache, but it is still a subscription and inherits the same recipient-side delay. A Keeper.sh connection instead writes real events into the destination calendar: on Pro with a Google or Outlook source those land within seconds, and on Free within 30 minutes.
What if free/busy hides too much but full details show too much?
Free/busy is genuinely enough when the only question is when you are open. For booking with a stranger, a vendor, or anyone who needs a slot and nothing more, it is the right pick and it gives nothing away.
Where it runs out is the count: two states, applied per calendar per person. There is no way to reveal some fields and not others, no way to rename what shows in place of a title, and no way to drop a category of event from the share while keeping the rest.
A Keeper.sh iCal feed separates those controls. Under Feed Settings, Include Event Name, Include Event Description and Include Event Location toggle independently, so a recipient can get titles without descriptions, or locations without either. Event Name is a template that accepts {{event_name}} and {{calendar_name}}. Defaults are all off, with every event rendering as Busy.
Event Filters leaves whole categories out: Exclude All Day Events, Exclude Focus Time, Exclude Out of Office. Working-location events are always dropped from feeds regardless of any setting.
Rida F'kih, who maintains Keeper.sh, describes his own use: "I share my calendar with my girlfriend, privatized, with filters applied by using Keeper.sh — I added the accounts, added an ics link in the dashboard, then gave it to her."
These settings are Pro, at $5 per month or $42 per year. Free plans include one iCal feed, and self-hosting gives Pro behaviour.
How do you share one calendar with different groups without giving everyone the same view?
In Google Calendar you separate audiences by separating calendars: each share is one calendar, to one person or group, at one permission level. A partner who needs your work calendar and your personal calendar gets two entries in their left panel, from two shares. If your team should see titles while a public link shows only busy blocks, that is two calendars, each maintained separately, with every event filed into whichever one matches who is allowed to see it.
Merging them by import does not solve it. Google's own instructions warn: "Imported events don't stay in sync between your 2 accounts. If you want your calendars to sync, share your calendar with the other account."
A Keeper.sh feed works at a different granularity. One link can carry several calendars at once, and you can create separate named feeds, each holding its own calendar selection and its own copy of the disclosure toggles from the previous section. Your partner gets a link carrying work and personal with names on; a public link carries the same calendars rendering as Busy.
Choosing which calendars a feed carries is not plan-gated, so a Free account can change the selection on its feed whenever it likes. Extra feeds are Pro; Free plans include one. One gotcha worth knowing: calendars you import later join the default feed automatically.
How do you stop sharing a Google Calendar?
Removing a named person takes the same screen the share was made on: Settings and sharing → Shared with, then remove the person from the list. Their access ends immediately. To pull a public calendar back, untick Make available to public under Access permissions for events on that same screen.
A leaked secret address is a different problem, because the string is already out of your hands. Google documents a reset for exactly that case: "If you accidentally shared your calendar's Secret Address, click Reset to create a new Secret Address."
Keeper.sh is worse here, and that is worth stating plainly. There is no feed token rotation, and the default feed cannot be deleted. A Free account has one feed and it is the default, so if that link spreads the only levers are emptying its calendar selection, which makes the link serve an empty calendar, or upgrading to Pro to create a narrower feed. A non-default feed can be deleted, and every subscriber stops receiving events.
Connections behave differently on removal: events already copied into a destination calendar stay there. Clear them out yourself if you do not want them.