Skip to content

Google Calendar

IntegrationsMay 24, 2026·8 min read·Updated May 26, 2026

The Google Calendar integration auto-creates a calendar event for every booking customers make on your booking site. Configure once with a Google Cloud Service Account, share the calendar with the service account, and bookings flow into your team's shared calendar with customizable event details.

Getting started

Navigate to Settings > Company groups, open the group, switch to the Integrations tab, and click Configure integration on the Google Calendar card.

How it works

Google's API requires a service account to talk to a calendar on your behalf. The setup has six phases: create a service account in Google Cloud, enable the Calendar API, generate a JSON key for the service account, share your calendar with the service account email, paste the credentials into the integration, and configure the event title and description templates.

Once active, every new booking on your booking site creates a calendar event automatically, and edits to bookings update the corresponding event.

Step-by-step guide

Phase 1: Create a service account

StepAction
1Open the Google Cloud Console
2Pick or create the project you want to use
3Navigate to IAM & Admin > Service Accounts
4Click Create Service Account
5Name the account (e.g., "otc-calendar-sync")
6Assign the Owner role
7Finish the creation flow

Phase 2: Enable the Calendar API

StepAction
1In Google Cloud Console, go to APIs & Services > Library
2Search for Google Calendar API
3Click Enable

Phase 3: Generate a key file

StepAction
1Back in Service Accounts, click the service account you created
2Open the Keys tab
3Click Add Key > Create New Key
4Pick JSON format
5Save the downloaded file. Keep it secure — anyone with this file has full access

Phase 4: Share your calendar with the service account

StepAction
1Open Google Calendar
2In My calendars on the left, hover over the target calendar and click the three-dot menu
3Pick Settings and sharing
4Scroll to Share with specific people or groups
5Click Add people and groups
6Paste the service account email (looks like name@project-id.iam.gserviceaccount.com)
7Set the permission to Make changes to events
8Click Send

Phase 5: Paste credentials into the integration

Open the downloaded JSON file in a text editor.

FieldWhere to find it
Service account email (client email)The client_email value in the JSON. Paste into the Service account email field
Calendar IDIn Google Calendar settings, scroll to Integrate calendar and copy the Calendar ID (looks like name@group.calendar.google.com or your own email)
Private keyThe private_key value in the JSON. Includes -----BEGIN PRIVATE KEY----- and -----END PRIVATE KEY----- markers and several lines of base64. Paste the entire value into the 7-row textarea

Click Save at the bottom of the integration view, then toggle Active on.

Phase 6: Configure event title and description

FieldWhat it controls
Calendar event summaryThe event title in Google Calendar. Supports dynamic variables
Calendar event descriptionThe event body in Google Calendar. Supports dynamic variables. 3-row textarea

The supported dynamic variables get interpolated per-booking. Click the down-arrow icon under Supported dynamic variables to expand the list with copy buttons next to each variable.

VariableWhat it inserts
[Booking Id]The booking's internal id
[Game Name]The event the customer booked
[Group Size]Participant count
[Customer First Name]First name on the order
[Customer Last Name]Last name on the order
[Customer Phone]Phone number on the order
[Customer Email]Email on the order
[Transaction Id]Order number
[Transaction Link]Direct link back to the transaction in the console
[Amount Paid]Amount collected so far
[Amount Due]Outstanding balance

A typical event summary template might be [Game Name] – [Customer First Name] [Customer Last Name] (x[Group Size]). A typical description might combine [Customer Phone], [Customer Email], [Amount Paid], [Amount Due], and [Transaction Link].

Update or rotate credentials

Once credentials are saved, the configuration view shows the Service account email and Calendar ID as read-only values. To replace them (e.g., after rotating the key), click Change credentials at the top right of the credential block. The form re-opens with all three fields editable.

Reference

Configuration view layout

SectionContent
Setup guide6-phase walkthrough with links to Google Cloud Console and Google Calendar
Supported dynamic variablesCollapsible list (toggled by an arrow icon) with copy button per variable
Credential blockService account email, Calendar ID, Private key. Switches between read-only display and edit form via Change credentials
Event templatesCalendar event summary, Calendar event description
Active toggleEnable or disable calendar sync
Cancel / SaveFooter buttons

Credential fields

