AutomationFlowsData & Sheets › Auto-save Zoom Recordings to Google Drive + Log Meetings in Airtable

Auto-save Zoom Recordings to Google Drive + Log Meetings in Airtable

ByDavid Olusola @dae221 on n8n.io

This workflow automatically saves Zoom meeting recordings to Google Drive and logs all important details into Airtable for easy tracking. Perfect for teams that want a searchable meeting archive. Zoom Recording Webhook Listens for events from Zoom. Captures metadata (Meeting ID,…

Webhook trigger★★★★☆ complexity7 nodesAirtableGoogle DriveHTTP Request
Data & Sheets Trigger: Webhook Nodes: 7 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #8056 — we link there as the canonical source.

This workflow follows the Airtable → Google Drive recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "f57bfeb3-65d7-45c3-85fa-45f4c0e94d9f",
      "name": "Create or update a record",
      "type": "n8n-nodes-base.airtable",
      "position": [
        944,
        400
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "appCV1g03wAMk91ZL",
          "cachedResultUrl": "https://airtable.com/appCV1g03wAMk91ZL",
          "cachedResultName": "contacts"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblvmGsSf7xTDtIwS",
          "cachedResultUrl": "https://airtable.com/appCV1g03wAMk91ZL/tblvmGsSf7xTDtIwS",
          "cachedResultName": "Zoom Meeting Log"
        },
        "columns": {
          "value": {
            "Host": "={{ $json.host }}",
            "Topic": "={{ $json.topic }}",
            "File Size": "={{ $json.file_type }}",
            "File Type": "Other",
            "Meeting ID": "={{ $json.meeting_id }}"
          },
          "schema": [
            {
              "id": "id",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "id",
              "defaultMatch": true
            },
            {
              "id": "Meeting ID",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Meeting ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Topic",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Topic",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Host",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Host",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "File Type",
              "type": "options",
              "display": true,
              "options": [
                {
                  "name": "MP4",
                  "value": "MP4"
                },
                {
                  "name": "M4A",
                  "value": "M4A"
                },
                {
                  "name": "Other",
                  "value": "Other"
                }
              ],
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "File Type",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "File Size",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "File Size",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Google Drive Saved",
              "type": "options",
              "display": true,
              "options": [
                {
                  "name": "Yes",
                  "value": "Yes"
                },
                {
                  "name": "No",
                  "value": "No"
                }
              ],
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Google Drive Saved",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Timestamp",
              "type": "dateTime",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Timestamp",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Related Contact",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Related Contact",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "upsert"
      },
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "a3d54194-cfb0-4497-8600-95399203959d",
      "name": "Log Result",
      "type": "n8n-nodes-base.code",
      "position": [
        768,
        400
      ],
      "parameters": {
        "jsCode": "// Collect metadata + Drive result\nconst driveFile = $input.first().json;\nconst prev = $('Normalize Recording Data').item.json;\n\nreturn {\n  json: {\n    ...prev,\n    saved_to_drive: true,\n    drive_file_id: driveFile.id,\n    drive_link: driveFile.webViewLink\n  }\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "03064eac-432f-452b-8170-6e661b7f39b0",
      "name": "Upload to Google Drive",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        576,
        400
      ],
      "parameters": {
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": "My Drive"
        },
        "options": {},
        "folderId": {
          "__rl": true,
          "mode": "list",
          "value": "root",
          "cachedResultName": "/ (Root folder)"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "fede097e-50ae-452c-b317-819629e31d97",
      "name": "Download Recording",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        368,
        400
      ],
      "parameters": {
        "url": "={{ $json.file_url }}",
        "options": {}
      },
      "typeVersion": 4.1
    },
    {
      "id": "606783f7-091d-488b-bef8-12d25b88a42a",
      "name": "Normalize Recording Data",
      "type": "n8n-nodes-base.code",
      "position": [
        176,
        400
      ],
      "parameters": {
        "jsCode": "// Normalize Zoom webhook payload\nconst event = $input.first().json;\nconst recording = event.payload.object.recording_files[0];\n\nreturn {\n  json: {\n    meeting_id: event.payload.object.id,\n    topic: event.payload.object.topic,\n    host: event.payload.object.host_email,\n    file_url: recording.download_url,\n    file_type: recording.file_type,\n    file_size: recording.file_size,\n    timestamp: new Date().toISOString()\n  }\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "e33a40c8-508e-43af-9b4f-991b35ec2f4a",
      "name": "Zoom Recording Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -32,
        400
      ],
      "parameters": {
        "path": "zoom-recording",
        "options": {},
        "httpMethod": "POST"
      },
      "typeVersion": 1
    },
    {
      "id": "c82aaea6-6404-456b-991b-59674090864f",
      "name": "Setup Instructions",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -32,
        192
      ],
      "parameters": {
        "content": "\ud83c\udfa5 **SETUP REQUIRED:**\n\n1. **Zoom Setup:**\n   - Create Zoom App \u2192 enable recording.completed event\n   - Add webhook URL from this workflow\n\n2. **Google Drive:**\n   - Connect OAuth\n   - Replace `YOUR_FOLDER_ID`\n\n3. **Airtable:**\n   - Create base \u2192 Table: `Meeting Logs`\n   - Columns: Meeting ID | Topic | Host | File Type | File Size | Google Drive Saved | Drive Link | Timestamp\n   - Replace `YOUR_AIRTABLE_BASE_ID`\n\n\u26a1 Saves Zoom recordings to Drive + logs metadata in Airtable!"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Log Result": {
      "main": [
        [
          {
            "node": "Create or update a record",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download Recording": {
      "main": [
        [
          {
            "node": "Upload to Google Drive",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload to Google Drive": {
      "main": [
        [
          {
            "node": "Log Result",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Zoom Recording Webhook": {
      "main": [
        [
          {
            "node": "Normalize Recording Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Normalize Recording Data": {
      "main": [
        [
          {
            "node": "Download Recording",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This workflow automatically saves Zoom meeting recordings to Google Drive and logs all important details into Airtable for easy tracking. Perfect for teams that want a searchable meeting archive. Zoom Recording Webhook Listens for events from Zoom. Captures metadata (Meeting ID,…

Source: https://n8n.io/workflows/8056/ — original creator credit. Request a take-down →

More Data & Sheets workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Data & Sheets

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Airtable, HTTP Request, Google Drive +1
Data & Sheets

Stop manually copy-pasting client data into Word templates. This workflow automates the entire invoicing process, handling complex line items, VAT calculations, PDF generation, and CRM syncing in unde

Airtable, Google Drive, HTTP Request
Data & Sheets

This premium n8n workflow harnesses the power of DataForSEO's API combined with Airtable's relational database capabilities to transform your keyword research process, providing deeper insights for co

HTTP Request, Airtable
Data & Sheets

This workflow automates the entire lifecycle of a service-based client, combining four distinct business flows into a single view: Intake Leads: Receives a webhook from your form builder, validates th

Airtable, Notion, Google Calendar +3
Data & Sheets

It intelligently syncs confirmed sales orders from your Airtable base to QuickBooks, automatically creating new customers if they don't exist before generating a perfectly matched invoice. It then log

Airtable, QuickBooks, HTTP Request