How to get transcription data from Microsoft Teams meetings

10 min read

Quick summary:

This guide compares approaches developers can take to retrieve transcripts from Microsoft Teams meetings.

What you’ll learn:

  • Why Microsoft’s Graph API isn’t ideal for customer-facing, production-ready apps.
  • How meeting bot APIs and browser automation compares to the Graph API

Who it’s for: Platform builders who want to tap into meeting data for customer-facing SaaS applications with AI-powered user experiences.

When we think about meeting ecosystems at work, we think Microsoft Teams. With over 300 million users on the platform in 2024, Teams has become a popular platform of choice for many enterprises and Fortune 100 companies. It’s a platform known for its strong organizational permission system, keeping enterprise data safe within the larger Microsoft Office world.

But these restrictive permission models do create unique developer challenges that don’t exist with any other platform. If you’re building an application to help customers get transcriptions from Microsoft Teams meetings, then using Teams’ built-in transcription or native API isn’t the best long-term choice as more meeting audio gets processed.

We’re going to talk about a few popular methods developers can use to get Teams transcripts. From Microsoft’s native Graph API to the workarounds developers use in production, we’ll help you narrow down the best options to build with.

What you can do with Microsoft Team’s built-in transcription

Microsoft Teams does provide native transcription functionality, but it’s meant to meet the needs of company policies rather than for giving developers the necessary controls to build automation at scale. 

Here’s how individual Microsoft Teams users can enable recordings and transcriptions for their meetings: 

  • Get necessary requirements set up: Verify that your Microsoft365 license includes transcription capabilities and that you have the Teams desktop application, which is required for toggling on transcription.
  • Enable administrator control: An organization’s Teams account administrator will have to allow transcriptions in the Teams admin center by heading to Meetings > Meeting Policies > Audio and Video > Allow transcription
  • Configure per-organizer and per-user policy settings: Make sure that both the organizer and the user who starts transcription have this admin setting enabled. 
  • Start transcriptions within the Teams interface: Once the organizer has joined the meeting, click More Actions in the meeting controls and select Start transcription from the dropdown menu. 
  • Download transcripts from meeting organizer: Transcripts become available after the meeting ends in the meeting organizer’s OneDrive or SharePoint folder. Meeting participants can view transcripts in a Teams calendar invite by default or view them through the meeting chat and Recap tab. But downloading transcript .vtt or .docx files is typically restricted to organizers and co-organizers unless they grant permissions to the broader organization. 

Why getting transcriptions with the Teams Graph API falls short

A starting point for developers to work with Microsoft’s native tools for programmatic transcriptions is Microsoft’s REST API. You can use the API to retrieve meeting transcripts for scheduled meetings via your application, but you would have to build around granular permission requirements that make development a lot more complex.  

Microsoft Teams is architectured around restrictive permissions, which means applications would either have to: 

  • Be granted organization-wide access to all meeting transcripts across a customer organization (a big security decision most enterprises won’t make for external vendors). 
  • Be manually installed your Teams app in each specific meeting before transcription can occur (a pretty manual user experience that mirrors an in-app transcription method) 

You would also run into a few other issues building a production-ready app:

Platform lock-in: Graph APIs only work for Teams meetings. Your customers use Zoom and Google Meet too, requiring separate integrations for each platform with different auth flows, data formats, and reliability characteristics.

Complex auth setup: Configuring permissions on Microsoft Entra ID, setting up app registration, and navigating Microsoft’s Byzantine permission model takes significant development time upfront.

Manual transcription triggers: There’s no API to start recordings programmatically. Someone has to physically click “Record” in every meeting, or your app gets nothing.

Alternative methods for retrieving and processing Teams transcripts 

Beyond the Graph API, here are some other methods you can use: 

Browser automation

This method involves using headless browsers using tools like Puppeteer or Selenium to join Teams meetings and extract captions directly from the web interface. You would deploy automated browser instances that navigate to meeting URLs, handle authentication flows, and parse caption elements from the page DOM. This method works well for internal tooling or specific enterprise use cases where you control meeting access.

Pros:

  • Bypasses all API permission requirements
  • Captures captions in real-time as they’re displayed
  • Functions independently of host account settings

Cons:

  • Frontend changes constantly break your parsing logic
  • Significant infrastructure costs for browser instances at scale
  • Microsoft actively implements bot detection measures
  • Potential Terms of Service violations

Transcription APIs 

With a transcription API like AssemblyAI or Deepgram, you can process audio that you capture separately to create more accurate transcripts. These APIs provide better accuracy, speaker identification, and custom language models. It’s most suitable for applications where transcription quality is the primary concern.

Pros:

  • Better accuracy compared to native Teams transcription
  • Advanced processing features like emotion detection and custom vocabularies
  • Works with most audio capture methods, and has flexible integrations with existing audio processing pipelines

