> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://docs.meetstream.ai/guides/transcription-recordings/diarization/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.meetstream.ai/_mcp/server. # Diarization Explained > How speaker attribution works across Zoom, Google Meet and Microsoft Teams, what each platform can isolate, and how providers label each speaker. "Diarization" answers one question: **who said what?** MeetStream gives you two independent layers of it — pick per use case, or combine them. ## Layer 1: platform-level stream capture The bot captures speaker-attributed audio directly from the meeting platform. Isolation quality depends on what each platform exposes: | Platform | Isolation | How | | --------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | | Zoom | **Full** — each file contains only that speaker's microphone | Zoom SDK provides a dedicated raw PCM stream per participant | | Google Meet | Partial — speaker-attributed capture | Up to 3 concurrent speaker streams via WebRTC CSRC demuxing | | Microsoft Teams | Partial — speaker-attributed capture | Browser-bot stream capture, same model as Meet | This layer powers [per-participant audio files](/guides/transcription-recordings/per-participant-audio), the [speaker timeline](/guides/features/participants-and-speaker-timeline) (byte-level who-spoke-when), and the speaker-tagged frames of [real-time audio streaming](/guides/websockets/real-time-audio-streaming) — attribution comes from the platform's own identity, not from acoustic guessing. ## Layer 2: provider diarization in transcripts Post-call transcription providers run their own diarization on the mixed recording and label the transcript: | Provider | Diarization control | Default | | --------------------------------------------------------------------- | ------------------- | ------- | | [Deepgram](/guides/transcription-recordings/providers/deepgram) | `diarize` | on | | [AssemblyAI](/guides/transcription-recordings/providers/assemblyai) | `speaker_labels` | on | | [Sarvam](/guides/transcription-recordings/providers/sarvam) | `with_diarization` | on | | [JigsawStack](/guides/transcription-recordings/providers/jigsawstack) | `by_speaker` | on | Formatted transcripts return segments as `{speaker, transcript, start_time, end_time, words[]}` with **per-word speaker attribution and confidence**. ## Which layer should I use? * **Building voice AI / real-time coaching** → platform layer: live speaker-tagged frames, no transcription latency. * **Readable meeting notes** → provider layer: diarized transcripts out of the box. * **Compliance-grade attribution** → combine: the speaker timeline's platform IDs are ground truth; use them to verify or correct provider labels. * **Cleanest per-speaker audio** → Zoom, where isolation is at the SDK level. > Meeting bot API documentation for Zoom, Google Meet and Microsoft Teams: create bots, stream real-time audio, transcribe, and run in-meeting voice agents.