1. Find your secret ICS address
- Google Calendar
- Outlook / Microsoft 365
- Open Google Calendar settings → pick your calendar under Settings for my calendars.
- Scroll to Integrate calendar.
- Copy Secret address in iCal format — it looks like
https://calendar.google.com/calendar/ical/you%40company.com/private-…/basic.ics.
No 'Secret address in iCal format' field? (Google Workspace)
No 'Secret address in iCal format' field? (Google Workspace)
On a Google Workspace domain the secret address is governed by an admin policy, and under
the Workspace default (“Only free/busy information”) Google hides the field entirely —
the section ends at the public address. A Workspace admin unlocks it domain-wide:
- admin.google.com → Apps → Google Workspace → Calendar
- Sharing settings → External sharing options for primary calendars
- Select “Share all information, but outsiders cannot change calendars” and save.
2. Connect it — and get an answer immediately
In the Terminal’s Meetings list, click Connect your calendar (under + Plan a meeting; the calendar icon in the header opens the same panel and stays there for managing the connection). Paste the address and hit Connect. Connecting runs a sync on the spot — within seconds the panel answers with the result, not silence:✓ Synced just now — imported 3— done; the meetings are under Upcoming.✓ Synced just now — no meetings with joinable links found— the feed is fine, but no upcoming event carries a Meet/Zoom/Teams link (see what imports).⚠ Last sync failed: …— the actual reason, named (see the error reference below).
Connect
Sync right now → the fresh result
Read the last sync status
Reading the sync status
Every failure names its fix — these are the messages the panel (and the API stamp’slast_error)
can show:
| Message | What it means | Fix |
|---|---|---|
the URL answered HTTP 401 / HTTP 404 | You pasted the public iCal address of a private calendar. | Use the secret address (…/private-…/basic.ics). |
the URL returns a web page, not a calendar feed | An embed/share page URL, not a feed. (Google’s embed page is also rejected at save.) | Copy the address from Integrate calendar, not the browser’s address bar. |
the URL redirects — paste the final feed URL | The address bounces through a redirect; the guarded fetch doesn’t follow them. | Paste the URL the redirect lands on. |
the URL doesn't return an ICS calendar (no BEGIN:VCALENDAR) | The server answered, but not with calendar data. | Check you copied the full .ics address. |
the feed is too large (over 2 MB) | Unusually huge feed. | Sync a specific calendar rather than an aggregate. |
couldn't reach the URL (unreachable, timed out, or a blocked/internal address) | Network failure, or the address points somewhere the server-side guard refuses (internal hosts). | Verify the URL opens from a browser; use the calendar provider’s public host. |
What imports (and what doesn’t)
- Only events with a recognizable meeting link — Meet, Zoom, or Teams, found in the event’s conferencing field, location, or description. Events without one (lunches, focus blocks) are ignored.
- One meeting per event — the next occurrence only. A recurring series tracks its next upcoming occurrence; the one after imports once the current completes.
- Moves and cancellations follow the feed. A rescheduled event moves its meeting; a cancelled or deleted event removes it — unless the bot already joined, in which case sync never touches it.
- Your manual plans are respected. If you already planned a meeting on the same link, the calendar event links up with it instead of creating a duplicate — your title and workspace binding win.
Auto-join for imported meetings
The calendar panel has one global switch — Auto-join imported meetings (default on). It sets the default for every meeting the sync creates; you can still flip auto-join per meeting in its prep view. Turn the global switch off if you want the calendar only to populate Upcoming while you send the bot by hand.Disconnect
Calendar icon → Disconnect (orPUT /user/calendar with {"ics_url": null}). Already-imported
meetings stay; they just stop following the feed.