Archive last night's Zoom cloud recordings to Google Drive

Every night we move yesterday's Zoom recordings into dated Drive folders, log every file in a spreadsheet, and recap the whole sweep in Slack.

Deterministic Code
ZoomGoogle DriveGoogle SheetsSlack BotOperationsData SyncNotifications & AlertsMeeting Workflows
PromptCreate

Every night at 1:15am, sweep the previous day's Zoom cloud recordings into Google Drive so we stop hitting our Zoom storage cap. This runs on a cron trigger and should be fully deterministic: no summarizing and no judgement calls, just a reliable archive with an audit trail.

Start by using Zoom's List Users operation to walk every host on the account, filtering to active licensed users. For each host, call List Meetings with the previous meetings filter and keep only the sessions that ended in the last 24 hours. For each of those meetings, call List Meeting Recordings to pull the individual recording files. Zoom's List User Recordings operation accepts a date range and is an acceptable shortcut if it produces the same set of files more efficiently, but the per host walk is the baseline behavior.

Skip any recording shorter than two minutes, measured from the recording start and end timestamps. Those are almost always accidental, where someone started a meeting and immediately ended it. Make the threshold a configurable input that defaults to two minutes.

For each recording that passes the filter, build a Google Drive folder path of year, then month, then host name. Before creating anything, use Google Drive's List Files operation with Drive query syntax to check whether the folder already exists at that level, matching on folder mime type, exact name, and parent folder. Only call Create Folder when the lookup finds nothing, and reuse the returned folder id as the parent for the next level down. Folders must never be duplicated across nightly runs.

Upload both the video file and the transcript for each meeting using Google Drive's Upload File (Resumable) operation. Use the resumable upload, not a multipart upload: multipart caps out at 5MB and Zoom recordings routinely run to hundreds of megabytes. Initiate the upload to get the upload URL, then send the content in chunks that are multiples of 256KB. Fetching the file from Zoom requires appending the Zoom access token to the recording download URL. Treat an upload as successful only when Drive returns a completed file with an id.

For every file uploaded, append a row to a Google Sheets archive index using the Append Values operation. Each row should carry the meeting topic, the host name, the meeting date, the duration, the file size, the file type (video or transcript), and the Drive link to the uploaded file. One row per file, not per meeting, so a meeting with a video and a transcript produces two rows.

When the sweep finishes, post a single Slack message with the Slack Bot Send a Message operation to a configurable channel. Summarize how many recordings were archived, the total gigabytes moved, and an explicit list of any files that failed to upload, named so someone can act on them. One message per run, not one per recording.

Deleting the originals from Zoom with the Delete Meeting Recordings operation must be an option that is switched off by default. This step is destructive, so it may only ever run for a file whose Drive upload was confirmed successful in this same run. If an upload failed, was skipped, or is in any uncertain state, leave the Zoom original completely untouched. Never delete based on the assumption that a previous night's run archived the file.

Handle failures per file rather than aborting the whole sweep: if one recording fails to download or upload, record it as a failure, leave its Zoom original in place, and carry on with the rest. Account wide host enumeration needs an admin level Zoom credential. If only a personal Zoom credential is connected, fall back to archiving just that single host's recordings rather than failing outright. Honor Zoom's rate limits and pagination when walking users, meetings, and recordings.

What does this prompt do?

  • Every night, collects the previous day's Zoom cloud recordings from every licensed host on your account.
  • Files each video and transcript in Google Drive under a year, month, and host name folder, creating the folders automatically if they do not exist yet.
  • Adds a row to a Google Sheets archive index for every file with the meeting topic, host, date, duration, file size, file type, and a link straight to it in Drive.
  • Posts one Slack message when the sweep finishes with how many recordings were archived, how many gigabytes moved, and anything that failed to upload.

What do I need to use this?

  • A Zoom account on a paid plan with cloud recording turned on
  • Zoom admin access if you want to sweep every host on the account. A personal Zoom login works fine if you only need your own recordings
  • A Google account with Drive and Sheets, plus a spreadsheet to use as the archive index
  • A Slack workspace and a channel where the nightly summary should land

How can I customize it?

  • Change when the sweep runs and how far back it looks. The default is 1:15am covering the previous 24 hours.
  • Adjust the two minute minimum so very short clips are either kept or filtered out more aggressively.
  • Change the folder naming, pick which Slack channel gets the summary, and decide whether to switch on the optional cleanup of originals in Zoom once you trust the archive.

FAQs

Will this delete my recordings from Zoom?
Not unless you explicitly turn that on. Removing the originals is an option that is switched off by default. When you do enable it, a recording is only ever removed after its upload to Drive has been confirmed successful, so a failed upload can never cause data loss.
Do I need to be a Zoom admin?
Only if you want to cover every host on the account. Walking all the hosts in your organization requires an admin level Zoom login. If you just want your own recordings archived, a normal personal Zoom account works.
Will it handle really large recordings?
Yes. Zoom recordings routinely run to hundreds of megabytes and the upload is built to handle that, sending large files to Drive in pieces rather than in one go.
What happens if a file fails to upload?
Nothing is lost. The failure is listed by name in the Slack summary so you can see exactly what did not make it, the original stays untouched in Zoom, and the next night's run will pick it up again.
Why does it skip short recordings?
Recordings under two minutes are almost always accidental, like a host starting a meeting and immediately ending it. Skipping them keeps your archive and your spreadsheet clean. You can change or remove that cutoff.
Does it save the transcripts too?
Yes. Both the video file and the transcript for each meeting are uploaded, and each one gets its own row in the archive index so you can find either.

Related templates

Build a credential rotation checklist when someone leaves

When someone leaves, we check which shared passwords they used in their final months and post a ranked rotation list to your security channel.

1Password
Rippling
Slack Bot
+1
Agentic Task
Weekly Amazon S3 bucket security audit posted to Slack

Every Monday, check every S3 bucket for public exposure, missing encryption and weak backup settings, then get the risks ranked in Slack.

Amazon S3
Slack Bot
Google Sheets
Agentic Task
Log Agorapulse social conversations to HubSpot contacts

Twice every weekday, the conversations from your social inbox land on the right HubSpot contact timelines, with a Slack recap for sales.

Agorapulse
HubSpot
Slack Bot
Agentic Task
Turn procurement portal tenders into CRM deals each morning

Every weekday at 7am, sign in to the tender portals you track, filter new notices against your bid criteria, and open a deal for the ones worth chasing.

Anchor Browser
Google Sheets
HubSpot
+1
Agentic Task
Clean up HubSpot contacts from your Amazon SES suppression list

Every morning, find the addresses that hard bounced or filed a spam complaint, update the matching HubSpot contacts, and post a short Slack recap.

Amazon SES
HubSpot
Slack Bot
Agentic Task
Draft polite follow-ups for emails that never got a reply

Every weekday at 4pm, spot the threads that went quiet, stage a ready-to-send nudge in your mailbox, and get a ranked Slack recap.

Aurinko
Google Sheets
Slack Bot
Agentic Task

Stop hitting your Zoom storage cap.

Run this nightly and every recording lands safely in Google Drive with a full audit trail behind it.