This workflow follows the Google Drive → HTTP Request 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 →
{
"name": "backup",
"nodes": [
{
"parameters": {
"options": {}
},
"id": "e4959310-dc9e-4ffe-b60d-284c5b6d0739",
"name": "Set date",
"type": "n8n-nodes-base.dateTime",
"typeVersion": 2,
"position": [
-1808,
304
]
},
{
"parameters": {
"operation": "formatDate",
"date": "={{ $json.currentDate }}",
"format": "custom",
"customFormat": "dd-MM-yyyy/H:mm",
"options": {}
},
"id": "6332e710-3849-485a-8654-f8875482ff23",
"name": "Format date",
"type": "n8n-nodes-base.dateTime",
"typeVersion": 2,
"position": [
-1600,
304
]
},
{
"parameters": {
"keepOnlySet": true,
"values": {
"string": [
{
"name": "commitDate",
"value": "={{ $json.formattedDate }}"
}
]
},
"options": {}
},
"id": "bfc5defb-3228-46bf-9446-d71f134f806e",
"name": "Set commit date",
"type": "n8n-nodes-base.set",
"typeVersion": 2,
"position": [
-1408,
304
]
},
{
"parameters": {
"authentication": "oAuth2",
"resource": "file",
"operation": "list",
"owner": {
"__rl": true,
"value": "https://github.com/cymmGithub/opony-n8n-backup",
"mode": "url"
},
"repository": {
"__rl": true,
"value": "opony-n8n-backup",
"mode": "list",
"cachedResultName": "opony-n8n-backup",
"cachedResultUrl": "https://github.com/cymmGithub/opony-n8n-backup"
},
"filePath": "="
},
"id": "4d7a5591-bd61-4676-83cd-5e61223dde2a",
"name": "List files from repository [GITHUB]",
"type": "n8n-nodes-base.github",
"typeVersion": 1,
"position": [
-1200,
304
],
"alwaysOutputData": true
},
{
"parameters": {
"operation": "aggregateItems",
"fieldsToAggregate": {
"fieldToAggregate": [
{
"fieldToAggregate": "name"
}
]
},
"options": {}
},
"id": "bb7cb143-5eb0-4338-b611-256c47d056c8",
"name": "Combine file names [GITHUB]",
"type": "n8n-nodes-base.itemLists",
"typeVersion": 2.1,
"position": [
-1008,
304
]
},
{
"parameters": {
"mode": "jsonToBinary",
"options": {
"fileName": "={{ $json.name.replace(/\\s+/g, '-').toLowerCase() }}-{{ $json.id }}.json"
}
},
"id": "bbf4f945-6ca7-4515-b082-d57f8a807440",
"name": "Move JSON to binary",
"type": "n8n-nodes-base.moveBinaryData",
"typeVersion": 1,
"position": [
-608,
304
]
},
{
"parameters": {
"batchSize": 1,
"options": {}
},
"id": "f50b3fc3-f681-4c8c-8f94-a1b8fc0ea8a7",
"name": "Split to single items",
"type": "n8n-nodes-base.splitInBatches",
"typeVersion": 2,
"position": [
-368,
304
]
},
{
"parameters": {
"conditions": {
"string": [
{
"value1": "={{ $node['Combine file names [GITHUB]'].json.name }}",
"operation": "contains",
"value2": "={{ $binary.data.fileName }}"
}
]
}
},
"id": "ce1e94be-52f3-4a6c-85ce-5f69585304b7",
"name": "Check if file exists in repository",
"type": "n8n-nodes-base.if",
"typeVersion": 1,
"position": [
-128,
224
]
},
{
"parameters": {
"authentication": "oAuth2",
"resource": "file",
"operation": "edit",
"owner": {
"__rl": true,
"value": "https://github.com/cymmGithub/opony-n8n-backup",
"mode": "url"
},
"repository": {
"__rl": true,
"value": "opony-n8n-backup",
"mode": "list",
"cachedResultName": "opony-n8n-backup",
"cachedResultUrl": "https://github.com/cymmGithub/opony-n8n-backup"
},
"filePath": "={{ $binary.data.fileName }}",
"binaryData": true,
"commitMessage": "=backup-{{ $node['Set commit date'].json.commitDate }}"
},
"id": "e2e12c97-a3fe-4f86-936f-ca847f08d9ce",
"name": "Update file [GITHUB]",
"type": "n8n-nodes-base.github",
"typeVersion": 1,
"position": [
96,
16
]
},
{
"parameters": {
"authentication": "oAuth2",
"resource": "file",
"owner": {
"__rl": true,
"value": "https://github.com/cymmGithub/opony-n8n-backup",
"mode": "url"
},
"repository": {
"__rl": true,
"value": "opony-n8n-backup",
"mode": "list",
"cachedResultName": "opony-n8n-backup",
"cachedResultUrl": "https://github.com/cymmGithub/opony-n8n-backup"
},
"filePath": "={{ $binary.data.fileName }}",
"binaryData": true,
"commitMessage": "=backup-{{ $node['Set commit date'].json.commitDate }}"
},
"id": "ef1a7294-9bfe-498b-ad98-c39465254299",
"name": "Upload file [GITHUB]",
"type": "n8n-nodes-base.github",
"typeVersion": 1,
"position": [
96,
416
]
},
{
"parameters": {
"content": "## Trigger\nYou can change it to [\"Schedule\" trigger](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/) to make backups on regular basis.",
"height": 339.51767272727324,
"width": 182.4715262478496
},
"id": "6a998ee5-c050-4c0f-96de-0cb8d4c70ff5",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-2048,
144
]
},
{
"parameters": {
"content": "## Set and format date/time\nThose nodes are responsible for setting a current date and time in format `dd-MM-yyyy/H:mm`. Date and time are used to compose commit messages in GitHub, for example: `backup-12-07-2023/14:18`.",
"height": 339.42690909090965,
"width": 585.4045090909088
},
"id": "61b4ce23-24ca-4b51-9f8b-b4363d9b6ac9",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-1840,
144
]
},
{
"parameters": {
"content": "## Make a list of existing files\nReturn a list of existing files (backups) in GitHub repository. Data returned by those nodes is used by \"IF\" node (later in workflow) to check whether the backup files should be created or updated.",
"height": 339.42690909090965,
"width": 389.89265454545443
},
"id": "849f0519-5918-4477-998e-31a4d8d1e098",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-1248,
144
]
},
{
"parameters": {
"content": "## Retrieve workflows\nGet all workflows form your n8n instance. Remember that **your credentials need to point to the instance that you want to backup.**",
"height": 339.42690909090965,
"width": 384.14708363636373
},
"id": "efe90312-32d8-4359-b68d-c40d1027cfd7",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-816,
144
]
},
{
"parameters": {
"content": "## Upload backup\nSplit JSON files into batches of 1, check if they were uploaded to repository before. If yes (true), upload the new version of the file. Otherwise (false) create the file in repository.",
"height": 731.633426614796,
"width": 703.8733020263451
},
"id": "8358eb9c-333f-4676-a97b-32b0fb338690",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-416,
-128
]
},
{
"parameters": {
"rule": {
"interval": [
{
"daysInterval": 7
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [
-2000,
304
],
"id": "04b8460b-19de-4ced-9609-2a286a29a3b5",
"name": "Schedule Trigger"
},
{
"parameters": {
"filters": {},
"requestOptions": {}
},
"type": "n8n-nodes-base.n8n",
"typeVersion": 1,
"position": [
-784,
304
],
"id": "bd1770e7-8e07-4774-98a0-e9b2bf06eec2",
"name": "n8n"
}
],
"connections": {
"Set date": {
"main": [
[
{
"node": "Format date",
"type": "main",
"index": 0
}
]
]
},
"Format date": {
"main": [
[
{
"node": "Set commit date",
"type": "main",
"index": 0
}
]
]
},
"Set commit date": {
"main": [
[
{
"node": "List files from repository [GITHUB]",
"type": "main",
"index": 0
}
]
]
},
"List files from repository [GITHUB]": {
"main": [
[
{
"node": "Combine file names [GITHUB]",
"type": "main",
"index": 0
}
]
]
},
"Combine file names [GITHUB]": {
"main": [
[
{
"node": "n8n",
"type": "main",
"index": 0
}
]
]
},
"Move JSON to binary": {
"main": [
[
{
"node": "Split to single items",
"type": "main",
"index": 0
}
]
]
},
"Split to single items": {
"main": [
[
{
"node": "Check if file exists in repository",
"type": "main",
"index": 0
}
]
]
},
"Check if file exists in repository": {
"main": [
[
{
"node": "Update file [GITHUB]",
"type": "main",
"index": 0
}
],
[
{
"node": "Upload file [GITHUB]",
"type": "main",
"index": 0
}
]
]
},
"Update file [GITHUB]": {
"main": [
[
{
"node": "Split to single items",
"type": "main",
"index": 0
}
]
]
},
"Upload file [GITHUB]": {
"main": [
[
{
"node": "Split to single items",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "Set date",
"type": "main",
"index": 0
}
]
]
},
"n8n": {
"main": [
[
{
"node": "Move JSON to binary",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "10f6ecd0-95d3-4d79-8bbe-7ec4d5b58820",
"id": "0zOEGwYt5Hzgt9cF",
"tags": []
}
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.
googleDriveOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
How this works
Secure your critical files effortlessly with this automated backup solution that safeguards data against loss or corruption, giving you peace of mind for business continuity. Ideal for small business owners, freelancers, or IT administrators managing sensitive documents, it triggers backups on a schedule to Google Drive, ensuring everything from project files to client records is duplicated reliably. The key step involves creating dedicated folders in Google Drive via its integration, followed by targeted file transfers using HTTP requests to pull data from various sources.
Use this workflow when you need consistent, hands-off backups for cloud-stored assets like website content or database exports, particularly if you're handling moderate data volumes without dedicated IT support. Avoid it for massive enterprise-scale storage demands, where specialised tools like AWS Backup might be more efficient, or if real-time syncing is required instead of periodic dumps. Common variations include adjusting the cron schedule for hourly runs or integrating additional HTTP endpoints for backing up from APIs like Slack or Trello.
About this workflow
backup. Uses googleDrive, httpRequest. Scheduled trigger; 15 nodes.
Source: https://github.com/evilasioferreira/n8n-projetos/blob/3b880dcabb148d6d32c4c77e85832c5eab23fde3/templates/gerenciamentoDeBackup/backup.json — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Remove Video Background & Compose on Custom Image Background with Google Drive. Uses httpRequest, googleDrive. Webhook trigger; 25 nodes.
Smart google indexing: sitemap filter and url inspection. Uses httpRequest, xml, splitOut, scheduleTrigger. Scheduled trigger; 13 nodes.
Yourang - Complete Workflow Example. Uses n8n-nodes-yourang, httpRequest. Scheduled trigger; 10 nodes.
Automated SEO Indexing via IndexNow & XML Sitemap. Uses scheduleTrigger, httpRequest, xml, splitOut. Scheduled trigger; 9 nodes.
Media Sync (Local HDD → Google Drive). Uses localFileTrigger, readWriteFile, googleDrive, httpRequest. Event-driven trigger; 9 nodes.