Zoom Recording Downloader is a cross-platform Python script that uses Zoom's API (v2) to download and organize all cloud recordings from a Zoom account onto local storage.
Attention: You will need Python 3.6 or greater
$ git clone https://github.com/ricardorodrigues-ca/zoom-recording-downloader
$ cd zoom-recording-downloader
$ pip3 install -r requirements.txt
Attention: You will need a Zoom Developer account in order to create a Server-to-Server OAuth app with the required credentials
-
Create a server-to-server OAuth app, set up your app and collect your credentials (
Account ID
,Client ID
,Client Secret
). For questions on this, reference the docs on creating a server-to-server app. Make sure you activate the app. Follow Zoom's set up documentation or this video for a more complete walk through. -
Add the necessary scopes to your app. In your app's Scopes tab, add the following scopes:
account:master
,account:read:admin
,account:write:admin
,information_barriers:read:admin
,information_barriers:read:master
,information_barriers:write:admin
,information_barriers:write:master
,meeting:master
,meeting:read:admin
,meeting:read:admin:sip_dialing
,meeting:write:admin
,meeting_token:read:admin:live_streaming
,meeting_token:read:admin:local_archiving
,meeting_token:read:admin:local_recording
,recording:master
,recording:read:admin
,recording:write:admin
,user:master
,user:read:admin
,user:write:admin
. -
Copy zoom-recording-downloader.conf.template to a new file named zoom-recording-downloader.conf and fill in your Server-to-Server OAuth app credentials:
{
"OAuth": {
"account_id": "<ACCOUNT_ID>",
"client_id": "<CLIENT_ID>",
"client_secret": "<CLIENT_SECRET>"
}
}
- You can optionally add other options to the configuration file:
- Specify the base download_dir under which the recordings will be downloaded (default is 'downloads')
- Specify the completed_log log file that will store the ID's of downloaded recordings (default is 'completed-downloads.log')
{
"Storage": {
"download_dir": "downloads",
"completed_log": "completed-downloads.log"
}
}
- Specify the start_date from which to start downloading meetings (default is Jan 1 of this year)
- Specify the end_date at which to stop downloading meetings (default is today)
- Dates are specified as YYYY-MM-DD
{
"Recordings": {
"start_date": "2023-01-01",
"end_date": "2023-12-31"
}
}
- If you don't specify the start_date you can specify the year, month, and day seperately
- Specify the day of the month to start as start_day (default is 1)
- Specify the month to start as start_month (default is 1)
- Specify the year to start as start_year (default is this year)
{
"Recordings": {
"start_year": "2023",
"start_month": "1",
"start_day": "1"
}
}
- Specify the timezone for the saved meeting times saved in the filenames (default is 'UTC')
- You can use any timezone supported by ZoneInfo
- Specify the time format for the saved meeting times in the filenames (default is '%Y.%m.%d - %I.%M %p UTC')
- You can use any of the strftime format codes supported by datetime
{
"Recordings": {
"timezone": "America/Vancouver",
"strftime": "%Y.%m.%d-%H.%M%z"
}
}
- Specify the format for the filenames of saved meetings (default is '{meeting_time} - {topic} - {rec_type} - {recording_id}.{file_extension}')
- Specify the format for the folder name (under the download folder) for saved meetings (default is '{topic} - {meeting_time}')
{
"Recordings": {
"filename": "{meeting_time}-{topic}-{rec_type}-{recording_id}.{file_extension}",
"folder": "{year}/{month}/{meeting_time}-{topic}"
}
}
For the previous formats you can use the following values
- {file_extension} is the lowercase version of the file extension
- {meeting_time} is the time in the format of strftime and timezone
- {day} is the day from meeting_time
- {month} is the month from meeting_time
- {year} is the year from meeting_time
- {recording_id} is the recording id from zoom
- {rec_type} is the type of the recording
- {topic} is the title of the zoom meeting
- Run command:
$ python3 zoom-recording-downloader.py