Pricing Dashboard Sign up
Recent
· 10 min read · MDisBetter

How to Transcribe a Zoom Meeting for Free (Without Otter)

Zoom's built-in transcription is hidden behind paid plans. Otter is the de facto third-party meeting bot, also paid past a generous free tier. For teams and individuals who want to transcribe their Zoom recordings without paying, the workflow is straightforward: download the recording, run it through a free transcription tool. Here are the methods that work, with honest comparison to the paid alternatives.

What Zoom does and doesn't include for free

Zoom's transcription features in 2026 are split across plans:

For a free Zoom user, or anyone on a basic Pro plan without the AI Companion add-on, transcription is something you handle yourself after the meeting. The good news: this is straightforward and the result is usually better than Zoom's built-in transcript anyway.

Step 1: Record the meeting locally

On the free Zoom plan, the only recording option is local recording (the file saves to your computer's hard drive at the end of the meeting).

  1. Start the Zoom meeting as host.
  2. Click Record in the meeting toolbar → choose Record on this Computer.
  3. Run the meeting normally. Zoom shows a recording indicator to all participants.
  4. End the meeting. Zoom processes the recording: this takes 10-30% of the meeting duration (a 60-min meeting takes 6-18 min to process).
  5. Zoom opens a folder containing the meeting files: zoom_0.mp4 (full video), audio_only.m4a (audio track), and a chat log if there was meeting chat.

For non-host participants on the free plan, recording requires the host's permission and is granted/revoked through the meeting controls. If you are a participant and need a recording, ask the host to either record locally and share, or to grant you recording permission during the meeting.

Consent

Zoom's recording indicator notifies all participants visually and audibly. Many jurisdictions require all-party consent for recording. The polite + safe practice: announce at the start of the meeting that you are recording and ask if anyone objects. Most people are fine with it. Respect any "please don't record this part" requests.

Step 2: Transcribe the recording

You have the zoom_0.mp4 (or audio_only.m4a) file. Three free options for converting to a transcript.

Option A: mdisbetter (recommended for a Markdown transcript)

  1. Open /convert/video-to-markdown.
  2. Click upload, select the Zoom MP4 (or M4A; both work).
  3. Click Convert.
  4. Wait while the recording is processed (a longer meeting takes longer).
  5. Download the Markdown transcript, or the .srt and .vtt subtitle files.

What you get: the meeting split into segments of speech, each starting with a timestamp in square brackets such as [01:12], with real punctuation. There is no title, no section headings, no summary, no action items and no speaker identification: the transcript is timestamped text, not labelled turns. The timestamps let you jump back to any moment in the recording, and the text is ready to paste into an AI assistant as it is.

Option B: Local Whisper (best for sensitive meetings)

For client calls under NDA, internal HR conversations, legal discussions; anything you cannot route through a cloud service:

# Install
pip install -U faster-whisper

from faster_whisper import WhisperModel

# Use the audio_only.m4a if available — smaller file, same content
model = WhisperModel("large-v3", device="cuda", compute_type="float16")
segments, info = model.transcribe(
    "audio_only.m4a",
    beam_size=5,
    vad_filter=True,
)

with open("meeting.md", "w") as f:
    for s in segments:
        f.write(f"[{s.start:.0f}s] {s.text.strip()}\n\n")

For speaker diarization (who said what), add WhisperX:

pip install whisperx

import whisperx
model = whisperx.load_model("large-v3", device="cuda")
audio = whisperx.load_audio("audio_only.m4a")
result = model.transcribe(audio, batch_size=16)

# Diarize
diarize_model = whisperx.DiarizationPipeline(
    use_auth_token=HF_TOKEN, device="cuda"
)
diarize_segments = diarize_model(audio)
result = whisperx.assign_word_speakers(diarize_segments, result)

What you get: Total privacy (nothing leaves your machine), highest available accuracy, full control. You will need to write a small post-processing step to convert the WhisperX output into structured Markdown if you want H2 sections: Whisper's native output is plain text + timestamps.

Option C: Other free web tools

TurboScribe (3 files/day, 30 min each on free), Otter (300 min/month, 30-min per-file cap), VOMO, NoteGPT all accept Zoom audio/video uploads. Each has its own free-tier limits and output format. For meeting transcription specifically, Otter's strong diarization is notable; the cap on per-file length and free monthly minutes is the limiting factor for hour-long calls. We cover all the free options at how to transcribe a video for free.

Step 3: Run the 5-minute extraction pass

Once you have the Markdown transcript, immediately do a focused 5-minute pass to pull out three things. These sections are yours to write, by hand or with an LLM prompt over the transcript; the transcript itself contains none of them.

1. Decisions

## Decisions
- **Punt feature Y to Q4** so engineering can focus on X. (Owner: Tom)
- **Hold mid-tier pricing at $49** despite Priya's concern; revisit in 60 days based on conversion data. (Owner: Sarah)

2. Action items

## Action items
- [ ] Tom: updated Q3 timeline by Friday
- [ ] Priya: pull conversion data on mid-tier for next planning
- [ ] Sarah: send out the Q3 commitment to the team Monday

3. Open questions

## Open questions
- Whether to communicate the Y→Q4 punt to the customer who asked
- Long-term direction on the mid-tier (raise, hold, restructure)

Total time: 4-7 minutes on a 47-min meeting transcript. Output: a permanent, scannable, queryable record of the meeting that anyone on the team can read in 60-90 seconds. The full pattern is in nobody rewatches meeting recordings.

Comparing free workarounds with Otter

The honest tradeoff analysis:

AspectSelf-record + mdisbetterSelf-record + local WhisperOtter live bot (free tier)
CostFree (cap on minutes)Free (unlimited)Free up to 300 min/mo
SetupFree accountPython + GPUOtter signup + calendar integration
In-meeting frictionNone (you record)None (you record)Bot joins call (consent dynamics)
Per-file capGenerousUnlimited30 min on free tier (brutal)
Output structureMarkdown + timestampsPlain text + timestampsPlain text + speakers
PrivacyCloud (mdisbetter)Local onlyCloud (Otter)
Live captions during meetingNoNoYes

Otter is the right pick if you specifically want live captions during the meeting and you can live with the 30-min per-file cap on free tier. The self-record-and-transcribe-after workflow is the right pick for everything else: Markdown output, no bot consent dynamics, full control over the recording.

What about Zoom AI Companion?

For Zoom Business plans and up, AI Companion provides automated meeting summaries, post-meeting transcripts, and a chat interface for asking questions about past meetings. The summaries are reasonable; the underlying transcripts are equivalent to what you would get from any modern ASR. The advantage: zero workflow; it just happens.

The disadvantages: paid (factors into the per-user Zoom subscription cost), cloud-locked (transcripts live in Zoom's system, not in your knowledge base), and the Markdown output most teams want for AI-pipeline integration is not a native format. For teams already paying for Zoom Business, AI Companion is convenient. For everyone else, the self-record-and-convert workflow is honestly competitive.

For recurring meetings: automate the workflow

If you have weekly standups, monthly all-hands, or other recurring meetings you record consistently, build the transcribe-and-extract workflow into a routine:

  1. Record meeting (Zoom local recording).
  2. Drag the resulting MP4 into a designated folder on your machine.
  3. Upload the file to mdisbetter in the browser, or run a local Whisper script over the folder, and save the Markdown to your team's meeting notes folder. mdisbetter has no API, so only the local route can run as an unattended script.
  4. Open the Markdown, do the 5-minute extraction pass, push action items to the task system.

The total cycle time is < 15 minutes per meeting after the meeting itself. Across a team of 20 with 5-10 meetings per week, the cumulative cost is a couple of hours per week, and the cumulative benefit is a permanent, searchable archive of every meeting your team has had. We cover the search-across-many-recordings pattern at you can't search inside videos.

Privacy escalation: what to do for sensitive meetings

Three tiers of sensitivity, three appropriate transcription approaches:

The bigger picture

The pattern across all these methods: stop trying to do transcription "during" the meeting. Record the meeting (you would anyway), then convert it to a Markdown transcript after. The post-meeting workflow is faster, more accurate, more flexible on privacy, and produces better artifacts than any in-meeting bot or live transcription feature. For the meeting-culture implications of treating recordings as searchable artifacts, see why your meeting notes are always incomplete.

Compatibility notes for non-Zoom meeting platforms

The same workflow applies almost identically to recordings from other platforms:

The video-to-markdown pipeline does not care which platform produced the recording: it processes the audio track from any video or audio file. For teams using a mix of meeting platforms, this is what makes the workflow durable: one transcription pipeline, every meeting source.

Check Otter Basic limits: 300 monthly minutes, 30 minutes per transcript and three lifetime file imports.

Frequently asked questions

Can I transcribe a Zoom recording I joined as a participant, not as the host?
Only if the host shared the recording with you (cloud recording link, downloaded MP4 they sent you, etc.) or if the host gave you recording permission during the meeting and you recorded locally yourself. Without one of those, you do not have the recording to transcribe. The host's recording is the canonical source.
How do I handle a meeting where multiple people talked over each other?
Cross-talk hurts word accuracy on any engine: expect 75-85% on the overlapped moments versus the typical 95+. Note that mdisbetter does not separate speakers at all, so overlapping speech simply comes back in the same timestamped segments as everything else, and you will not see who said what. If you need speakers separated, run a diarisation pipeline (WhisperX or pyannote.audio) or use a tool like Otter. For meetings with constant cross-talk (heated debates, large group discussions), the transcript will have rougher patches there; everywhere else it will be clean.
What about transcribing a Zoom meeting in real time so the transcript is ready when the meeting ends?
For real-time transcription you need a live tool that joins the call (Otter Pilot, Fireflies, Zoom AI Companion). The post-meeting transcribe-from-recording workflow we describe here adds a processing wait after the meeting ends instead of being instant. For most use cases the wait is worth the accuracy and the lack of in-meeting bot friction. For use cases where instant transcript matters (live notes for absent stakeholders, accessibility), use a live tool.