Cons:

  • Requires separate infrastructure for capturing audio for transcription APIs to process 
  • Becomes an additional service dependency to pay for, set up, and monitor in addition to audio capture methods. 
  • Requires you to store and manage large audio files that you’ll be uploading into the transcription API

Nylas Notetaker API 

The Nylas API is a platform that manages meeting bots for you so you don’t have to take on the work of building and maintaining meeting data infrastructure yourself. Instead of dealing with workarounds and developing platform-specific solutions for capturing meeting data, Nylas gives you a single API to send bots to meetings on Microsoft Teams, Google Meet, and Zoom. The API also includes a direct integration with AssemblyAI that Nylas manages. This means you get a single cross-platform integration that also includes transcriptions, speaker diarization, and Nylas’ native calendar API. This method is best for customer-facing applications or internal applications that need reliable, high-volume transcription retrievals. 

Pros:

  • Unified API for meeting recordings, calendar sync, and transcription access. Teams don’t have to maintain separate meeting bot infrastructure for Teams, Zoom, and Google Meet.
  • Accelerated development timeline. Transcription features can be developed in weeks instead of months. 
  • Integrated transcription processing removes need for additional service partnerships
  • Calendar automation handles meeting discovery and bot scheduling without manual intervention
  • Enterprise compliance included (SOC2, HIPPAA, GDPR) 

Cons:

  • Bot participants are visible in meeting attendee lists
  • Does not support real-time transcripts

How to use the Nylas API to get meeting transcripts from Microsoft Teams

You’ll need to have the following before you take the Nylas Notetaker for a spin:

  • A Nylas developer account with API access
  • Your Nylas API key from the dashboard
  • A Grant ID for the user whose meetings you want to record
  • A link for your Teams meeting

Create a Nylas account for free to record up to 5 hours of meetings free! Start your 14-day free trial of the Nylas Notetaker to start building in our sandbox.

Step 1

Set up your development environment with the necessary credentials.

Development environment setup

#Install the Nylas SDK
npm install nylas dotenv

# Create .env file 
echo "NYLAS_API_KEY=your_api_key_here" > .env 
echo "NYLAS_GRANT_ID=your_grant_id_here" >> .env

Import packages and initialize Nylas SDK

import Nylas from 'nylas';
import 'dotenv/config';

// Initialize the Nylas client
const nylas = new Nylas({
  apiKey: process.env.NYLAS_API_KEY,
});

const grantId = process.env.NYLAS_GRANT_ID;

 

Step 2

If you don’t already have a Grant ID, you’ll need to authenticate a user and obtain one through Nylas’s OAuth flow.

Obtain Grant ID

"41009df5-bf11-4c97-aa18-b285b5f2e386"; // Example Grant ID

 

Step 3

Send meeting bot to join and record a specific Microsoft Teams meeting’s video and audio.

Deploy a bot to get Microsoft Teams transcripts

// Create a notetaker for transcript capture from a Microsoft Teams meeting
async function createTranscriptBot(meetingLink, meetingTitle) {
  try {
    const notetaker = await nylas.notetakers.create({
      identifier: grantId,
      requestBody: {
        meetingLink, // e.g., "https://teams.microsoft.com/l/meetup-join/..."
        name: `Transcript Bot - ${meetingTitle}`,
        settings: {
          transcription: true,         // Generate transcripts
          speakerLabels: true,         // Identify who said what
          audioRecording: true,        // Record audio for backup
          videoRecording: false        // Audio-only for transcripts
        }
      }
    });
    
    console.log(`Transcript bot created with ID: ${notetaker.data.id}`);
    return notetaker.data.id;
  } catch (error) {
    console.error('Error creating transcript bot:', error);
  }
}

// Example usage
const transcriptBotId = await createTranscriptBot(
 "https://teams.microsoft.com/l/meetup-join/19%3ameeting_M2IzYzk3YTctYjg0Yi00ODE0LWFjOGQtMmQzMjkxYmZhNjdh%40thread.v2/0?context=%7b%22Tid%22%3a%2212345678-1234-1234-1234-123456789012%22%2c%22Oid%22%3a%2287654321-4321-4321-4321-210987654321%22%7d",  
  "Sales Team Weekly Sync"
);

 

or 

Use the Nylas Calendar Sync to automatically monitor your calendar and send a meeting bot to a Microsoft Teams meeting based on rules you configure.

Deploy a meeting bot with Calendar sync

// Set up automatic transcript bot deployment for future calendar meetings
async function setupAutoTranscription() {
  try {
    const calendarSync = await nylas.calendars.update({
      identifier: grantId,
      calendarId: "primary",
      requestBody: {
        // Configuration for all auto-deployed transcript bots
        notetaker: {
          name: "Meeting Transcript Bot",
          settings: {
            transcription: true,       // Generate transcripts
            speakerLabels: true,       // Identify speakers
            audioRecording: true,      // Record audio
            videoRecording: false      // Transcript-focused
          }
        }
      }
    });
    
    console.log('Auto-transcription configured:', calendarSync.data);
    return calendarSync.data.id;
  } catch (error) {
    console.error('Error setting up auto-transcription:', error);
  }
}

 

