AutomationFlowsEmail & Gmail › Automated Workflow Backup System with Google Drive, Gmail and Discord Alerts'

Automated Workflow Backup System with Google Drive, Gmail and Discord Alerts'

ByHoChien Chang @hochien-chang on n8n.io

This workflow automates the backup of all your n8n workflows to a specified Google Drive folder. It operates in two main phases: Orchestration (Scheduled Task): The workflow is initiated by a Schedule Trigger* (e.g., daily at 1:30 AM by default). It then uses an n8n API Node* to…

Cron / scheduled trigger★★★★☆ complexity29 nodesn8nGoogle DriveExecution DataGmailExecute Workflow TriggerDiscord
Email & Gmail Trigger: Cron / scheduled Nodes: 29 Complexity: ★★★★☆ Added:

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

This workflow follows the Execute Workflow Trigger → Gmail 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": "d74c545f-17ab-47f7-bb2a-93c9e9673bab",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        460,
        -20
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 1,
              "triggerAtMinute": 30
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "fc54b674-dc64-49ad-819d-66a4e416efc2",
      "name": "Get all n8n Workflows",
      "type": "n8n-nodes-base.n8n",
      "position": [
        680,
        -20
      ],
      "parameters": {
        "filters": {},
        "requestOptions": {}
      },
      "credentials": {
        "n8nApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "b23cd260-8e68-42e7-935c-a658ae35cccd",
      "name": "Backup to Google Drive2",
      "type": "n8n-nodes-base.googleDrive",
      "onError": "continueErrorOutput",
      "position": [
        1260,
        400
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.id }}"
        },
        "options": {},
        "operation": "update",
        "changeFileContent": true,
        "newUpdatedFileName": "={{  $('Workflow Data').item.json.name + \"_\" + $('Workflow Data').item.json.id+ \".json\"}}"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "retryOnFail": true,
      "typeVersion": 3
    },
    {
      "id": "29a69d92-f416-489d-9a96-3a22844556e0",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        920,
        -20
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "ddee56fd-8610-4cae-9ae0-76e58e7fd111",
      "name": "Backup to Google Drive4",
      "type": "n8n-nodes-base.googleDrive",
      "onError": "continueErrorOutput",
      "position": [
        1380,
        720
      ],
      "parameters": {
        "name": "={{  $('Workflow Data').item.json.name + \"_\" + $('Workflow Data').item.json.id+ \".json\"}}",
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": "My Drive"
        },
        "options": {},
        "folderId": {
          "__rl": true,
          "mode": "list",
          "value": "13clPf8pnv_-GLeeNXLhuVzQiqnKo_7Ev",
          "cachedResultUrl": "https://drive.google.com/drive/folders/13clPf8pnv_-GLeeNXLhuVzQiqnKo_7Ev",
          "cachedResultName": "n8nWorkflows"
        }
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "retryOnFail": true,
      "typeVersion": 3
    },
    {
      "id": "8fdf83b1-5884-45a2-8710-e9012c07ccca",
      "name": "ifDriveEmpty",
      "type": "n8n-nodes-base.if",
      "position": [
        680,
        420
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "5ec1b850-e0ce-4bd6-a8be-504e01825c00",
              "operator": {
                "type": "string",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{$('getDriveFileData').item.json.name}}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "01437168-bb55-4308-a83c-a26c0f9c1843",
      "name": "firstWorkflowJson",
      "type": "n8n-nodes-base.set",
      "position": [
        1000,
        720
      ],
      "parameters": {
        "mode": "raw",
        "options": {},
        "jsonOutput": "={{ $('Workflow Data').item.json.toJsonString() }}\n"
      },
      "typeVersion": 3.4
    },
    {
      "id": "7bcb95db-b13b-4bef-9a34-acd1194f6d96",
      "name": "JsonToFile",
      "type": "n8n-nodes-base.code",
      "position": [
        1180,
        720
      ],
      "parameters": {
        "jsCode": "return items.map(item => {\n  const jsonData = JSON.stringify(item.json);\n  const binaryData = Buffer.from(jsonData).toString('base64');\n  item.binary = {\n    data: {\n      data: binaryData,\n      mimeType: 'application/json',\n      fileName: 'data.json'\n    }\n  };\n  return item;\n});"
      },
      "typeVersion": 2
    },
    {
      "id": "efdb7ea6-f4bf-4553-993c-448cd7bb2039",
      "name": "CodeJsonToFile1",
      "type": "n8n-nodes-base.code",
      "position": [
        1080,
        400
      ],
      "parameters": {
        "jsCode": "return items.map(item => {\n  const jsonData = JSON.stringify( $('Workflow Data').item.json);\n  const binaryData = Buffer.from(jsonData).toString('base64');\n  item.binary = {\n    data: {\n      data: binaryData,\n      mimeType: 'application/json',\n      fileName: 'data.json'\n    }\n  };\n  return item;\n});"
      },
      "typeVersion": 2
    },
    {
      "id": "411b1585-4be1-4a92-a54b-64965f0d529d",
      "name": "Limit",
      "type": "n8n-nodes-base.limit",
      "position": [
        1100,
        -40
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "dcd2e2ee-fc18-47bc-9210-b1b42c270961",
      "name": "Workflow Data",
      "type": "n8n-nodes-base.executionData",
      "position": [
        -140,
        420
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "d243a474-9139-4af4-8134-df815a4af806",
      "name": "successEmail",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1360,
        -40
      ],
      "parameters": {
        "sendTo": "your email address",
        "message": "={{ $now.format('yyyy-MM-dd HH:mm') }} workflow backup success.",
        "options": {},
        "subject": "google drive workflow backup success",
        "emailType": "text"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "306a1d38-27ef-4249-956a-cfec30d898b1",
      "name": "failureEmail",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1620,
        420
      ],
      "parameters": {
        "sendTo": "your email address",
        "message": "={{ $now }} {{ $('Workflow Data').item.json.name }} workflow backup .",
        "options": {},
        "subject": "google drive workflow backup error",
        "emailType": "text"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "544cb91c-4f96-4a84-8db2-9c88e758a1e3",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        600,
        -80
      ],
      "parameters": {
        "color": 5,
        "width": 260,
        "height": 220,
        "content": "## Set n8n API"
      },
      "typeVersion": 1
    },
    {
      "id": "84d6b3e9-9f01-40b8-980d-acd2f95d30fe",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        600,
        -180
      ],
      "parameters": {
        "color": 4,
        "width": 150,
        "height": 80,
        "content": "## Edit this node \ud83d\udc47"
      },
      "typeVersion": 1
    },
    {
      "id": "a3f1669b-41da-4256-af2c-e556738eabf1",
      "name": "getDriveFileData",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        300,
        420
      ],
      "parameters": {
        "filter": {
          "folderId": {
            "__rl": true,
            "mode": "url",
            "value": "={{ $('Parameters').item.json.directory }}"
          },
          "whatToSearch": "files"
        },
        "options": {},
        "resource": "fileFolder",
        "returnAll": true,
        "queryString": "={{  $('Workflow Data').item.json.name + \"_\" + $('Workflow Data').item.json.id+ \".json\"}}"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "retryOnFail": true,
      "typeVersion": 3,
      "alwaysOutputData": true
    },
    {
      "id": "f1771f9e-4153-4595-bbd9-22abfef23c54",
      "name": "When Executed by Another Workflow",
      "type": "n8n-nodes-base.executeWorkflowTrigger",
      "position": [
        -300,
        420
      ],
      "parameters": {
        "inputSource": "passthrough"
      },
      "typeVersion": 1.1
    },
    {
      "id": "7110911a-c6c6-4ef6-888f-f640784d077b",
      "name": "Execute Workflow",
      "type": "n8n-nodes-base.executeWorkflow",
      "position": [
        1100,
        100
      ],
      "parameters": {
        "options": {},
        "workflowId": {
          "__rl": true,
          "mode": "id",
          "value": "DfMF9CmVw6FU4hYm"
        },
        "workflowInputs": {
          "value": {},
          "schema": [],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": true
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "cb5cc7fb-f24f-48be-a175-c24bf830dce2",
      "name": "Parameters",
      "type": "n8n-nodes-base.set",
      "position": [
        20,
        420
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "1b65def6-4984-497d-a4bc-232af22927ad",
              "name": "directory",
              "type": "string",
              "value": "https://drive.google.com/drive/folders/13clPf8pnv_-GLeeNXLhuVzQiqnKo_7Ev?usp=share_link"
            },
            {
              "id": "c8c98f88-9f22-4574-88b8-1db99f6e4ec4",
              "name": "parentdrive",
              "type": "string",
              "value": "https://drive.google.com/drive/u/0/my-drive"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "0ab79967-aa4e-4914-abbd-8a60057b083d",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -20,
        300
      ],
      "parameters": {
        "color": 4,
        "width": 150,
        "height": 80,
        "content": "## Edit this node \ud83d\udc47"
      },
      "typeVersion": 1
    },
    {
      "id": "948c9276-88a7-4d02-85dc-525c4e8b0c01",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1240,
        -100
      ],
      "parameters": {
        "width": 340,
        "height": 220,
        "content": "## Send complete message"
      },
      "typeVersion": 1
    },
    {
      "id": "cabf9b91-5a2f-4c8f-ae07-318fca57b54f",
      "name": "Discord",
      "type": "n8n-nodes-base.discord",
      "position": [
        1360,
        80
      ],
      "parameters": {
        "content": "={{ $now.format('yyyy-MM-dd HH:mm') }} Google Drive workflow backup success.",
        "guildId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "options": {
          "tts": false
        },
        "resource": "message",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "1365663078880116756",
          "cachedResultUrl": "https://discord.com/channels/1365624783781494854/1365663078880116756",
          "cachedResultName": "backup-status"
        }
      },
      "credentials": {
        "discordBotApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "ea46a8fb-5a43-400e-85d6-602ef1c68c5e",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        20,
        -280
      ],
      "parameters": {
        "color": 7,
        "width": 370,
        "height": 480,
        "content": "## \u91cd\u8981\uff01 \ud83d\udc47\n\n**\u555f\u52d5\u524d\uff1a **\n\n### \u4f5c\u8005\u8cc7\u8a0a\u8207\u8cc7\u6e90\n\u4f5c\u8005\uff1aHochien Chang\nYouTube \u983b\u9053\uff1a[HC AI\u8aaa\u4eba\u8a71](https://www.youtube.com/channel/UCvGfUB-wBdG4i_TdDGBCwJg)\n\u8aaa\u660e\u5f71\u7247\u9023\u7d50\uff1a https://youtu.be/PA15H5qunC0\n\n1.  **\u66f4\u65b0\u8a8d\u8b49\uff1a** \u78ba\u8a8d\u5df2\u8a2d\u5b9a\u300cGoogle Drive OAuth2 API\u300d\u8a8d\u8b49\u3002\n2.  **\u8a2d\u5b9a\u53c3\u6578\uff1a** \u7de8\u8f2f\u300c\u53c3\u6578\u300d\u7bc0\u9ede\uff0c\u8a2d\u5b9a\u6240\u9700\u7684 Google Drive \u8cc7\u6599\u593e URL\u3002\n3.  **\u8a2d\u5b9a\u96fb\u5b50\u90f5\u4ef6\uff1a** \u4f7f\u7528\u60a8\u7684\u6536\u4ef6\u8005\u96fb\u5b50\u90f5\u4ef6\u5730\u5740\u66f4\u65b0\u300cGmail\u300d\u7bc0\u9ede\u3002\n\n\n\u53c3\u8003\u5de5\u4f5c\u6d41\uff1ahttps://n8n.io/workflows/3112-backup-n8n-workflows-to-google-drive/"
      },
      "typeVersion": 1
    },
    {
      "id": "af7f9d0e-6ce4-4277-801d-92bf05a424d6",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -380,
        -280
      ],
      "parameters": {
        "color": 7,
        "width": 390,
        "height": 480,
        "content": "### IMPORTANT! \ud83d\udc47\n\n**Before activating:**\n### Author Information and Resources\nCreator\uff1aHochien Chang\nYouTube \u983b\u9053\uff1a[HC HumanizeAI](www.youtube.com/@HC-HumanizeAI)\nExplanation Video Link: https://youtu.be/PA15H5qunC0\n\n1.  **Update Credentials:** Ensure 'Google Drive OAuth2 API' credentials are set up.\n2.  **Configure Parameters:** Edit the 'Parameters' node to set your desired Google Drive folder URL.\n3.  **Set Email:** Update the 'Gmail' nodes with your recipient email address.\n\n\nBase on: https://n8n.io/workflows/3112-backup-n8n-workflows-to-google-drive/"
      },
      "typeVersion": 1
    },
    {
      "id": "f24c9b0c-1bf4-40dc-9492-8c452e5d9905",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        920,
        600
      ],
      "parameters": {
        "color": 3,
        "width": 620,
        "height": 300,
        "content": "## \u65b0\u5de5\u4f5c\u6d41\u4e0a\u50b3\n## New Workflow upload\ud83d\udc47"
      },
      "typeVersion": 1
    },
    {
      "id": "dac5bca9-9d7f-4131-a563-9115bf0528cc",
      "name": "Sticky Note11",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        920,
        300
      ],
      "parameters": {
        "color": 6,
        "width": 620,
        "height": 280,
        "content": "## \u73fe\u6709\u5de5\u4f5c\u6d41\u66f4\u65b0\n## existing Workflow update\ud83d\udc47"
      },
      "typeVersion": 1
    },
    {
      "id": "6d126534-8b9b-4935-bce7-471ecc931e83",
      "name": "Sticky Note12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        140,
        300
      ],
      "parameters": {
        "width": 440,
        "height": 280,
        "content": "## \u53d6\u5f97 Google Drive \u73fe\u6709\u7684\u6a94\u6848\u8cc7\u8a0a\n## Get Google Drive existing file info\ud83d\udc47"
      },
      "typeVersion": 1
    },
    {
      "id": "2ed623f4-faca-40ea-9ace-ab6d0933f6ba",
      "name": "Sticky Note13",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        580,
        300
      ],
      "parameters": {
        "color": 4,
        "width": 320,
        "height": 280,
        "content": "## \u78ba\u8a8d\u662f\u5426\u70ba\u7b2c\u4e00\u6b21\u5099\u4efd\n## Only for initialing\ud83d\udc47"
      },
      "typeVersion": 1
    },
    {
      "id": "46f0dbdc-4023-426c-b87b-3431817981c0",
      "name": "Sticky Note14",
      "type": "n8n-nodes-base.stickyNote",
      "disabled": true,
      "position": [
        -380,
        -380
      ],
      "parameters": {
        "color": 6,
        "width": 760,
        "height": 80,
        "content": "# HC AI \u8aaa\u4eba\u8a71"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Limit": {
      "main": [
        [
          {
            "node": "successEmail",
            "type": "main",
            "index": 0
          },
          {
            "node": "Discord",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "JsonToFile": {
      "main": [
        [
          {
            "node": "Backup to Google Drive4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parameters": {
      "main": [
        [
          {
            "node": "getDriveFileData",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ifDriveEmpty": {
      "main": [
        [
          {
            "node": "CodeJsonToFile1",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "firstWorkflowJson",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Workflow Data": {
      "main": [
        [
          {
            "node": "Parameters",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "CodeJsonToFile1": {
      "main": [
        [
          {
            "node": "Backup to Google Drive2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [
          {
            "node": "Limit",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Execute Workflow",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Execute Workflow": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Get all n8n Workflows",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "getDriveFileData": {
      "main": [
        [
          {
            "node": "ifDriveEmpty",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "firstWorkflowJson": {
      "main": [
        [
          {
            "node": "JsonToFile",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get all n8n Workflows": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Backup to Google Drive2": {
      "main": [
        [],
        [
          {
            "node": "failureEmail",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Backup to Google Drive4": {
      "main": [
        [],
        [
          {
            "node": "failureEmail",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When Executed by Another Workflow": {
      "main": [
        [
          {
            "node": "Workflow Data",
            "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 automates the backup of all your n8n workflows to a specified Google Drive folder. It operates in two main phases: Orchestration (Scheduled Task): The workflow is initiated by a Schedule Trigger* (e.g., daily at 1:30 AM by default). It then uses an n8n API Node* to…

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

More Email & Gmail workflows → · Browse all categories →

Related workflows

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

Email & Gmail

Limit Code. Uses scheduleTrigger, n8n, googleDrive, splitInBatches. Scheduled trigger; 29 nodes.

n8n, Google Drive, Execution Data +3
Email & Gmail

This n8n workflow sends personalized outreach emails automatically while enforcing strict safety rules such as email validation, spam checks, daily limits, and human-like delays.

Google Drive, Google Sheets, Gmail
Email & Gmail

This workflow automatically generates and emails a comprehensive security audit report for your N8N instance every week. It identifies potential security risks related to: Credentials 🔑 : Exposed or i

Gmail, n8n
Email & Gmail

📩🤖 This workflow automatically processes emails received in Gmail, extracts their attachments, and organizes them into specific folders in Google Drive based on the sender's email address.

Gmail Trigger, Google Drive, Execute Workflow Trigger +1
Email & Gmail

What it does

Reddit, Execute Workflow Trigger, OpenRouter Chat +3