How to Record a Microsoft Teams Meeting: Complete Guide
Recording a Teams meeting sounds simple. Then you discover it requires a Microsoft 365 license, admin permissions to enable the feature at the tenant level, a OneDrive or SharePoint destination configured for storage, and someone present with organizer or co-organizer role to actually start the recording. And after all that, you still don't have a way to get the transcript into your own application via an API call.
For individual knowledge workers saving a call to review later, the native path works fine once it's set up. For developers building applications that need to record Microsoft Teams meetings programmatically, process transcripts automatically, or record meetings across multiple tenants they don't control, the native path is not the right tool.
This guide covers both approaches: native Teams recording for standard workplace use, and the MeetStream bot API for programmatic recording with automatic transcription and webhook delivery. Unlike Zoom, Teams requires no App Marketplace approval to use with MeetStream, which significantly simplifies the integration.
In this guide, we'll cover how native Teams recording and transcription work, what the Microsoft 365 requirements actually are, how to deploy a recording bot via API, and how to get transcripts out of the system reliably. Let's get into it.
How native Teams recording works
Microsoft Teams recording is built into the platform for enterprise users, but it comes with a set of requirements that catch many teams off guard.
Microsoft 365 license requirements: recording requires Microsoft 365 Business Basic, Standard, or Premium, or an equivalent enterprise plan. The specific plan requirement affects where recordings are stored. Microsoft 365 Business Basic stores recordings in OneDrive for Business. Enterprise plans can also store in SharePoint. Personal Microsoft accounts and Teams Free accounts do not support recording.
Beyond the license, a tenant admin must explicitly enable recording in the Teams admin center under Meeting policies. By default, recording may be disabled depending on your organization's policy configuration. This is often the first surprise for someone trying to record a Teams meeting for the first time.
To start a recording, the meeting organizer or co-organizer clicks the three-dot menu during the call and selects "Start recording." This also starts live transcription if the tenant has it enabled. Only one recording can be active per meeting. All participants are notified when recording starts, and the recording indicator appears in the meeting toolbar.

When the meeting ends, the recording uploads to OneDrive or SharePoint automatically. Participants receive an email notification with a link. The recording is stored as an MP4 file. Transcripts are stored separately as VTT files alongside the recording.
Native Teams recording limitations for developers
The Microsoft Graph API provides access to Teams meeting artifacts, but it comes with significant constraints. Accessing recordings and transcripts via Graph requires OnlineMeetingRecording.Read.All and OnlineMeetingTranscript.Read.All permissions, both requiring admin consent in Azure Active Directory (AAD). This means you need cooperation from the IT admin of every tenant you want to pull recordings from.
For an internal tool where you control the Microsoft 365 tenant, this is a one-time setup. For a product where customers bring their own Teams environments, you're asking every customer's IT admin to grant your application admin-level permissions in their Azure AD. Many enterprise IT teams will not do this, or the approval process takes weeks.
The Graph API also requires that recordings be enabled and actually recorded by a participant during the meeting. There's no way to inject recording after the fact, and no way to record a meeting you're not a member of.
Recording Teams meetings via the MeetStream API
MeetStream's Teams integration uses a bot participant approach. The bot joins the Teams meeting as an attendee, captures audio and video from inside the call, and delivers recordings and transcripts via webhook. No admin consent required in the customer's tenant. No Microsoft 365 license dependency.
The setup for Microsoft Teams with MeetStream is the same as Google Meet: no App Marketplace approval needed. You pass the Teams meeting URL to the API and the bot joins. Here's a complete example:
curl -X POST https://api.meetstream.ai/api/v1/bots/create_bot \
-H "Authorization: Token YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"meeting_link": "https://teams.microsoft.com/l/meetup-join/...",
"bot_name": "Meeting Recorder",
"callback_url": "https://yourapp.com/webhooks/meetstream",
"video_required": true,
"live_transcription_required": {
"webhook_url": "https://yourapp.com/webhooks/transcription"
},
"recording_config": {
"transcript": {
"provider": {
"name": "assemblyai"
}
},
"retention": {
"type": "timed",
"hours": 72
}
},
"automatic_leave": {
"waiting_room_timeout": 300,
"everyone_left_timeout": 30,
"voice_inactivity_timeout": 900
}
}'Teams is notable because it supports both post-call transcription via recording_config and real-time streaming transcription via live_transcription_required. You can use both simultaneously. The real-time transcription sends segments to your webhook as the conversation happens, useful for live meeting intelligence features. The post-call transcription via AssemblyAI or Deepgram typically produces more accurate results for the final transcript.
Live transcription streaming for Teams
Real-time transcription via live_transcription_required delivers speaker-attributed transcript segments as the meeting progresses. Each segment arrives at your webhook URL with the speaker name, text, and timestamp.

