# Test authentication (requires env vars set)
_token = get_zoom_token()
assert isinstance(_token, str) and len(_token) > 0zoom
This notebook provides utilities for downloading Zoom meeting transcripts:
- Authentication: Server-to-Server OAuth with Zoom API
- List recordings: Search recent meetings with recordings
- Download transcripts: Fetch VTT transcript files
- Batch operations: Download multiple transcripts in parallel
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
get_zoom_token ()
Get Zoom access token using Server-to-Server OAuth.
List Recordings
Search for meetings with recordings from the last N days. The API returns paginated results, so we fetch all pages.
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.
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.
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
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*