zoom

Download Zoom meeting transcripts via Server-to-Server OAuth

This notebook provides utilities for downloading Zoom meeting transcripts:

Key functions: - get_zoom_token(): Authenticate with Zoom using OAuth credentials - list_recordings(): List meetings with recordings from recent days - download_transcript(): Download transcript for a specific meeting - make_filename(): Generate safe filenames for transcripts

Authentication

Zoom’s Server-to-Server OAuth requires three credentials: - ZOOM_CLIENT_ID - Your app’s client ID - ZOOM_CLIENT_SECRET - Your app’s client secret - ZOOM_ACCOUNT_ID - Your Zoom account ID

Set these as environment variables or in a .env file.


get_zoom_token


def get_zoom_token(
    
)->str:

Get Zoom access token using Server-to-Server OAuth.

# Test authentication (requires env vars set)
_token = get_zoom_token()
assert isinstance(_token, str) and len(_token) > 0

List Recordings

Search for meetings with recordings from the last N days. The API returns paginated results, so we fetch all pages.


list_recordings


def list_recordings(
    days:int=45
)->list:

List meetings with recordings from the last N days.

# Test listing recordings
_meetings = list_recordings(days=45)
[m['topic'] for m in meetings][:2]
["Hamel Husain's Personal Meeting Room", 'Jason and Hamel Husain']

Download Transcripts

Download the VTT transcript file for a specific meeting. Returns None if no transcript is available.


download_transcript


def download_transcript(
    meeting_id:str, token:str
)->str | None:

Download transcript for a meeting ID.

# Test downloading a transcript
transcript = download_transcript(str(_meetings[1]['id']), _token)
len(transcript), transcript[:10]
(36933, 'WEBVTT\r\n\r\n')

Filename Generation

Generate safe, readable filenames for downloaded transcripts combining date, topic, and meeting ID.


make_filename


def make_filename(
    meeting:dict
)->str:

Generate safe filename for a meeting transcript.

Here is how it works

[make_filename(m) for m in _meetings[:3]]
['2025-11-07-Hamel-Husains-Personal-Meeting-Room-2878882507.vtt',
 '2025-11-06-Jason-and-Hamel-Husain-81703724721.vtt',
 '2025-11-06-Jason-and-Hamel-Husain-81703724721.vtt']

CLI Interface

Command-line interface for downloading Zoom transcripts with multiple modes: - Direct download by meeting ID - Search and select meetings interactively - Batch download all matching meetings


main


def main(
    meeting_id:str=<typer.models.ArgumentInfo object at 0x7f008af22de0>,
    search:str=<typer.models.OptionInfo object at 0x7f008af206e0>,
    days:int=<typer.models.OptionInfo object at 0x7f008af22fc0>,
    output:Path=<typer.models.OptionInfo object at 0x7f008af22f30>
):

Download Zoom meeting transcripts.

Examples: zoom.py 123456789 # Print to stdout (pipe to other tools) zoom.py 123456789 -o file.vtt # Download to file zoom.py -s “Jason” # Search, select one or ‘a’ for all zoom.py -s “” # List all meetings