Step 4

Set up webhook handling to receive and process transcripts when they’re ready.

Receive transcript data

// Webhook notifications (recommended for real-time processing)
app.post('/webhooks/notetaker', async (req, res) => {
  const webhookData = req.body;
  
  // Check for transcript availability notification
  if (webhookData.type === 'notetaker.media' && 
      webhookData.data.object.state === 'available') {

    const { data } = webhookData;
    
    const notetakerId = data.object.id;
    const mediaUrls = data.object.media;
    
    console.log('Transcript URL:', mediaUrls.transcript);
    console.log('Recording URL (if needed):', mediaUrls.recording);
    
    // Download and process the transcript
    await processTranscript(mediaUrls.transcript, notetakerId);
  }
  
  res.status(200).send('Webhook received');
});

What you can build with Teams meeting data

Once you have reliable access to meeting transcripts and calendar integration, here are the types of applications developers are shipping:

  • CRM pipeline intelligence: Automatically extract deal stages, budget mentions, and decision-maker feedback from sales calls to update opportunity records without manual data entry.
  • Post-meeting automation: Parse transcripts for action items, commitments, and follow-up tasks to trigger email sequences, calendar events, or CRM updates immediately after calls end.
  • Interview analytics platforms: Analyze hiring conversations to track question patterns, identify interviewer bias, measure candidate experience, and generate structured feedback for hiring teams.
  • Customer success early warning systems: Monitor support calls and check-ins for sentiment shifts, feature requests, and satisfaction indicators to predict churn risk and expansion opportunities.
  • Sales coaching applications: Compare top performer call patterns against team averages to identify coaching opportunities, track improvement over time, and scale successful conversation techniques.
  • Professional services documentation: Transform client meetings into billable time entries, project status updates, and detailed case notes for legal, consulting, or advisory firms.
  • Healthcare workflow automation: Convert patient consultations into structured clinical notes, treatment plans, and follow-up scheduling for medical practices.

Choosing the right method to get transcripts from Microsoft Teams

Here’s a summary of all the different methods mentioned in this article for programmatically getting Microsoft Teams transcripts.

MethodSetup complexityCustomizationData sourcePricing model
Microsoft Graph APIHigh (Requires building around Microsoft Entra ID app registration, navigating Byzantine permission models, and restrictive permissions)Low (Structured access to transcript data with timestamps and metadata only)Microsoft Teams only
Part of Microsoft 365 subscription
Browser automationVery high (Requires headless browser infrastructure, authentication flows, DOM parsing logic, and ongoing maintenance for UI changes)High (Full control over data extraction, caption processing, and real-time capture methods)Multi-platformSelf-hosted infrastructure costs + development resources
Transcription APIsMedium (Custom data processing and vocabulary libraries) Medium (Audio capture must be developed separately)Any audio input Usage-based pricing
Nylas Notetaker API
Low (All bot infrastructure and partnerships with transcription APIs handled by Nylas.)
High (Integrate meeting bot infrastructure into existing application architecture, integrations, or custom AI models.) Zoom, Google Meet, Microsoft TeamsUsage-based pricing

When to use each method

Based on our experience building meeting recording and transcription infrastructure that works predictably and accurately on Microsoft Teams, here’s what we think:

Choose Graph APIs if you’re building internal tools for a single Teams organization and post-meeting access meets your requirements.

Avoid browser automation unless you’re experimenting or learning because the maintenance burden typically exceeds value in production.

Choose Transcription APIs when you need the highest accuracy and advanced NLP features on top of existing audio capture. But remember that you’ll need to pair it with another audio capture method, like using the Graph API or standalone meeting recording tool.

Choose Nylas when you need production-ready, cross-platform meeting intelligence without meeting bot infrastructure complexity. If you can’t commit to the higher technical development and maintenance costs of building your own meeting bot infrastructure, working with an API partner will help you stay focused on core product development.

Ready to get started?

Create a Nylas account for free to record up to 5 hours of meetings free!

Related resources

5 ways to programmatically get Google Meet transcriptions

Quick summary: This guide compares programmatic approaches to capturing Google Meet transcripts, from Google APIs…

7 ways to get Zoom meeting transcriptions

Quick summary: Most developers building meeting transcription features get stuck debugging Zoom’s inconsistent APIs and…

How to Add AI Meeting Recording with Lovable

Learn how to integrate AI meeting recording into your app using Lovable and Nylas Notetaker. Generate transcripts, summaries, and action items in minutes.