Microsoft Teams to Databricks: How to Move Your Data
Move Microsoft Teams into Databricks with Airbyte. Why channel messages are not available, which streams you do get, and the admin permissions required.

Moving Microsoft Teams into Databricks is worth being precise about, because the obvious expectation is wrong. This connector does not give you channel messages. Airbyte's documentation says so directly: some APIs are not supported in Graph v1.0, channel messages and channel message replies among them.
What you get instead is the structure and usage of your Teams estate: who is in which team, how channels are organised, what is attached to them, and how the product is actually being used. That is a genuinely useful dataset for adoption and governance work, and a poor substitute if you wanted a conversation archive.
Microsoft Teams to Databricks at a glance:
Why move data from Microsoft Teams to Databricks?
Two situations fit this connector, and both are about the shape of your Teams estate rather than its contents.
The first is adoption reporting. A device usage report stream tells you how people are actually using Teams, and joining that to your HR data by department or location answers questions about where the rollout has landed and where it has not. That is a real question in most large organisations and one nobody can answer from the admin centre alone.
The second is governance. Which teams exist, who belongs to them, which are abandoned, what is attached to them. Sprawl in Teams is a common problem and a warehouse is where you measure it. If what you wanted was searchable conversation history, this pipeline does not provide it and you should stop here.
What do you need before you start?
One of these needs somebody with administrator rights, so start it first:
An app registered in the Azure portal. The connector authenticates against Microsoft Graph using OAuth, so you register an application and use its credentials. The Microsoft Teams source documentation links to Microsoft's instructions for creating one.
Application permissions, consented by an administrator. Graph distinguishes delegated permissions, which act as a signed-in user, from application permissions, which run without one. This source requires application permissions, and those can only be consented by an administrator. That is a person you need on the project rather than a checkbox.
A written record of what you granted. Worth more here than usual, because the connector has historically surfaced permission failures without the underlying Graph error. A log saying it could not get channels, with no explanation that privileges were insufficient, is a frustrating thing to debug from scratch.
Realistic expectations about the streams. Users, groups, group members and owners, channels, channel members, channel tabs, conversations and their threads and posts, team drives, and a team device usage report. Note that the conversation streams are not the same thing as modern channel messages.
On the Databricks side each stream becomes a table in Unity Catalog and the connector needs permission to create Volumes for Avro staging. Because this data describes employees, agree the catalog and schema with whoever owns governance before the first sync.
How do you build a Teams to Databricks pipeline in Airbyte?
Step 1: Confirm the streams answer your question
Write down the question somebody asked you, then check it against the stream list. If it is about adoption, membership or sprawl, this connector answers it. If it contains the words what did someone say, it does not, and no configuration changes that. This is a five-minute check that prevents the most common disappointment with this pipeline.
Step 2: Register the app and grant permissions
Create the application in the Azure portal, add the application permissions the documentation lists, and have an administrator consent to them. Grant them all in one pass rather than incrementally, because the poor error reporting makes it hard to tell which one is missing when a stream fails.
Step 3: Configure the source and destination
Click Sources, then New Source, and select Microsoft Teams, following adding a source. Then click Destinations, New Destination, and select Databricks, following adding a destination, supplying your workspace details, catalog and schema.
Step 4: Create the connection and schedule slowly
Click Connections, then New connection, and select streams with a sync mode. Almost everything here changes slowly: teams are created occasionally, membership shifts weekly, tabs rarely. Daily is generous and there is no benefit to more, particularly given the connector is bound by normal Microsoft Graph request limits.
Check every selected stream produced rows after the first sync. Because of the error reporting issue, a stream returning nothing because of a missing permission looks much like a stream returning nothing because there is nothing to return.
Why can't you get channel messages?
Because the connector is built on Microsoft Graph v1.0, and channel messages and their replies are among the APIs not supported there in the form this connector needs. Graph has a beta endpoint with newer capabilities, and taking a production dependency on preview APIs is not recommended, since they can change without notice.
The conversation streams can look like a substitute and are not one. They cover the older group conversation model rather than the channel posts people write in Teams today, so a workspace that lives in channels will find them close to empty.
If message content is genuinely what you need, that is a different project: Microsoft offers export and eDiscovery routes designed for it, with the compliance controls such data warrants. Reaching for those deliberately is better than trying to make an analytics connector do a job it was not built for.
Why is a stream returning nothing?
Most often a missing application permission. The awkward part, reported against this connector, is that the underlying Graph error does not always reach the log. You see a message saying it could not get channels, without the part explaining that privileges were insufficient to complete the operation.
That turns a two-minute fix into an afternoon, which is why the written record of granted permissions matters. Compare what you granted against what the documentation lists rather than guessing, and check with your administrator that consent was actually given rather than merely requested, since those are separate steps in Azure.
The other candidate is that the stream is genuinely empty. Teams estates vary enormously, and channel tabs or team drives may simply not be used in your organisation. Confirming which of the two you are looking at is exactly why the first sync deserves a row count check on every stream.
Frequently asked questions
Can I sync Teams channel messages with this connector?
No. Channel messages and channel message replies are among the APIs not supported in Graph v1.0 as used here. For message content, use Microsoft's own export or eDiscovery routes.
What permissions does the connector need?
Application permissions rather than delegated ones, which can only be consented by an administrator. Plan for that person's involvement rather than expecting to self-serve.
Are the conversation streams the same as channel messages?
No. They cover the older group conversation model rather than the channel posts people write in Teams today, so they are often close to empty in a channel-centric workspace.
A stream failed but the log does not say why. What now?
Check permissions first. The connector has historically surfaced Graph permission errors without the underlying cause, so compare what was granted and consented against the documented list.
Can I do this without writing code?
Yes. The Airbyte setup is UI-driven and the Microsoft side is portal configuration. You will want Spark or SQL models joining usage to your HR data for adoption reporting.
Get your Microsoft Teams data into Databricks
Confirm the streams answer the question you were asked, because message content is not among them. Involve an administrator early for the application permissions, record what you granted, check row counts on every stream after the first sync, and schedule daily since almost nothing here changes quickly.
Airbyte's connector catalog includes 600+ pre-built connectors, so collaboration data can sit beside HR and delivery sources in one lakehouse. For a chat source where message content is available, see Slack to Elasticsearch, and for another Microsoft source with a similar permissions model, Microsoft Dataverse to Kafka.
Integrate with 700+ apps using Airbyte
Move data from 700+ sources into warehouses, lakes, and beyond. Set up pipelines in minutes with pre-built connectors and the Connector Builder.
