In this post, I’ll walk you through how to retrieve transcripts from Microsoft Teams using Recall.ai. You’ll learn how to use Recall.ai’s Meeting Bot API to access meeting transcripts programmatically.
I’ll also cover the different transcription options available in Recall.ai, so you can understand which option best fits your use case.
You can find the full code for this tutorial in the Microsoft Teams Transcription GitHub repository.
Watch the demo to see these capabilities in action.
Different ways to get transcripts from Microsoft Teams
There are several ways to retrieve transcripts from Microsoft Teams meetings. Some methods only support async transcription, while others support both real-time and async transcription.
Async transcription is generated and accessible once the meeting ends, while real-time transcription is generated during the meeting.
| Recall.ai’s Desktop Recording SDK | Enables developers to build desktop applications that detect and record meetings happening on a user’s computer. |
|---|---|
| Microsoft Teams’ Native Cloud Recording API | Lets you retrieve and work with Teams meeting recordings. |
| Recall.ai’s Meeting Bot API | Enables developers to create bots that can automatically join and interact with meetings across platforms like Zoom, Google Meet, Microsoft Teams, and Slack Huddles. |
Recall.ai’s Desktop Recording SDK
- Supports both real-time and async transcription
- Records without a bot in the meeting
- Provides speaker labels
- Works across all meeting platforms, including breakout rooms
- Supports in-person meeting recording
- Requires users to install a desktop application
Microsoft Teams’ Native Cloud Recording API
- Supports async transcription, no real-time transcription
- Recording must be initiated by a participant who is allowed to record (eg: an organizer or presenter) with a Microsoft 365 license and appropriate meeting policies enabled
- Transcript access limited to authorized meeting participants
- Only works on Microsoft Teams
Recall.ai’s Meeting Bot API
- Supports real-time and async transcription
- Provides speaker labels and 100% perfect speaker diarization
- Works across all meeting platforms, including breakout rooms
- Meeting bot appears in call
Perfect speaker diarization means each spoken segment is assigned to the correct participant 100% of the time by tapping into separate audio streams per speaker. Each participant’s speech is captured and labeled with their actual name (not “Speaker 1”, “Speaker 2”).
If you’re looking for a solution that is easy to set up and needs capabilities like real-time transcription, accurate speaker attribution, and reliable cross-platform support, the Meeting Bot API and Desktop Recording SDK are strong choices to get transcripts from Microsoft Teams. In this article, I’ll focus on the Meeting Bot API.
| Meeting Bot API (what I’ll be using in this article) | Microsoft Teams’ Native Cloud Recording API | Desktop Recording SDK | |
|---|---|---|---|
| Async transcription | Yes | Yes | Yes |
| Real-time transcription | Yes | No | Yes |
| 100% perfect diarization | Yes | No | No |
| Speaker labels | Yes | Yes | Yes |
| No host or participant permissions required | Yes | No | Yes |
| Works across breakout rooms | Yes | No | Yes |
| Meeting bot shows up in meeting | Yes | No | No |
| Requires user to install desktop app | No | No | Yes |
Prerequisites
For this tutorial, I am using the US West 2 region. Update the base URL to match your account’s region.
| Region | Base URL |
|---|---|
| US West 2 | us-west-2.recall.ai |
| US East 1 | us-east-1.recall.ai |
| EU | eu-central-1.recall.ai |
| Asia | ap-northeast-1.recall.ai |
Before starting, make sure you have the following:
- A Recall.ai API key (sign up for free)
- A backend server that can receive webhooks (I used ngrok for this tutorial)
- The GitHub repository contains the full code for this tutorial, so you can see the results in action.
Update .env files with the keys you need:
RECALL_API_KEY=YOUR_API_KEY
RECALL_REGION=YOUR_REGION
PUBLIC_BASE_URL=YOUR_NGROK_LINK
You need a total of three terminals running:
- In the first terminal, start your ngrok tunnel:
ngrok http 3000
- In the second terminal, install the necessary requirements:
npm install
- Then run:
node backend.js
If everything is set up correctly, you should see the message: Server is running on http://localhost:3000
Step 1: Sending a bot to a teams meeting
If you see the success message, you’re ready to send a bot to your Microsoft Teams meeting to record and transcribe the meeting.
Start a Microsoft Teams meeting, copy the meeting link, and paste it into the cURL command you’ll run to send the bot into the meeting.
curl -X POST http://localhost:3000/bots/realtime \
-H "Content-Type: application/json" \
-d '{
"meetingUrl": "TEAMS_MEETING_URL_HERE",
"botName": "My Bot"
}'
Wait a few seconds, and you should see a bot requesting to enter the meeting.
Step 2: Retrieving transcript using async transcription
To set up async transcription, you’ll first need to configure your webhook endpoints. Then subscribe to the recording.done and transcript.done events.
Recall.ai uses webhooks to notify your server when certain events happen. You can configure which events to subscribe to in the Recall.ai dashboard.
![][images/webhooks.gif]
Async transcription begins when the meeting ends. Recall.ai signals this by sending a recording.done webhook event, which indicates that the recording has been successfully uploaded and all meeting data is available for retrieval.
This event includes the recordingId, which your server uses to call the create_transcript endpoint to start generating the transcript.
const transcriptJob = await recallRequest(
`/recording/${recordingId}/create_transcript/`,
{
method: "POST",
body: JSON.stringify({
provider: {
recallai_async: {
language_code: "en"
}
}
})
}
);
When transcription is complete, Recall.ai sends a transcript.done webhook event. This event includes the transcriptId, which your server uses to call the transcript endpoint and retrieve the finished transcript.
const transcript = await recallRequest(`/transcript/${transcriptId}/`, {
method: "GET"
});
The endpoint returns a transcript URL that you can use to retrieve the transcript.
Step 3: Retrieving transcript using real-time transcription
Async transcription delivers results via status-change webhooks because it’s a post-processing job (you’re notified when the transcript is ready), whereas real-time transcription uses real-time webhook endpoints to stream transcript data live during the call.
To set up real-time transcription, update the cURL command you use to create the bot by configuring a webhook endpoint for real-time transcript events. Include the transcript.data and transcript.partial_data events, set the language to English, and use prioritize_low_latency mode.
curl --request POST \
--url "https://RECALL_REGION.recall.ai/api/v1/bot/" \
--header "Authorization: Token RECALL_API_KEY" \
--header "accept: application/json" \
--header "content-type: application/json" \
--data '
{
"meeting_url": "YOUR_TEAMS_MEETING_LINK",
"recording_config": {
"transcript": {
"provider": {
"recallai_streaming": {
"mode": "prioritize_low_latency",
"language_code": "en"
}
},
"diarization": {
"use_separate_streams_when_available": true
}
},
"realtime_endpoints": [
{
"type": "webhook",
"url": "YOUR_NGROK_LINK/webhook/recall/transcript",
"events": ["transcript.data", "transcript.partial_data"]
}
]
}
}'
This setup allows you to see the meeting being transcribed in real time in your backend.
By default, Recall.ai provides built-in transcription that supports multiple languages and word-level timestamps. This allows you to get started without integrating a separate transcription provider.
Conclusion
In this tutorial, I went over how to get real-time and async transcripts from a Microsoft Teams meeting using Recall.ai’s Meeting Bot API. We also explored both real-time and async transcription options.
To summarize, here are the reasons for using the Meeting Bot API to receive transcripts from a Microsoft Teams meeting:
- Users are not required to install an app
- Works in breakout rooms and across all meeting types
- Does not require the user to be the meeting host or have special permissions to generate transcripts
- Supports both real-time and async transcription, with speaker labels and 100% perfect diarization
You can sign up for a free Recall.ai account to try sending a meeting bot and retrieving transcripts in your own meetings. If you’re looking to use Recall.ai at scale, you can book a demo with the team.

.png)