This workflow corresponds to n8n.io template #11326 — we link there as the canonical source.
This workflow follows the Agent → 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 →
{
"id": "KTF9dWBSWK1Mnjxu",
"name": "AI Video & Voice Clone",
"tags": [],
"nodes": [
{
"id": "657bc2dd-01f2-4292-acd1-d447c3a63283",
"name": "Google Sheets Trigger",
"type": "n8n-nodes-base.googleSheetsTrigger",
"position": [
-288,
0
],
"parameters": {
"event": "rowAdded",
"options": {},
"pollTimes": {
"item": [
{
"mode": "everyMinute"
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "REPLACE_WITH_YOUR_SHEET_TAB",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/REPLACE_WITH_YOUR_SHEET_ID/edit#REPLACE_WITH_YOUR_SHEET_TAB",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "REPLACE_WITH_YOUR_SHEET_ID",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/REPLACE_WITH_YOUR_SHEET_ID/edit",
"cachedResultName": "Leads"
}
},
"typeVersion": 1
},
{
"id": "bba9b597-557a-49b5-9eb5-09fe7cc0b9f9",
"name": "Research Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
240,
0
],
"parameters": {
"text": "=Full Name:{{ $json.Name }}\nEmail Address:{{ $json['Email Address'] }}\nPhone Number: {{ $json['Phone Number'] }}\nCompany:{{ $json.Company }}\nIndustry: {{ $json.Industry }}\nLinkedIn Profile: {{ $json['LinkedIn URL'] }}\n",
"options": {
"systemMessage": "=You are Outbound Research Agent for Purple Unicorn, an influencer marketing agency.\nYour mission: Use Preplexity Tool to research the assigned prospect and return insights that equip the sales team to personalize highly relevant outreach.\n\nYou will be given the following input about the lead:\nFull Name, Email Address, Phone Number, Company Name, Industry, Linked URL\n\nYour responsibilities:\n\nUsing Perplexity Tool: \n\nResearch the PERSON\n\nCurrent role & main responsibilities\n\nRecent achievements, interviews, social activity, thought-leadership topics\n\nInterests related to content, influencers, social media, brand building\n\nResearch the COMPANY\n\nWhat they sell, who they serve, and main value propositions\n\nRecent news, campaigns, marketing strategy insights (especially digital/influencer)\n\nGrowth signals: funding, hiring trends, product launches\n\nCurrent presence on Instagram / TikTok / YouTube / LinkedIn if available\n\nIdentify OPPORTUNITIES\n\nWhere influencer marketing could help:\n\nIncrease brand awareness\n\nImprove social engagement & conversions\n\nModernize outdated marketing approach\n\nExample influencers or campaign angles aligned to their industry/customer base\n\nExtract TRIGGERS\n\nWhat makes this lead worth contacting right now\n\nTie insights directly to Purple Unicorn\u2019s value (high-ROI influencer campaigns)\n\nTone & Format Requirements:\n\nBe accurate, concise, and compelling\n\nNo fluff, no generic statements\n\nUse bullet points and short actionable sentences\n\nInclude 3\u20135 customized outreach hooks that the SDR can directly use\n\nKeep strict data integrity \u2014 state only verifiable insights\n\nOutput Format (always follow this structure)\n\nProspect Overview\n\nName: \u2026\n\nRole: \u2026\n\nKey interests: \u2026\n\nCompany Overview\n\nWhat they do: \u2026\n\nTarget customers: \u2026\n\nMarketing status: \u2026\n\nOpportunities for Influencer Marketing (Purple Unicorn)\n\n\u2026\n\nSales Triggers\n\n\u2026\n\n3\u20135 Personalized Outreach Hooks\n\n\u2026\n\n\u2026\n\n\u2026"
},
"promptType": "define"
},
"typeVersion": 3
},
{
"id": "9452861e-a74c-45bf-8ef5-905c04172888",
"name": "Message a model in Perplexity",
"type": "n8n-nodes-base.perplexityTool",
"position": [
304,
208
],
"parameters": {
"model": "sonar-pro",
"options": {},
"messages": {
"message": [
{
"content": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('message0_Text', ``, 'string') }}"
}
]
},
"simplify": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Simplify_Output', ``, 'boolean') }}",
"requestOptions": {}
},
"typeVersion": 1
},
{
"id": "a191cb19-4d54-4ccf-8489-733acbbb6a96",
"name": "Scripting Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
672,
0
],
"parameters": {
"text": "={{ $json.output }}",
"options": {
"systemMessage": "=You are Script Writing Agent for Marc from Purple Unicorn, an influencer marketing agency. \n\nYou will receive research insights about a single prospect and their company.\nYour job is to write a personalized 30-second outreach script for narration by an AI video avatar.\n\nRequirements:\n\nTone & Voice\n\nCasual, confident, and friendly\n\nSounds like a real human talking \u2014 no corporate jargon\n\nPersonalized references based on the provided research (THIS IS CRITICAL)\n\nFocus on building curiosity and interest, not hard selling\n\nContent Rules\n\nIntro with the prospect\u2019s name and what caught our attention about their work or company\n\nBriefly connect Purple Unicorn\u2019s influencer marketing expertise to their goals or current marketing status\n\nMention 1\u20132 specific opportunities or triggers discovered in research\n\nEnd with a light, non-pushy call to chat (\u201cworth a quick convo?\u201d)\n\nOutput Format\n\nOnly return the script as plain text (no bullet points or explanations)\n\n4\u20136 short conversational paragraphs\n\nTotal read time: ~30 seconds (80\u2013110 words)\n\nProhibited\n\nNo email-style formatting (no subject lines, no signatures)\n\nNo emojis\n\nNo generic filler like \u201cI hope you\u2019re well\u201d\n\nNo unverified claims\n\nExample structure (for reference \u2014 do not include in output)\n\nHi [Name], loved your work on\u2026\nNoticed your company is pushing into\u2026\nAt Purple Unicorn, we help brands like yours\u2026\nThought we could explore\u2026\nUp for a quick chat?\n\nStay focused on making the prospect feel seen, understood, and excited enough to respond.\n\n##Output rule\nOutput only valid text format without special characters to make sure that it will be a valid JSON input in the next node"
},
"promptType": "define"
},
"typeVersion": 3
},
{
"id": "4cb305d9-0838-4d74-8665-4f948e11b626",
"name": "Heygen Clone AI Creation",
"type": "n8n-nodes-base.httpRequest",
"position": [
1232,
0
],
"parameters": {
"url": "https://api.heygen.com/v2/video/generate",
"method": "POST",
"options": {},
"jsonBody": "={{\n {\n \"video_inputs\": [\n {\n \"character\": {\n \"type\": \"avatar\",\n \"avatar_id\": \"c84a546eb24e496da33673c336624d1c\",\n \"avatar_style\": \"normal\"\n },\n \"voice\": {\n \"type\": \"text\",\n \"input_text\": $json.output,\n \"voice_id\": \"e690edf698c043409a59fbfc5175c4b1\",\n \"speed\": 1.1\n }\n }\n ],\n \"dimension\": { \"width\": 720, \"height\": 1280 }\n }\n}}",
"sendBody": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth"
},
"typeVersion": 4.3
},
{
"id": "2526777e-d184-4ffa-96df-581a3899cf24",
"name": "Send a message",
"type": "n8n-nodes-base.gmail",
"position": [
2304,
0
],
"parameters": {
"sendTo": "user@example.com",
"message": "={{ $json.output.body }}\n\nListen my quick assessment of your business:\n{{ $('GET Result').item.json.data.video_url }}",
"options": {
"appendAttribution": false
},
"subject": "={{ $json.output.title }}",
"emailType": "text"
},
"typeVersion": 2.1
},
{
"id": "76a46ccd-e1f9-4022-a18e-9f760436dff9",
"name": "Send an SMS/MMS/WhatsApp message",
"type": "n8n-nodes-base.twilio",
"position": [
1584,
336
],
"parameters": {
"to": "REPLACE_PHONE",
"from": "REPLACE_PHONE",
"message": "={{ $json.webContentLink }}",
"options": {}
},
"typeVersion": 1
},
{
"id": "f0741d59-b5d6-4578-b24f-7ddf91527788",
"name": "Code in JavaScript",
"type": "n8n-nodes-base.code",
"position": [
-96,
0
],
"parameters": {
"jsCode": "// \"items\" is an array of all rows coming from Google Sheets\n// We only want the latest one (usually the last item in the array)\n\nif (items.length === 0) {\n\treturn [];\n}\n\n// Take the last item (most recently added row)\nconst lastItem = items[items.length - 1];\n\n// Return it as a single-item array so n8n can continue as usual\nreturn [lastItem];\n"
},
"typeVersion": 2
},
{
"id": "f75ff906-4b9f-4cc8-8384-60bc6f2d4e6d",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
112,
208
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-5.1",
"cachedResultName": "gpt-5.1"
},
"options": {
"timeout": 6000000
}
},
"typeVersion": 1.2
},
{
"id": "55a89042-e5ac-4c20-bb54-60e0400ab684",
"name": "OpenRouter Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"position": [
640,
208
],
"parameters": {
"model": "openai/gpt-5.1",
"options": {}
},
"typeVersion": 1
},
{
"id": "b9cab21d-8851-4e36-90fb-9f8bdc5d3d71",
"name": "Convert text to speech",
"type": "@elevenlabs/n8n-nodes-elevenlabs.elevenLabs",
"position": [
1152,
336
],
"parameters": {
"text": "={{ $json.output }}",
"voice": {
"__rl": true,
"mode": "id",
"value": "UEKYgullGqaF0keqT8Bu"
},
"resource": "speech",
"requestOptions": {},
"additionalOptions": {}
},
"typeVersion": 1
},
{
"id": "d27df0a6-1151-443a-86c0-28592890c5a4",
"name": "Upload file",
"type": "n8n-nodes-base.googleDrive",
"position": [
1360,
336
],
"parameters": {
"name": "Audio",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"options": {},
"folderId": {
"__rl": true,
"mode": "list",
"value": "REPLACE_WITH_YOUR_FOLDER_ID",
"cachedResultUrl": "https://drive.google.com/drive/folders/REPLACE_WITH_YOUR_FOLDER_ID",
"cachedResultName": "n8n Folder"
}
},
"typeVersion": 3
},
{
"id": "54f9ad85-bc0d-4f02-9c30-8168060bba3f",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
1056,
-80
],
"parameters": {
"color": 6,
"width": 1536,
"height": 288,
"content": "Intro Video Generation + Send to Email"
},
"typeVersion": 1
},
{
"id": "7c816c51-b4fe-47e7-8b50-a6ba687ff359",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1056,
240
],
"parameters": {
"color": 4,
"width": 752,
"height": 288,
"content": "Voice Generation and Text"
},
"typeVersion": 1
},
{
"id": "70dcb589-3e92-41f7-9208-1c3afd6a7f71",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
64,
-96
],
"parameters": {
"color": 4,
"width": 960,
"height": 624,
"content": "Research & Script"
},
"typeVersion": 1
},
{
"id": "0f2d716c-7aa0-441c-936c-c4f3cc1674d3",
"name": "Wait 30s",
"type": "n8n-nodes-base.wait",
"position": [
1440,
0
],
"parameters": {
"amount": 30
},
"typeVersion": 1.1
},
{
"id": "9364537a-8917-43ab-b9c2-12ceec88d1c0",
"name": "GET Result",
"type": "n8n-nodes-base.httpRequest",
"position": [
1648,
0
],
"parameters": {
"url": "https://api.heygen.com/v1/video_status.get",
"options": {},
"sendQuery": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"queryParameters": {
"parameters": [
{
"name": "video_id",
"value": "={{ $json.data.video_id }}"
}
]
}
},
"typeVersion": 4.3
},
{
"id": "aa799380-8601-4d87-a2a2-f8e47fee29cb",
"name": "AI Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
1856,
0
],
"parameters": {
"text": "={{ $('Research Agent').item.json.output }}",
"options": {
"systemMessage": "You are the Outreach Email Copywriter Agent for Purple Unicorn Marketing Agency.\nYour task is to generate one short and personalized outbound email for each prospect.\n\nRequirements:\n\nYou will receive prospect details in the user input\n\nUse their company information or recent updates to personalize the message\n\nThe email must reference a personalized intro video included in the outreach\n\nMarc from Purple Unicorn Agency is the sender\n\nTone: friendly, clear, and value-led\n\nKeep it short and impactful (no long paragraphs)\n\nSTRICT Output Format\n\nYou must output valid JSON only, with exactly two properties:\n\n{\n \"title\": \"A short, attention-grabbing subject line\",\n \"body\": \"Email body text here. Keep paragraphs short and include a reference to the personalized video.\"\n}\n\n\nMandatory rules\n\nNo additional text outside the JSON\n\nNo markdown formatting\n\nNo emojis\n\nNo explanations or annotations\n\nIf the required information is insufficient, use placeholders rather than adding commentary\n\nIf your output does not strictly match the JSON structure above, it will be considered incorrect."
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 3
},
{
"id": "f236ceb1-bb32-4058-af83-0b079263f7cf",
"name": "OpenAI Chat Model1",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
1824,
224
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {}
},
"typeVersion": 1.2
},
{
"id": "06c9c350-5107-45dc-bf89-8df081dda40f",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
2032,
208
],
"parameters": {
"autoFix": true,
"jsonSchemaExample": "{\n \"title\": \"\u2026\",\n \"body\": \"\u2026\"\n}\n"
},
"typeVersion": 1.3
},
{
"id": "a7abfece-d384-40f7-8c1a-a48609a6ce73",
"name": "OpenAI Chat Model2",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
1968,
416
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {}
},
"typeVersion": 1.2
},
{
"id": "64bb87e2-5094-44b9-a0e3-a9c4d0805f66",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-336,
-96
],
"parameters": {
"color": 7,
"width": 368,
"height": 624
},
"typeVersion": 1
},
{
"id": "7f7bc175-94e8-4a40-9b58-c875fd196c8d",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1200,
-96
],
"parameters": {
"width": 800,
"height": 816,
"content": "What this Workflow Does\n\nAutomates the creation of hyper-personalized outreach videos, voice notes, and emails whenever a new lead is added to Google Sheets.\n\nWatch step-by-step tutorial of this build here: https://www.youtube.com/watch?v=q9AAh9zRou4\n\nIt performs:\nLead Intake (Google Sheets Trigger \u2192 Latest Row Extractor)\nDeep AI Research (Perplexity + Research Agent)\nPersonalized Scriptwriting (Script Agent)\nHeyGen Video Generation\nElevenLabs Voice Note Generation\nUpload Audio to Google Drive\nEmail Delivery (video + voice note + personalized email)\nOptional SMS/WhatsApp Message via Twilio\n\nHigh-Level Flow\nGoogle Sheets \u2192 Research \u2192 Script \u2192 Video \u2192 Voice \u2192 Drive \u2192 Email/SMS\n\nNode Lane Explanations\n\nResearch & Script Lane\nCode Node: grabs latest lead from the sheet\nResearch Agent: uses Perplexity to gather insights\nScript Agent: creates a 30-sec personalized outreach script\nOpenAI/OpenRouter models: support research + script consistency\nVideo Generation Lane\nHeyGen Request: creates avatar video based on script\nWait \u2192 GET Result: polls until video is ready\nAI Email Agent: generates JSON email (subject + body referencing video)\nVoice & Upload Lane\nElevenLabs: converts script or summary to voice note\nGoogle Drive Upload: stores voice file\nTwilio (optional): sends voice note link via SMS/WhatsApp\nEmail Output\nGmail Node: sends the outreach email + video link + voice note link to your inbox\n\nPurpose\nCreate SDR-ready, highly-personalized outreach assets using AI \u2014 end-to-end automated."
},
"typeVersion": 1
},
{
"id": "8eaee9ef-0431-40e6-8ddb-6937d0fa05a2",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-336,
-496
],
"parameters": {
"width": 688,
"height": 368,
"content": "@[youtube](q9AAh9zRou4)"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "8a4f77a5-2630-43ff-b68a-64fe45050f1c",
"connections": {
"AI Agent": {
"main": [
[
{
"node": "Send a message",
"type": "main",
"index": 0
}
]
]
},
"Wait 30s": {
"main": [
[
{
"node": "GET Result",
"type": "main",
"index": 0
}
]
]
},
"GET Result": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"Upload file": {
"main": [
[
{
"node": "Send an SMS/MMS/WhatsApp message",
"type": "main",
"index": 0
}
]
]
},
"Research Agent": {
"main": [
[
{
"node": "Scripting Agent",
"type": "main",
"index": 0
}
]
]
},
"Scripting Agent": {
"main": [
[
{
"node": "Heygen Clone AI Creation",
"type": "main",
"index": 0
},
{
"node": "Convert text to speech",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "Research Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Code in JavaScript": {
"main": [
[
{
"node": "Research Agent",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model1": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"OpenAI Chat Model2": {
"ai_languageModel": [
[
{
"node": "Structured Output Parser",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Google Sheets Trigger": {
"main": [
[
{
"node": "Code in JavaScript",
"type": "main",
"index": 0
}
]
]
},
"OpenRouter Chat Model": {
"ai_languageModel": [
[
{
"node": "Scripting Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Convert text to speech": {
"main": [
[
{
"node": "Upload file",
"type": "main",
"index": 0
}
]
]
},
"Heygen Clone AI Creation": {
"main": [
[
{
"node": "Wait 30s",
"type": "main",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "AI Agent",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Message a model in Perplexity": {
"ai_tool": [
[
{
"node": "Research Agent",
"type": "ai_tool",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow automatically transforms new leads from Google Sheets into hyper-personalized outreach videos, voice notes, and emails using AI research, scriptwriting, video cloning, and voice generation. Perfect for SDRs, founders, and agencies who want to scale outreach without…
Source: https://n8n.io/workflows/11326/ — 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.
The best content automation template in the market is now even better—with “deep research” on time-sensitive topics\! Unlike most n8n content automation templates that are mainly for “demo purposes,”
Who is this for? Agencies, consultants, and service providers who conduct discovery calls and need to quickly turn conversations into professional proposals.
This automation is designed to help you generate AI-powered music tracks, cover art, and fully rendered music videos — all triggered from a simple Telegram chat and managed via Google Sheets.
This workflow is designed for marketers, content creators, agencies, and solo founders who want to publish long‑form posts with visuals on autopilot using n8n and AI agents.
Transcript Evalu8r V2 is a robust browser-based transcript analysis tool powered by Deepgram’s speech-to-text API and built into an n8n workflow template. This release introduces full in-browser audio