Skip to main content
Connectors

Google Calendar connector

Set up the Google Calendar connector in Kaivo: authentication, configuration, the 5 BigQuery tables it syncs, and answers to common questions.

Written By Lauri Raivio

Last updated 16 days ago

Kaivo is a fully managed data platform that syncs your Google Calendar data into a Google BigQuery warehouse and keeps it up to date automatically. There is no pipeline to build and no infrastructure to run, so you can spend your time analysing your project management data instead of moving it.

What is the Google Calendar connector

Sync your Google Calendar data into BigQuery with Kaivo to analyse how time is spent across meetings and calendars.

CategoryProject Management
AuthenticationAPI key
SetupSelf-service

Getting started with the Google Calendar connector

  1. Sign up for Kaivo and create a workspace.
  2. Connect your Google Calendar account.
  3. Choose which tables to sync.
  4. Wait for the initial sync to finish.
  5. Query your data in BigQuery or your favourite AI or BI tool.

Authenticating Google Calendar

Authenticate with your Google Calendar credentials. You provide:

FieldDescription
Client ID

Client ID of your Google Cloud OAuth client (Google Cloud Console → APIs & Services → Credentials).

Client secret

Client secret of the same Google Cloud OAuth client.

Refresh token

OAuth refresh token obtained by authorizing your client with the Google Calendar read-only scope.

Prerequisites

This connector needs your own Google Cloud OAuth client:

  1. In the Google Cloud Console, create a project and enable the Google Calendar API.
  2. Configure the OAuth consent screen with the calendar.readonly scope, then create an OAuth client to get a Client ID and Client Secret.
  3. Complete the OAuth flow once to obtain a Refresh Token.
  4. Find your Calendar ID in Google Calendar under Settings and sharing → Integrate calendar.

Need help, or want an easier way to connect? Reach our team via the chat in the bottom-right corner.

Configuring the Google Calendar connector

When you set up the connector, you provide:

FieldDescription
Calendar ID

