Back to Overview

Google Calendar Integration

Sync Tymeslot with Google Calendar. Availability checks, booking creation, and conflict detection — all automatic.

Luka Breitig — Technical Product Builder & AI Developer
Luka Breitig

Technical Product Builder & AI Developer

📋 Before you begin

Complete these steps first. The connection will fail without them.

A Google OAuth app is configured with GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET set in your environment — see the Google OAuth App Setup guide if you haven't done this yet
The Google Calendar API is enabled in your Google Cloud project — find it under APIs & Services → Library and search for "Google Calendar API"
Tymeslot is accessible via HTTPS — Google's OAuth callback requires a secure URL

Outcome

By the end of this guide, Tymeslot will check your Google Calendar for conflicts before accepting bookings, and create a new calendar event for every confirmed meeting.

How Google Calendar sync works

Tymeslot requests the https://www.googleapis.com/auth/calendar scope. This single scope covers both reading calendar data and writing new events. Here is what Tymeslot does with that access.

Checking availability

When someone views your booking page, Tymeslot reads your calendar events to determine which time slots are free or busy. Only events marked Busy (or Tentative / Out of office) block availability — events marked Free are ignored.

Creating booking events

When a booking is confirmed, Tymeslot creates a calendar event in your chosen calendar. The event includes the attendee's name, the meeting link, and the event type title.

1 Connect Google Calendar

  1. 1 Navigate to [Dashboard][Settings][Integrations].
  2. 2 Find the [Google Calendar] card and click [Connect]. You are immediately redirected to Google's permission screen.
  3. 3 Google shows the permission being requested — access to your Google Calendar. Select your Google account, then click [Allow].
  4. 4 Google redirects you back to Tymeslot. You land on the calendar selection screen — your calendars are already listed.

'This app isn't verified' warning

If your Google Cloud app is still in Testing mode, Google shows this warning before the permission screen. Click AdvancedGo to [your app name] (unsafe) to continue. To remove this warning for all users, publish the OAuth consent screen in your Google Cloud project.

2 Select your calendars

Tymeslot lists every calendar on your Google account. Configure two independent settings for each calendar:

Check for conflicts

Toggle ON every calendar Tymeslot should treat as authoritative for your availability. When an event in these calendars is marked Busy, that time slot becomes unavailable on your booking page. Toggle your primary work calendar on here.

Write bookings to

Choose the single calendar where Tymeslot creates new meeting events. This is usually your primary calendar. You can only write to one calendar at a time.

If a calendar doesn't appear after connecting: click [Refresh calendars]. If it still doesn't appear, the Google Calendar API may not be enabled in your Google Cloud project — check under APIs & Services → Library.

🔍 How conflict detection works

Not every Google Calendar event blocks your availability. Whether a slot is blocked depends on the event's Show as setting in Google Calendar.

Show as value Blocks availability?
Busy Yes — slot is unavailable
Free No — slot remains open
Tentative Yes — slot is unavailable
Out of office Yes — slot is unavailable

New events default to Busy

When you create a Google Calendar event, it is marked Busy by default. You only need to take action if you want a specific event to not block your Tymeslot availability — change its Show as value to Free.

Bookings still going through when you're busy? Check that the correct calendar is toggled on under [Check for conflicts] in Integrations. The calendar must be enabled there, and the events within it must be marked Busy, for conflicts to be detected.

🔄 Token expiry and reconnection

Google OAuth tokens expire periodically. Tymeslot refreshes them automatically in the background. However, tokens can also be revoked — for example, if you change your Google account password, remove Tymeslot from your connected apps, or your Google Cloud app's status changes.

If calendar sync stops working, navigate to [Dashboard][Settings][Integrations] and click [Reconnect] next to Google Calendar. This starts a fresh OAuth flow and replaces the expired token.

Frequently Asked Questions

I'm getting 403 errors after connecting — why?

A 403 usually means the Google Calendar API is not enabled for your Google Cloud project. Go to APIs & Services → Library in Google Cloud Console, search for "Google Calendar API", and click Enable. If the API is already enabled, check that the OAuth credentials belong to the same project as the enabled API.

Bookings appear in Google Calendar but my availability isn't being checked — what's wrong?

Open [Dashboard] → [Settings] → [Integrations] and confirm the correct calendar has Check for conflicts toggled on. Tymeslot only checks calendars you have explicitly enabled for conflict detection — enabling the integration alone is not sufficient. Also ensure the events in that calendar are marked Busy (not Free).

Can I sync with a Google Workspace (G Suite) calendar?

Yes. Connect your Google Workspace account the same way you would a personal Google account. If your Workspace administrator has restricted third-party app access, they may need to authorise Tymeslot in the Google Workspace Admin console under Security → API controls → Manage third-party app access.

Do I need separate OAuth credentials for Google Calendar and Google Meet?

No. Both Google Calendar sync and Google Meet link generation use the same GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET. You only need one Google OAuth app configured. When a user connects Google Calendar with Google Meet enabled, Tymeslot requests the additional Meet scope during the same OAuth flow.

Events appear duplicated in my Google Calendar — how do I fix this?

Duplication typically happens when a user has connected the same Google account twice — for example, once for Google Calendar and once through a reconnect that created a second integration. Go to [Dashboard] → [Settings] → [Integrations], disconnect all Google Calendar connections, then reconnect once. If duplication persists, check whether another scheduling tool is also writing to the same calendar.

Google is showing an 'app isn't verified' warning — is this safe to proceed?

Yes, this warning appears when your Google Cloud OAuth consent screen is in Testing mode and has not been through Google's verification process. It is expected for self-hosted instances. Click Advanced → Go to [your app name] (unsafe) to proceed. To remove the warning permanently, publish the OAuth consent screen in your Google Cloud project — this requires submitting the app for Google review.

Verify the integration is working

Run through this checklist to confirm everything is set up correctly:

  1. 1 Open Google Calendar and create a test event for a time slot that would otherwise be bookable. Set Show as to Busy (the default).
  2. 2 Open your Tymeslot booking page in a separate browser window (or incognito). Navigate to the date of the test event.
  3. 3 Confirm the time slot appears as unavailable. If it is still shown as available, check that the calendar containing the event is toggled on under [Check for conflicts].
  4. 4 Book a different, open slot as a test. Confirm a new event appears in your Google Calendar with the attendee name and meeting link.
  5. 5 Delete your test events when done.

🔗 Related Articles

Read Outlook Calendar Integration

Outlook Calendar Integration

Sync Tymeslot with Outlook Calendar. Works with personal Outlook.com accounts and Microsoft 365 work accounts.

Read CalDAV Integration

CalDAV Integration

Connect any CalDAV-compatible calendar server — Nextcloud, Radicale, Zimbra, and more.

Read Google OAuth App Setup

Google OAuth App Setup

Create a Google OAuth app to enable Google Login, Google Calendar sync, and Google Meet room creation.