The Microsoft Teams AirSync connector imports your Teams communication history — channels, messages, members, and file attachments — into DevRev. It supports both one-time imports and ongoing incremental syncs.
Note: Syncing is one-way — Teams → DevRev only. Changes made in DevRev are not pushed back to Teams.
MS Teams object | DevRev equivalent | Synced? |
|---|---|---|
User (internal) | DevUser | ✅ |
User (guest / external) | Contact | ✅ |
Channel | DM | ✅ |
Channel membership | Group / Group members | ✅ |
Channel message | Comment | ✅ |
Channel reply | Comment (thread) | ✅ |
Message attachment | Artifact on comment | ✅ (when Import Attachments is on) |
Personal chat (1:1 DM) | DM | ✅ (App Flow only) |
Group chat | DM | ✅ (App Flow only) |
Meeting transcript | Artifact on comment | ✅ (App Flow, requires additional setup) |
The following options are available for configuring the snap-in:
Option | Default | Description |
|---|---|---|
Import Attachments | Off | Import file attachments (images, documents shared in channel messages). |
Extract Meeting Transcripts | On | Import channel meeting transcripts as |
Import All Teams (App Flow) | Off | When on with the App Flow: all accessible teams in the tenant are imported as a single sync unit. When off with the App Flow: each accessible team appears as an individual sync unit for you to choose. Has no effect on the Delegated User Flow. |
Import Personal Chats | Off | When on with the App Flow: imports 1:1 direct messages, group chats, and meeting chats. |
Import Disabled Users | Off | Include chats for disabled (deactivated) user accounts. When off, chats that involve only disabled users are skipped; their messages to active users are still captured via those active users' chat threads. |
The connector supports two connection types. Choose the one that matches your needs.
Delegated User Flow | Client Credential (App) Flow | |
|---|---|---|
How it authenticates | Individual user's Microsoft account (OAuth) | Azure app registration with client secret |
Teams it can access | Only teams the signed-in user belongs to | All teams in the Microsoft 365 tenant |
Team selection | Individual teams listed as separate sync units | All teams as a single sync, or individual teams |
Personal chats / DMs | ❌ Not supported | ✅ Supported (opt-in) |
Meeting transcripts | ❌ Not supported | ✅ Supported (requires additional setup) |
Best for | Quick, single-user setup with limited scope | Organization-wide imports; full feature coverage |
The Delegated User Flow uses an individual Microsoft account to authenticate. It is scoped to the teams that account is a member of.
Use this flow when you want a simple OAuth sign-in setup and only need to import the teams you personally belong to. It does not support personal chats or meeting transcripts.
Go to Settings → Integrations → Snap-ins, search for Microsoft Teams, and click Add → Install.
Navigate to Settings → Integrations → AirSyncs.
Click Start AirSync and select Microsoft Teams.
Choose MS Teams Connection, provide a connection name, and click Next.
A Microsoft OAuth consent window will open for the application DevRev MS Teams.
Sign in with your Microsoft account and grant the requested permissions. If you are not a Microsoft Entra tenant administrator, contact your Entra administrator to review and grant admin consent for the requested permissions on behalf of the organization.
After the connection is created, the teams the signed-in user belongs to are listed as individual sync units.
Select the teams you want to import.
Choose your DevRev destination.
Review the pre-configured field mappings and click Next.
Wait for the extraction and import to complete.
Access is limited to teams the authenticated user is a member of.
Each team is listed as a separate sync unit — there is no "import all at once" option.
Personal chats (1:1 DMs, group chats, meeting chats) are not supported.
Meeting transcripts are not supported.
The Client Credential Flow uses an Azure application registration with a client secret to authenticate as the application itself — not as an individual user. This gives the connector access to all teams in the Microsoft 365 tenant.
This is the recommended flow for organization-wide imports. It is the only flow that supports personal chats and meeting transcripts.
Use the App Flow when you need to:
Import all teams in your organization, not just the ones you belong to.
Import personal chats (1:1 DMs, group chats, meeting chats).
Import channel meeting transcripts or personal chat call transcripts.
A Microsoft Entra ID (Azure AD) account with the Application Administrator, Cloud Application Administrator, or Global Administrator role. Admin consent for the required permissions is mandatory and can only be granted by an administrator.
If importing meeting transcripts: the Microsoft Teams Administrator or Global Administrator role to run the PowerShell commands in Step 4 below.
Access to the DevRev organization where the MS Teams AirSync snap-in is installed.
Go to https://entra.microsoft.com and sign in with an administrator account.
In the left navigation, open Entra ID → App registrations.
Click + New registration.
Fill in:
Name: e.g. DevRev - MS Teams AirSync (any name; for your reference only)
Supported account types: select Accounts in this organizational directory only (Single tenant)
Redirect URI: leave blank
Click Register.
On the application's Overview page, copy and save:
Application (client) ID → this is your Client ID
Directory (tenant) ID → this is your Tenant ID
The snap-in requires read-only Microsoft Graph Application permissions.
In your app registration, open API permissions.
Click + Add a permission → Microsoft Graph → Application permissions.
Add the permissions for your intended feature set (search by name, tick the box, then Add permissions):
Required for all imports (channels, messages, attachments):
Permission | Purpose |
|---|---|
| List channels in each team |
| Read channel membership |
| Read channel messages and replies |
| Read file attachments stored in Teams/SharePoint |
| Discover the teams (groups) in your tenant |
| Read your tenant name (shown on the connection) |
| Read team names, descriptions, and membership |
| Read team membership |
| Enumerate all directory users (required for tenant-wide sync) |
Additional — required if importing personal chats (when Import Personal Chats is enabled):
Permission | Purpose |
|---|---|
| Read 1:1, group, and meeting chat messages |
Additional — required if importing meeting transcripts (when Extract Meeting Transcripts is enabled):
Permission | Purpose |
|---|---|
| Read call transcripts for personal chat calls |
| Read meeting metadata (subject, start/end times) |
| Read channel meeting transcript content (.vtt files) |
Confirm all rows show Type = Application.
Click ✔ Grant admin consent for your tenant and confirm.
Verify every row shows a green Granted for tenant status.
This step is mandatory. Application permissions do not take effect until an administrator grants tenant-wide consent. If any permission shows "Not granted", the import will fail with
403errors.
In your app registration, open Certificates & secrets.
On the Client secrets tab, click + New client secret.
Enter a description (e.g. DevRev connection) and choose an expiry (e.g. 12 or 24 months).
Click Add.
Immediately copy the secret Value (not the Secret ID) and store it securely. The value is shown only once — if you navigate away you must create a new secret.
Note the expiry date. When the secret expires, syncs will stop working until you create a new secret and update the connection in DevRev.
Skip this step if you are not importing meeting transcripts. If you skip it, also turn off Extract Meeting Transcripts in snap-in settings — otherwise transcript fetches will return
403 Forbidden(the rest of the sync — channels, messages, attachments — still works normally).
Microsoft requires apps to be explicitly authorized via a Teams Application Access Policy before they can read meeting and transcript data. Graph permissions alone are not sufficient — without this policy, every call to /onlineMeetings and /transcripts returns 403 Forbidden.
This step requires the Microsoft Teams Administrator or Global Administrator role.
Install the Microsoft Teams PowerShell module (one-time)
Install-Module -Name MicrosoftTeams -Force -AllowClobberIf the module is already installed, ensure you are on v5.0 or later:
Update-Module -Name MicrosoftTeamsCreate and grant the policy
Replace <APPLICATION_CLIENT_ID> with the Application (client) ID you copied in Step 1.
# 1. Sign in as a Teams Administrator (a browser window opens)
Connect-MicrosoftTeams
# 2. Create the policy
New-CsApplicationAccessPolicy `
-Identity "DevRev-Snap-In-Policy" `
-AppIds "<APPLICATION_CLIENT_ID>" `
-Description "DevRev AirSync snap-in"
# 3. Grant the policy tenant-wide
Grant-CsApplicationAccessPolicy `
-PolicyName "DevRev-Snap-In-Policy" `
-GlobalVerify
Get-CsApplicationAccessPolicyYou should see two entries:
Identity : Global
AppIds : {<APPLICATION_CLIENT_ID>}
Identity : Tag:DevRev-Snap-In-Policy
AppIds : {<APPLICATION_CLIENT_ID>}
Description : DevRev AirSync snap-inGo to Settings → Integrations → Snap-ins and search for Microsoft Teams.
Open the snap-in and click Configure in the top-right corner.
Select the snap-in configuration that best suits your import preferences, and click Save.
In DevRev, navigate to Settings → Integrations → AirSync.
Click Start AirSync and select Microsoft Teams.
Click Add Connection, give it a name, and select the MS Teams App Connection tab.
Fill in the three fields collected from Microsoft Entra:
Field | Value |
|---|---|
Client ID | Application (client) ID from Step 1 |
Tenant ID | Directory (tenant) ID from Step 1 |
Client Secret | Secret Value from Step 3 |
Click Next. DevRev validates the credentials by fetching your organization name from Microsoft. A successful save means the credentials and permissions are working.
Select the sync unit(s) to import:
If Import All Teams (App Flow) is enabled: a single sync unit representing the entire tenant appears. Select it to import all accessible teams at once (plus personal chats, if that option is also enabled).
If Import All Teams (App Flow) is disabled: each accessible team appears as an individual sync unit. Select the teams you want to import.
Choose your DevRev destination, review field mappings, and start the extraction.
Channels (standard, private, and shared) corresponding to the selected Team
Channel messages and threaded replies
Channel members (internal)
File attachments on channel messages (when Import Attachments is on)
Everything above, plus:
All teams accessible in the tenant — not limited to one user's membership
Full directory-level user classification (internal vs. guest/external)
When Import Personal Chats is enabled (App Flow + Import All Teams enabled):
1:1 direct messages
Group chats
Meeting chats
When Extract Meeting Transcripts is enabled (App Flow, with Application Access Policy in place):
Channel meeting transcripts as .vtt files attached to the meeting's channel message
Personal chat meeting/call transcripts (when Import Personal Chats is also enabled)
Option | Description |
|---|---|
Sync to DevRev | Push new and modified Teams data to previously imported DevRev items. |
View Report | View details on the initial import and any subsequent syncs. |
Delete Import | Remove the import and all content it created. |
Edit Connection | Change the connection used for future syncs. |
Settings → Integrations → AirSyncs → locate the import → ⋮ → Sync Microsoft Teams to DevRev
⚠️ May overwrite fields in previously imported DevRev items, even if they were modified in DevRev.
Settings → Integrations → AirSyncs → locate the import → ⋮ → Set Periodic Sync
Default interval: once per hour
Enable automation for synced items — when active, newly created or updated items trigger webhooks, notifications, and Snap-ins as if they originated in DevRev. When disabled, no event-driven processes fire.
Events are not triggered during first-time imports or manual syncs, regardless of this setting.
⚠️ Deletes all content created by the import — users, teams, channels, messages, chats, and attachments — even if those items were subsequently modified in DevRev. Re-importing after deletion is possible.
Settings → Integrations → AirSyncs → locate the import → ⋮ → Delete Import