This workflow corresponds to n8n.io template #7883 — we link there as the canonical source.
This workflow follows the Google Drive → Google Sheets 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 →
{
"id": "5TvSxJW2lAijV6am",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Generate Mutlispeaker podcast with Elevenlabs v3",
"tags": [],
"nodes": [
{
"id": "9eb580fe-7b75-4d15-92a9-19877abd3a50",
"name": "When clicking \u2018Execute workflow\u2019",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-528,
-16
],
"parameters": {},
"typeVersion": 1
},
{
"id": "4f58a82a-c01d-4f4e-9d79-8569d3c52400",
"name": "Upload file",
"type": "n8n-nodes-base.googleDrive",
"position": [
368,
-16
],
"parameters": {
"name": "=podcast_{{$now.format('yyyyLLddHHmm')}}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"options": {},
"folderId": {
"__rl": true,
"mode": "list",
"value": "1J7_S0zPgUukmKWJglMepvf429vfQsidL",
"cachedResultUrl": "https://drive.google.com/drive/folders/1J7_S0zPgUukmKWJglMepvf429vfQsidL",
"cachedResultName": "Elevenlabs"
}
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "e11d5c4a-4cbc-4fb9-9ac2-069ee0bb57a5",
"name": "Generate podcast",
"type": "n8n-nodes-base.httpRequest",
"position": [
160,
-16
],
"parameters": {
"url": "https://api.elevenlabs.io/v1/text-to-dialogue",
"method": "POST",
"options": {},
"jsonBody": "={\n \"model_id\": \"eleven_v3\",\n \"inputs\": {{ JSON.stringify($json.podcast) }}\n}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "e890110b-d0a9-4d8c-9beb-66642cc06406",
"name": "Get dialogue",
"type": "n8n-nodes-base.googleSheets",
"position": [
-288,
-16
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1eB8iUQmhj3xJMpGam_slCS0ivtgTUpbcWAqeutG_HM8/edit#gid=0",
"cachedResultName": "Foglio1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1eB8iUQmhj3xJMpGam_slCS0ivtgTUpbcWAqeutG_HM8",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1eB8iUQmhj3xJMpGam_slCS0ivtgTUpbcWAqeutG_HM8/edit?usp=drivesdk",
"cachedResultName": "Elevenlabs v3 Pocast Multispeaker"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "989198ac-709c-442f-b3e8-dca8c6c3d4b0",
"name": "Prepare dialogue",
"type": "n8n-nodes-base.code",
"position": [
-64,
-16
],
"parameters": {
"jsCode": "// Loop over input items and transform the structure\nconst transformedItems = [];\n\nfor (const item of $input.all()) {\n // Create the new structure with text and voice_id fields\n transformedItems.push({\n text: item.json.Input,\n voice_id: item.json[\"Voice ID\"]\n });\n}\n\n// Store the result in a variable\nconst result = transformedItems;\n\nreturn [{ json: { podcast: result } }];"
},
"typeVersion": 2
},
{
"id": "3d20ed34-a6c2-4bfc-881a-37c5457e9deb",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
144,
-592
],
"parameters": {
"color": 6,
"width": 320,
"height": 448,
"content": "### Tips\n\nNon-speech audio events examples:\n \nEmotions:\n[happy]\u2003[excited]\u2003[sad]\u2003[angry]\u2003[nervous]\u2003[curious]\u2003[mischievously]\u2003[serious]\u2003[sorrowful]\n\nSpeech Styles / Volume:\n[whispers]\u2003[whispering]\u2003[shouts]\u2003[shouting]\u2003[speaking softly]\u2003[slowly]\u2003[quickly]\u2003[pause]\n\nNonverbal reactions:\n[laughs]\u2003[laughing]\u2003[sighs]\u2003[crying]\u2003[clears throat]\u2003[gulps]\u2003[gasp]\u2003[coughs]\n\nSound/ambient effects:\n[clapping]\u2003[explosion]\u2003[gunshot]\u2003[door creaks]\u2003[bird chirping]"
},
"typeVersion": 1
},
{
"id": "357c0a82-616e-4b6f-9e64-c2bebcaa320b",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-576,
-592
],
"parameters": {
"color": 3,
"width": 688,
"height": 272,
"content": "## Generate Mutlispeaker podcast with Elevenlabs v3\n\nThe ElevenLabs Text to Dialogue API creates natural sounding expressive dialogue from text using the [Eleven v3 model](https://try.elevenlabs.io/ahkbf00hocnu). Popular use cases include:\n- Generating pitch perfect conversations for video games\n- Creating immersive dialogue for podcasts and other audio content\n- Bring audiobooks to life with expressive narration\n\nThe Eleven v3 model allows the use of non-speech audio events to influence the delivery of the dialogue. This is done by inserting the audio events into the text input wrapped in square brackets."
},
"typeVersion": 1
},
{
"id": "bda15b17-1cf9-43f0-b2fa-c959f743b002",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-576,
-304
],
"parameters": {
"width": 688,
"content": "### PRELIMINARY STEP \n- Clone this [sheet](https://docs.google.com/spreadsheets/d/1eB8iUQmhj3xJMpGam_slCS0ivtgTUpbcWAqeutG_HM8/edit?usp=sharing)\n- [Create a FREE account on Elevenlabs](https://try.elevenlabs.io/ahkbf00hocnu) and Set the voice_id by Elevenlabs about speakers (column B)\n- Write the dialogue text for each speaker (column C)\n- Speaker name is optional (column A)\n- Set the \"Auth Header\" in \"Generate podcast\" node. Name 'xi-api-key', Value 'API_KEY'\n"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "b17f8bbc-98c9-4df2-9196-cc580e67c1cf",
"connections": {
"Get dialogue": {
"main": [
[
{
"node": "Prepare dialogue",
"type": "main",
"index": 0
}
]
]
},
"Generate podcast": {
"main": [
[
{
"node": "Upload file",
"type": "main",
"index": 0
}
]
]
},
"Prepare dialogue": {
"main": [
[
{
"node": "Generate podcast",
"type": "main",
"index": 0
}
]
]
},
"When clicking \u2018Execute workflow\u2019": {
"main": [
[
{
"node": "Get dialogue",
"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.
googleDriveOAuth2ApigoogleSheetsOAuth2ApihttpHeaderAuth
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow automates the creation of realistic Multi-speaker podcasts using ElevenLabsv3 API by reading a script from Google Sheets and saving the final MP3 file to Google Drive. Data Source – Dialogue scripts are stored in a Google Sheet. Each row contains: Speaker name…
Source: https://n8n.io/workflows/7883/ — 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.
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
Overview