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.


source

get_zoom_token

 get_zoom_token ()

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.


source

list_recordings

 list_recordings (days:int=45)

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.


source

download_transcript

 download_transcript (meeting_id:str, token:str)

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.


source

make_filename

 make_filename (meeting:dict)

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


source

main

 main (meeting_id:str=<typer.models.ArgumentInfo object at
       0x7fbc14cf8580>, search:str=<typer.models.OptionInfo object at
       0x7fbc14cf85b0>, days:int=<typer.models.OptionInfo object at
       0x7fbc14cf8610>, output:pathlib.Path=<typer.models.OptionInfo
       object at 0x7fbc14cf8c10>)

*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*