Skip to main content
Connectors

Microsoft Teams connector

Set up the Microsoft Teams connector in Kaivo: authentication, configuration, the 12 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 Microsoft Teams 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 customer support data instead of moving it.

What is the Microsoft Teams connector

Sync your Microsoft Teams data into BigQuery with Kaivo to analyse channels, membership, and usage across your organisation.

CategoryCustomer Service, Tech
AuthenticationAPI key
SetupSelf-service

Getting started with the Microsoft Teams connector

  1. Sign up for Kaivo and create a workspace.
  2. Connect your Microsoft Teams 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 Microsoft Teams

Authenticate with your Microsoft Teams credentials. You provide:

FieldDescription
Directory (Tenant) ID

A globally unique identifier (GUID) for your Microsoft organization. To find it, open one of the Teams where you belong in the Teams app, click … next to the Team title, click Get link to team, and copy the tenant ID from the URL.

Client ID

The client ID of your Microsoft Teams application registration in Azure AD.

Client Secret

The client secret of your Microsoft Teams application registration in Azure AD.

Configuring the Microsoft Teams connector

When you set up the connector, you provide:

FieldDescription
Period

Length of time over which the Team Device Report stream is aggregated. Supported values: D7, D30, D90, D180.

Tables and columns synced from Microsoft Teams

Kaivo syncs 12 tables from Microsoft Teams 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.
aodata_typeSTRING
channel_idSTRING
display_nameSTRING
emailSTRING
idSTRING
tenant_idSTRING
user_idSTRING
visible_history_start_date_timeTIMESTAMP
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: channel_members__roles

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.
channel_idSTRING
configuration__content_urlSTRING
configuration__entity_idSTRING
configuration__has_contentBOOL
configuration__remove_urlSTRING
configuration__website_urlSTRING
configuration__wiki_default_tabBOOL
configuration__wiki_tab_idINT64
display_nameSTRING
group_idSTRING
idSTRING
sort_order_indexSTRING
teams_app__display_nameSTRING
teams_app__distribution_methodSTRING
teams_app__idSTRING
web_urlSTRING
_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.
created_date_timeTIMESTAMP
descriptionSTRING
display_nameSTRING
emailSTRING
idSTRING
is_favorite_by_defaultBOOL
membership_typeSTRING
tenant_idSTRING
web_urlSTRING
_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.
aodata_etagSTRING
body__contentSTRING
body__content_typeSTRING
change_keySTRING
conversation_idSTRING
created_date_timeTIMESTAMP
from__email_address__addressSTRING
from__email_address__nameSTRING
has_attachmentsBOOL
idSTRING
last_modified_date_timeTIMESTAMP
received_date_timeTIMESTAMP
sender__email_address__addressSTRING
sender__email_address__nameSTRING
thread_idSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: conversation_posts__categories

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.
conversation_idSTRING
group_idSTRING
has_attachmentsBOOL
idSTRING
is_lockedBOOL
last_delivered_date_timeTIMESTAMP
previewSTRING
topicSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: conversation_threads__unique_senders

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.
group_idSTRING
has_attachmentsBOOL
idSTRING
last_delivered_date_timeTIMESTAMP
previewSTRING
topicSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: conversations__unique_senders

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.
aodata_typeSTRING
display_nameSTRING
given_nameSTRING
idSTRING
job_titleSTRING
mailSTRING
mobile_phoneSTRING
office_locationSTRING
preferred_languageSTRING
surnameSTRING
user_principal_nameSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: group_members__business_phones

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.
aodata_typeSTRING
display_nameSTRING
given_nameSTRING
group_idSTRING
idSTRING
job_titleSTRING
mailSTRING
mobile_phoneSTRING
office_locationSTRING
preferred_languageSTRING
surnameSTRING
user_principal_nameSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: group_owners__business_phones

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.
classificationSTRING
created_date_timeTIMESTAMP
deleted_date_timeTIMESTAMP
descriptionSTRING
display_nameSTRING
expiration_date_timeTIMESTAMP
idSTRING
is_assignable_to_roleBOOL
mailSTRING
mail_enabledBOOL
mail_nicknameSTRING
membership_ruleSTRING
membership_rule_processing_stateSTRING
on_premises_domain_nameSTRING
on_premises_last_sync_date_timeTIMESTAMP
on_premises_net_bios_nameSTRING
on_premises_sam_account_nameSTRING
on_premises_security_identifierSTRING
on_premises_sync_enabledBOOL
preferred_data_locationSTRING
preferred_languageSTRING
renewed_date_timeTIMESTAMP
security_enabledBOOL
security_identifierSTRING
themeSTRING
visibilitySTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: groups__creation_options

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: groups__group_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: groups__on_premises_provisioning_errors

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: groups__proxy_addresses

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: groups__resource_behavior_options

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: groups__resource_provisioning_options

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: groups__service_provisioning_errors

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.
created_date_timeTIMESTAMP
is_resolvedBOOL
service_instanceSTRING
_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.
deleted_dateSTRING
is_deletedSTRING
is_lisencedSTRING
last_activity_dateSTRING
report_periodSTRING
report_refresh_dateDATE
used_android_phoneSTRING
used_chrome_osSTRING
used_i_osSTRING
used_linuxSTRING
used_macSTRING
used_webSTRING
used_windowsSTRING
used_windows_phoneSTRING
user_idSTRING
user_principal_nameSTRING
_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.
created_by__user__display_nameSTRING
created_date_timeTIMESTAMP
descriptionSTRING
drive_typeSTRING
idSTRING
last_modified_by__display_nameSTRING
last_modified_by__idSTRING
last_modified_date_timeTIMESTAMP
nameSTRING
owner__group__display_nameSTRING
owner__group__emailSTRING
owner__group__idSTRING
quota__deletedINT64
quota__remainingFLOAT64
quota__stateSTRING
quota__totalFLOAT64
quota__usedINT64
web_urlSTRING
_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.
display_nameSTRING
given_nameSTRING
idSTRING
job_titleSTRING
mailSTRING
mobile_phoneSTRING
office_locationSTRING
preferred_languageSTRING
surnameSTRING
user_principal_nameSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: users__business_phones

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.

How the Microsoft Teams sync works

After the first load, Kaivo keeps your BigQuery warehouse up to date for you. Where Microsoft Teams 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 Microsoft Teams?

It depends on how much history is in your Microsoft Teams 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 Microsoft Teams'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 Microsoft Teams, 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 Microsoft Teams 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 Microsoft Teams connector in Kaivo and all of its synced data is deleted with it.

Common use cases for Microsoft Teams data

Usage reporting

Use team_device_usage_report to track how teams and channels are used over time.

Membership view

Join groups with group_members and channel_members to map who belongs where.

Channel activity

Use channels and conversation_posts to see where conversation happens.

Access review

Bring users and group_owners together to review ownership and access.

Use Microsoft Teams data in your AI and BI tools

Once Microsoft Teams 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 Microsoft Teams 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 Microsoft Teams connector pricing and plan details.

  • HubSpot: Sync HubSpot to BigQuery.
  • Adform: Sync Adform to BigQuery.
  • Amplitude: Sync Amplitude to BigQuery.
  • Auth0: Sync Auth0 to BigQuery.
  • Convex: Sync Convex to BigQuery.
  • Dixa: Sync Dixa to BigQuery.

Was this helpful?

Still need help? Share an idea