The Calendar ID to sync — find it in Google Calendar under Settings and sharing → Integrate calendar (your primary calendar's ID is usually your email address).

Tables and columns synced from Google Calendar

Kaivo syncs 5 tables from Google Calendar into a dedicated dataset in your BigQuery warehouse. Click any table to see its columns and types.

ColumnTypeDescription
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
descriptionSTRING
access_roleSTRING
background_colorSTRING
color_idSTRING
etagSTRING
foreground_colorSTRING
idSTRING
kindSTRING
primaryBOOL
selectedBOOL
summarySTRING
time_zoneSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: calendarlist__conference_properties__allowed_conference_solution_types

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
valueSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: calendarlist__default_reminders

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
methodSTRING
minutesFLOAT64
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: calendarlist__notification_settings__notifications

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
typeSTRING
methodSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.
ColumnTypeDescription
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
descriptionSTRING
access_roleSTRING
background_colorSTRING
color_idSTRING
etagSTRING
foreground_colorSTRING
idSTRING
kindSTRING
primaryBOOL
selectedBOOL
summarySTRING
time_zoneSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: calendars__conference_properties__allowed_conference_solution_types

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
valueSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: calendars__default_reminders

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
methodSTRING
minutesFLOAT64
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: calendars__notification_settings__notifications

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
typeSTRING
methodSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.
ColumnTypeDescription
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
calendar___1__backgroundSTRING
calendar___1__foregroundSTRING
calendar___2__backgroundSTRING
calendar___2__foregroundSTRING
calendar___3__backgroundSTRING
calendar___3__foregroundSTRING
calendar___4__backgroundSTRING
calendar___4__foregroundSTRING
calendar___5__backgroundSTRING
calendar___5__foregroundSTRING
calendar___6__backgroundSTRING
calendar___6__foregroundSTRING
calendar___7__backgroundSTRING
calendar___7__foregroundSTRING
calendar___8__backgroundSTRING
calendar___8__foregroundSTRING
calendar___9__backgroundSTRING
calendar___9__foregroundSTRING
calendar___10__backgroundSTRING
calendar___10__foregroundSTRING
calendar___11__backgroundSTRING
calendar___11__foregroundSTRING
calendar___12__backgroundSTRING
calendar___12__foregroundSTRING
calendar___13__backgroundSTRING
calendar___13__foregroundSTRING
calendar___14__backgroundSTRING
calendar___14__foregroundSTRING
calendar___15__backgroundSTRING
calendar___15__foregroundSTRING
calendar___16__backgroundSTRING
calendar___16__foregroundSTRING
calendar___17__backgroundSTRING
calendar___17__foregroundSTRING
calendar___18__backgroundSTRING
calendar___18__foregroundSTRING
calendar___19__backgroundSTRING
calendar___19__foregroundSTRING
calendar___20__backgroundSTRING
calendar___20__foregroundSTRING
calendar___21__backgroundSTRING
calendar___21__foregroundSTRING
calendar___22__backgroundSTRING
calendar___22__foregroundSTRING
calendar___23__backgroundSTRING
calendar___23__foregroundSTRING
calendar___24__backgroundSTRING
calendar___24__foregroundSTRING
event___1__backgroundSTRING
event___1__foregroundSTRING
event___2__backgroundSTRING
event___2__foregroundSTRING
event___3__backgroundSTRING
event___3__foregroundSTRING
event___4__backgroundSTRING
event___4__foregroundSTRING
event___5__backgroundSTRING
event___5__foregroundSTRING
event___6__backgroundSTRING
event___6__foregroundSTRING
event___7__backgroundSTRING
event___7__foregroundSTRING
event___8__backgroundSTRING
event___8__foregroundSTRING
event___9__backgroundSTRING
event___9__foregroundSTRING
event___10__backgroundSTRING
event___10__foregroundSTRING
event___11__backgroundSTRING
event___11__foregroundSTRING
kindSTRING
updatedSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.
ColumnTypeDescription
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
descriptionSTRING
anyone_can_add_selfBOOL
conference_data__conference_idSTRING
conference_data__conference_solution__icon_uriSTRING
conference_data__conference_solution__key__typeSTRING
conference_data__conference_solution__nameSTRING
conference_data__create_request__conference_solution_key__typeSTRING
conference_data__create_request__request_idSTRING
conference_data__create_request__status__status_codeSTRING
conference_data__notesSTRING
conference_data__parameters__add_on_parameters__parameters__creator_user_idSTRING
conference_data__parameters__add_on_parameters__parameters__meeting_created_bySTRING
conference_data__parameters__add_on_parameters__parameters__meeting_typeSTRING
conference_data__parameters__add_on_parameters__parameters__meeting_uuidSTRING
conference_data__parameters__add_on_parameters__parameters__original_event_idSTRING
conference_data__parameters__add_on_parameters__parameters__real_meeting_idSTRING
conference_data__parameters__add_on_parameters__parameters__script_idSTRING
createdSTRING
creator__display_nameSTRING
creator__emailSTRING
creator__selfBOOL
end__dateSTRING
end__date_timeSTRING
end__time_zoneSTRING
end_time_unspecifiedBOOL
etagSTRING
event_typeSTRING
extended_properties__shared__meeting_idSTRING
extended_properties__shared__meeting_paramsSTRING
extended_properties__shared__zm_meeting_numSTRING
guests_can_invite_othersBOOL
guests_can_modifyBOOL
guests_can_see_other_guestsBOOL
hangout_linkSTRING
html_linkSTRING
i_cal_uidSTRING
idSTRING
kindSTRING
locationSTRING
organizer__display_nameSTRING
organizer__emailSTRING
organizer__selfBOOL
original_start_time__date_timeSTRING
original_start_time__time_zoneSTRING
private_copyBOOL
recurring_event_idSTRING
reminders__use_defaultBOOL
sequenceFLOAT64
source__titleSTRING
source__urlSTRING
start__dateSTRING
start__date_timeSTRING
start__time_zoneSTRING
statusSTRING
summarySTRING
transparencySTRING
updatedSTRING
visibilitySTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: events__attachments

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
file_idSTRING
file_urlSTRING
icon_linkSTRING
mime_typeSTRING
titleSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: events__attendees

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
commentSTRING
display_nameSTRING
emailSTRING
optionalBOOL
organizerBOOL
resourceBOOL
response_statusSTRING
selfBOOL
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: events__conference_data__entry_points

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
access_codeSTRING
entry_point_typeSTRING
labelSTRING
meeting_codeSTRING
passcodeSTRING
passwordSTRING
pinSTRING
region_codeSTRING
uriSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: events__conference_data__entry_points__entry_point_features

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
valueSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: events__recurrence

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
valueSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.
ColumnTypeDescription
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
etagSTRING
idSTRING
kindSTRING
valueSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

How the Google Calendar sync works

After the first load, Kaivo keeps your BigQuery warehouse up to date for you. Where Google Calendar supports it, each sync pulls only new and changed records so it stays fast; otherwise it refreshes the whole table. Every record keeps its original ID, so you won't get duplicate rows.

Frequently asked questions

How long does the initial sync take for Google Calendar?

It depends on how much history is in your Google Calendar account. Most initial syncs finish within minutes, while large accounts can take a few hours. After that, syncs only fetch new and changed records, so they're much faster.

Can I sync only some tables or columns?

Yes. You pick which tables to sync when you set up the connection and can change the selection later. Tables you don't select are never copied to your warehouse.

What happens when Google Calendar's schema changes?

New fields are never added automatically. You choose which fields to sync, so data you haven't selected (sensitive personal data, for example) never lands in your warehouse. When a new field appears, it becomes available for you to add. What happens to removed or renamed fields depends on a table's sync mode: full-refresh tables always match what's currently in Google Calendar, so dropped fields disappear, while incremental tables keep their existing columns and history, so an old field stays and newly added fields fill in over time.

How do I handle GDPR or data deletion requests?

Your data lives in your own Kaivo-managed BigQuery warehouse, so the most direct option is to delete or anonymise specific records right in BigQuery. If you delete data in Google Calendar instead, full-refresh tables drop it on the next sync, while incremental tables keep it, so you would remove the row in BigQuery or ask us to run a full refresh. To remove everything, delete the Google Calendar connector in Kaivo and all of its synced data is deleted with it.

Common use cases for Google Calendar data

Meeting load

Use events to measure meeting time and frequency by week and calendar.

Conferencing usage

Use conference_data to see how often meetings use video and which tools.

Calendar inventory

Join calendarlist and calendars to document the calendars in your account.

Reporting context

Bring calendar data into BigQuery to combine it with project and time tracking data.

Use Google Calendar data in your AI and BI tools

Once Google Calendar data lands in your Kaivo-managed BigQuery warehouse, you can explore it with AI tools or any BI tool that connects to BigQuery. Here's how the most common destinations work with Google Calendar data.

Claude

Use Kaivo's MCP server to give Claude secure, workspace-scoped access to your data. Setup guide →

Power BI

Microsoft's BI tool with a native BigQuery connector. Supports direct query and scheduled refresh. Setup guide →

Data Studio

Free Google BI tool with native BigQuery support. One-click connection to your Kaivo warehouse; great for SMB teams on Google Workspace. Setup guide →

Tableau

The premium analytics standard, with native BigQuery integration. Setup guide →

Google Sheets

Use Connected Sheets to query BigQuery directly from a spreadsheet, with no SQL. Setup guide →

Excel

Connect via Power Query's BigQuery connector. Setup guide →

Metabase

Open-source BI tool with strong BigQuery support. Setup guide →

See our pricing page for Google Calendar connector pricing and plan details.

Was this helpful?

Still need help? Share an idea