FieldTypeSource
Service account email (client email)Text inputclient_email in the JSON key file
Calendar IDText inputGoogle Calendar settings → Integrate calendar
Private keyTextarea (7 rows)private_key in the JSON key file (entire value including BEGIN/END markers)

Event template fields

FieldTypeNotes
Calendar event summaryText inputEvent title shown in Google Calendar
Calendar event descriptionTextarea (3 rows)Event body shown when the event is opened

Dynamic variables

VariableDescription
[Booking Id]Booking reference number
[Game Name]Name of the booked event
[Group Size]Number of participants
[Customer First Name]Customer's first name
[Customer Last Name]Customer's last name
[Customer Phone]Customer's phone number
[Customer Email]Customer's email address
[Transaction Id]Order number
[Transaction Link]Link to the transaction in the console
[Amount Paid]Amount collected
[Amount Due]Remaining balance

Save / cancel

ButtonEffect
CancelDiscards changes and returns to the integration list
SaveCommits credentials, templates, and active toggle
Change credentialsRe-opens the credential form when credentials are already saved

Good to know

  • Calendar events are created automatically for new bookings only. Bookings made before the integration was activated are not retroactively synced. Manually re-save them to trigger a sync if you need backfill.
  • The service account needs "Make changes to events" permission, not just view access. Without it, the calendar API rejects writes and events never appear.
  • The private key is multi-line. Copy the entire private_key value from the JSON, including the -----BEGIN PRIVATE KEY----- and -----END PRIVATE KEY----- markers and every line in between. Missing one line breaks the signature.
  • One calendar per group. If you have multiple groups, configure each with its own service account (or share calendars across groups using the same service account email).
  • Cancellations update the calendar event — typically the event is updated to reflect the cancellation rather than deleted, so your team's history stays intact.
  • The Calendar ID isn't your email unless you're syncing to your personal calendar. For shared/team calendars, the ID looks like team-bookings@group.calendar.google.com and is found in Calendar settings > Integrate calendar.
  • Rotate the service account key every so often for security. Generate a new key in Google Cloud, download the JSON, and use Change credentials in the integration to swap them out.
  • The dynamic variables use square brackets, not curly braces. [Customer First Name] is correct; {{Customer First Name}} will not interpolate.

FAQ

Q: Can I sync to multiple calendars?

A: One calendar per group. If you have multiple groups (locations), each can sync to its own calendar. For multi-calendar sync within a single group, you'd need to extend the integration outside this UI.

Q: Will changes to bookings update the calendar event?

A: Yes. Booking edits and cancellations update the corresponding calendar event automatically. Manual edits made directly in Google Calendar may be overwritten by the next sync, so make changes in the booking, not the calendar.

Q: Why are calendar events not appearing?

A: 1) Confirm Active is on. 2) Confirm the service account email has Make changes to events permission on the target calendar. 3) Confirm Google Calendar API is enabled in your Google Cloud project. 4) Confirm the Calendar ID is correct (it's not your email unless syncing to a personal calendar). 5) Confirm the private key was pasted in full, including BEGIN/END markers. 6) Try a fresh test booking — past bookings don't backfill.

Q: Can I use a personal Gmail calendar?

A: Yes. The Calendar ID is your Gmail address (the email you use to log into Google). Share that calendar with the service account email, and bookings sync to it.

Q: How do I revoke the integration?

A: Two options: 1) toggle Active off in the integration view (preserves credentials, just stops syncing), or 2) revoke the service account in Google Cloud Console (cuts off API access entirely). For full security on key rotation, do both: revoke the key in Google Cloud, then re-add a new one.

Q: My events have the wrong title format. How do I fix it?

A: Update the Calendar event summary template in the integration view. The change applies to new bookings going forward; existing calendar events keep their old title until the booking is edited.

Q: Can I include a Zoom link or custom URL in the event description?

A: Yes. Type any custom text or URL into the Calendar event description field; it renders verbatim. Combine with dynamic variables for personalized event bodies.

Q: The integration shows my service account email as read-only. How do I change it?

A: Click Change credentials at the top right of the credential block. The form re-opens for all three fields.

Q: I see events being created but with empty titles. Why?

A: Likely the Calendar event summary template is empty or only contains an unsupported variable. Confirm at least one valid variable or static text is in the template.