This workflow corresponds to n8n.io template #4865 — we link there as the canonical source.
This workflow follows the Google Sheets → 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": "Google Sheets Duplication Workflow",
"tags": [],
"nodes": [
{
"id": "workflow-overview-sheets",
"name": "Workflow Overview",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1450,
-50
],
"parameters": {
"color": 2,
"width": 350,
"height": 320,
"content": "# \ud83d\udcca Google Sheets Duplication Workflow\n\n**Purpose:** Duplicate sheets from master spreadsheet to new spreadsheet\n\n**Process Overview:**\n1. Create new spreadsheet\n2. Get all sheets from master\n3. Loop through each sheet\n4. Create sheet in new spreadsheet\n5. Copy data from master to new\n\n**Required Setup:**\n- Google Sheets OAuth credentials\n- Master spreadsheet ID\n- Proper API permissions"
},
"typeVersion": 1
},
{
"id": "start-create-note",
"name": "Start & Create",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1100,
-50
],
"parameters": {
"color": 3,
"width": 280,
"height": 200,
"content": "## \ud83d\ude80 Start & Create\n\n**Manual Trigger:**\n- Click to start workflow\n- No scheduling needed\n\n**Create New Spreadsheet:**\n- Creates destination spreadsheet\n- Update title as needed\n- Stores ID for later use"
},
"typeVersion": 1
},
{
"id": "discovery-note",
"name": "Sheet Discovery",
"type": "n8n-nodes-base.stickyNote",
"position": [
-660,
-50
],
"parameters": {
"color": 1,
"width": 280,
"height": 200,
"content": "## \ud83d\udd0d Sheet Discovery\n\n**HTTP Request:**\n- Gets spreadsheet metadata\n- Lists all sheets\n- Uses Google Sheets API v4\n\n**Code Node:**\n- Extracts sheet names\n- Formats for processing\n- Creates sheet array"
},
"typeVersion": 1
},
{
"id": "loop-note",
"name": "Loop Processing",
"type": "n8n-nodes-base.stickyNote",
"position": [
-220,
-50
],
"parameters": {
"color": 5,
"width": 280,
"height": 200,
"content": "## \ud83d\udd04 Loop Processing\n\n**Split In Batches:**\n- Processes one sheet at a time\n- Prevents API overload\n- Maintains order\n\n**Two outputs:**\n1. Done - Removes default Sheet1\n2. Loop - Creates & copies sheets"
},
"typeVersion": 1
},
{
"id": "operations-note",
"name": "Sheet Operations",
"type": "n8n-nodes-base.stickyNote",
"position": [
220,
-50
],
"parameters": {
"color": 4,
"width": 280,
"height": 200,
"content": "## \ud83d\udcdd Sheet Operations\n\n**Create Sheets:**\n- Creates new sheet in destination\n- Uses original sheet names\n\n**Read & Write:**\n- Reads from master sheet\n- Writes to new sheet\n- Preserves all columns"
},
"typeVersion": 1
},
{
"id": "important-notes",
"name": "Important Notes",
"type": "n8n-nodes-base.stickyNote",
"position": [
-220,
420
],
"parameters": {
"color": 6,
"width": 300,
"height": 150,
"content": "\u26a0\ufe0f **Important Notes:**\n\n1. Replace spreadsheet ID in HTTP Request\n2. Update credentials for all nodes\n3. Default 'Sheet1' is removed after all sheets are created\n4. Column structure must match between sheets"
},
"typeVersion": 1
},
{
"id": "21b7267c-eac9-4f90-b345-614bd6d5a276",
"name": "When clicking 'Test workflow'",
"type": "n8n-nodes-base.manualTrigger",
"notes": "Manual trigger - click to start the spreadsheet duplication process",
"position": [
-1100,
200
],
"parameters": {},
"typeVersion": 1
},
{
"id": "26e0f233-e990-4b98-8184-599583a64498",
"name": "HTTP Request",
"type": "n8n-nodes-base.httpRequest",
"notes": "Gets spreadsheet metadata - replace YOUR_MASTER_SPREADSHEET_ID with actual ID",
"position": [
-660,
200
],
"parameters": {
"url": "https://sheets.googleapis.com/v4/spreadsheets/YOUR_MASTER_SPREADSHEET_ID",
"options": {},
"sendHeaders": true,
"authentication": "predefinedCredentialType",
"headerParameters": {
"parameters": [
{
"name": "Accept",
"value": "application/json"
}
]
},
"nodeCredentialType": "googleSheetsOAuth2Api"
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
},
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "d8a02c3f-8b31-4bb1-9052-33963c09da16",
"name": "Code",
"type": "n8n-nodes-base.code",
"notes": "Extracts sheet names and IDs from API response",
"position": [
-440,
200
],
"parameters": {
"jsCode": "const spreadsheet = $input.first().json;\nconst sheets = spreadsheet.sheets;\n\n// Create array of sheet names\nconst sheetList = sheets.map(sheet => ({\n json: {\n sheetName: sheet.properties.title,\n sheetId: sheet.properties.sheetId,\n index: sheet.properties.index\n }\n}));\n\nreturn sheetList;"
},
"typeVersion": 2
},
{
"id": "d45b8f9a-47ad-4280-ba95-d8b10b0351a2",
"name": "Loop Over Items",
"type": "n8n-nodes-base.splitInBatches",
"notes": "Processes sheets one by one - output 1 when done, output 2 for each iteration",
"position": [
-220,
200
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "aaff5289-8658-4f5c-b3de-15630e25c537",
"name": "Create Sheets",
"type": "n8n-nodes-base.googleSheets",
"notes": "Creates new sheet in destination spreadsheet with original name",
"position": [
0,
200
],
"parameters": {
"title": "={{ $('Loop Over Items').item.json.sheetName }}",
"options": {},
"operation": "create",
"documentId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Create New Spreadsheet').item.json.spreadsheetId }}"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.5
},
{
"id": "e33a1701-8a90-4e71-8f1a-f517d26894be",
"name": "Write sheet",
"type": "n8n-nodes-base.googleSheets",
"notes": "Writes data to new sheet - preserves all columns from master",
"position": [
440,
275
],
"parameters": {
"columns": {
"value": {},
"schema": [
{
"id": "Column1",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Column 1",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Column2",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Column 2",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Column3",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Column 3",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Column4",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Column 4",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Column5",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Column 5",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Column6",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Column 6",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Column7",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Column 7",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Column8",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Column 8",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Column9",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Column 9",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "name",
"value": "={{ $('Loop Over Items').item.json.sheetName }}"
},
"documentId": {
"__rl": true,
"mode": "url",
"value": "={{ $('Create New Spreadsheet').item.json.spreadsheetUrl }}"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.5
},
{
"id": "a46aad80-34cf-4f19-aec6-1896296b40d3",
"name": "Google Sheets2",
"type": "n8n-nodes-base.googleSheets",
"notes": "Removes default 'Sheet1' after all sheets are created",
"position": [
0,
0
],
"parameters": {
"operation": "remove",
"sheetName": {
"__rl": true,
"mode": "name",
"value": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "url",
"value": "={{ $('Create New Spreadsheet').item.json.spreadsheetUrl }}"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.5
},
{
"id": "c8439289-b353-4ac5-a0f2-601e66ddf6fb",
"name": "Read Spreadsheet1",
"type": "n8n-nodes-base.googleSheets",
"notes": "Reads data from master spreadsheet - one sheet at a time",
"position": [
220,
200
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "name",
"value": "={{ $('Loop Over Items').item.json.sheetName }}"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "YOUR_MASTER_SPREADSHEET_ID",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_MASTER_SPREADSHEET_ID/edit",
"cachedResultName": "Master Spreadsheet"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.5
},
{
"id": "2de35627-e071-4f39-9ea7-2e1fa0d56f7c",
"name": "Create New Spreadsheet",
"type": "n8n-nodes-base.googleSheets",
"notes": "Creates new destination spreadsheet - update title as needed",
"position": [
-880,
200
],
"parameters": {
"title": "Copy of Master Spreadsheet",
"options": {},
"resource": "spreadsheet"
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.5
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "YOUR_VERSION_ID",
"connections": {
"Code": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Write sheet": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"HTTP Request": {
"main": [
[
{
"node": "Code",
"type": "main",
"index": 0
}
]
]
},
"Create Sheets": {
"main": [
[
{
"node": "Read Spreadsheet1",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[
{
"node": "Google Sheets2",
"type": "main",
"index": 0
}
],
[
{
"node": "Create Sheets",
"type": "main",
"index": 0
}
]
]
},
"Read Spreadsheet1": {
"main": [
[
{
"node": "Write sheet",
"type": "main",
"index": 0
}
]
]
},
"Create New Spreadsheet": {
"main": [
[
{
"node": "HTTP Request",
"type": "main",
"index": 0
}
]
]
},
"When clicking 'Test workflow'": {
"main": [
[
{
"node": "Create New Spreadsheet",
"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.
googleSheetsOAuth2ApihttpHeaderAuth
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow reads sheet details from a source Google Spreadsheet, creates a new spreadsheet, replicates the sheet structure, enriches the content by reading data, and writes it into the corresponding sheets in the new spreadsheet. The process is looped for every sheet,…
Source: https://n8n.io/workflows/4865/ — 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.
This template is ideal for solo store owners, eCommerce marketers, automation beginners, or anyone using Shopify and Gmail who wants to recover lost revenue without coding.
PCN. Uses googleSheets, httpRequest, @n-octo-n/n8n-nodes-json-database, itemLists. Event-driven trigger; 60 nodes.
The workflow automates the process of gathering extensive keyword data for a "Main Keyword." It starts by reading initial parameters from a Google Sheets template, creates a new dedicated Google Sheet
🔥 March Sale – n8n Community Members Get ideoGener8r for Just $27! (Reg. $47) Use Coupon Code: (Valid until 3/31/2025 for n8n community members)
📄 Documentation: Notion Guide