To use streaming transcription instead of (or alongside) post-call transcription, specify a provider in recording_config.transcript.provider that supports streaming. deepgram_streaming and assemblyai_streaming are the two streaming providers. These deliver incremental segments with lower latency than post-call processing, at the cost of some accuracy on words at the boundaries of segments.
// Real-time transcription webhook payload example
{
"event": "transcription.segment",
"bot_id": "bot_abc123",
"speaker_name": "Sarah Chen",
"speaker_id": "participant_456",
"text": "We should push the API launch to next Friday.",
"start_ms": 148230,
"end_ms": 151440,
"timestamp": "2026-04-02T15:22:34Z"
}This event structure makes it straightforward to build a live transcript display, action item detector, or meeting coach that responds to what's being said in real time.
The Teams webhook lifecycle
Teams meetings follow the same webhook event sequence as other platforms. bot.joining fires when the bot enters the lobby, bot.inmeeting when it's admitted, bot.stopped when the meeting ends, followed by the asynchronous processing events.
Teams-specific behavior to be aware of: Teams meetings often have a lobby where participants wait for the organizer to admit them. If the meeting has "Who can bypass the lobby" set to "Only organizers and co-organizers," the bot will wait in the lobby until someone admits it. Configure waiting_room_timeout appropriately. Setting it to 300 seconds (five minutes) is a reasonable default for most cases.
If the organizer hasn't joined yet, the bot will wait in the lobby along with other participants. Once the organizer joins and admits participants, the bot enters and begins recording. The bot.inmeeting event fires at this point, not when create_bot is called.
Tradeoffs and limitations
The bot joins as a visible participant. In Teams, it appears in the participants panel with the name set in bot_name. For most business recording use cases, this is expected behavior. Make sure your use case complies with applicable consent and notification laws. Teams itself notifies all participants when native recording starts; using a bot participant as your recording mechanism means you're responsible for your own disclosure practices.
Teams sometimes changes the meeting URL format or adds lobby restrictions without notice. If you're generating meeting links programmatically, test bot joining against your specific Teams configuration. Meetings created via the Graph API with specific lobby settings may behave differently from meetings created through the Teams client.

For the longest meetings (three hours or more), set in_call_recording_timeout in automatic_leave as a safety valve. Without it, a bot will stay in a meeting indefinitely if the meeting somehow doesn't end cleanly.
How MeetStream fits in
MeetStream provides Teams recording via the same API used for Google Meet and Zoom. No Teams-specific credential setup, no admin consent requirements in the target tenant, and no App Marketplace approval process. If you're building a product that handles meetings across platforms, the unified API surface means your Teams integration looks identical to your Meet and Zoom integration, which simplifies both your code and your testing matrix.
Conclusion
Native Teams recording requires Microsoft 365 licensing, admin policy configuration, and a participant to manually start the recording. For programmatic recording of Microsoft Teams meetings, a bot API approach removes most of those dependencies. The MeetStream API requires no Teams-specific setup beyond passing the meeting URL, supports both real-time and post-call transcription, and delivers all artifacts via webhook. Teams and Google Meet share the same no-extra-setup characteristic, making them the fastest platforms to integrate compared to Zoom's Marketplace requirement.
Get started free at meetstream.ai or see the full API reference at docs.meetstream.ai.
Frequently Asked Questions
What Microsoft 365 license do I need to record a Microsoft Teams meeting?
Microsoft Teams recording requires at minimum a Microsoft 365 Business Basic plan. Free Teams accounts and personal Microsoft accounts cannot record meetings. Additionally, your tenant admin must enable recording in the Teams admin center under Meeting policies. Using a bot API approach via MeetStream bypasses these license requirements since the bot handles recording independently of the Teams recording feature.
How do I record a Teams meeting without admin permissions?
Without admin permissions in your Microsoft 365 tenant, you cannot enable native Teams recording. The alternative is to use a recording bot that joins the meeting as a participant. MeetStream's bot joins any Teams meeting URL and records without requiring admin consent or tenant-level permissions. The bot appears as a participant in the meeting.
Can I get a Teams meeting transcript via API?
Microsoft's Graph API provides access to Teams transcripts but requires admin-level Azure Active Directory permissions and the recording must be done natively within Teams. The MeetStream API provides transcripts via a simpler path: deploy a bot, receive a transcription.processed webhook, and call GET /transcript/{id}/get_transcript. No admin consent required in the Teams tenant.
Does Microsoft Teams support real-time transcription via API?
Teams has built-in live captions but they're not accessible via API. For real-time transcript streaming in your application, the MeetStream bot's live_transcription_required parameter streams speaker-attributed transcript segments to your webhook in real time using Deepgram Streaming or AssemblyAI Streaming providers. This enables live meeting intelligence features without Microsoft API access.
Is the Teams recording bot the same as Zoom and Google Meet bots?
The API request structure is identical across all three platforms. You pass a meeting URL (Teams, Zoom, or Meet), the same parameters, and the same webhook events fire in the same sequence. Teams and Google Meet require no additional platform setup with MeetStream; Zoom requires a one-time integration configuration. This unified interface is useful when building products that handle multi-platform meeting recording.
