
YouTube Transcription, Summarization & Translation to Google Docs
Description
Categories
🤖 AI & Machine Learning
Nodes Used
n8n-nodes-base.coden8n-nodes-base.coden8n-nodes-base.webhookn8n-nodes-base.googleDocsn8n-nodes-base.googleDocsn8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.httpRequest@n8n/n8n-nodes-langchain.chainLlm@n8n/n8n-nodes-langchain.lmChatGoogleGemini
PriceGratuit
Views0
Last Updated11/28/2025
workflow.json
{
"id": "2fWnDQqsPy4mECqD",
"meta": {
"instanceId": "14e4c77104722ab186539dfea5182e419aecc83d85963fe13f6de862c875ebfa",
"templateCredsSetupCompleted": true
},
"name": "YouTube Transcription, Summarization & Translation to Google Docs",
"tags": [],
"nodes": [
{
"id": "15dc0183-3cf9-4538-b8ae-061e1447932e",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-462,
-320
],
"parameters": {
"width": 1780,
"height": 480,
"content": "## YouTube Transcription, Summarization & Translation to Google Docs"
},
"typeVersion": 1
},
{
"id": "3b60bfc9-4b53-485d-a27f-acf34936d61b",
"name": "Append Summary and Translation",
"type": "n8n-nodes-base.googleDocs",
"position": [
1116,
-200
],
"parameters": {
"actionsUi": {
"actionFields": [
{
"text": "={{ $('Summarize and Translate Text').item.json.text }}",
"action": "insert",
"locationChoice": "location"
}
]
},
"operation": "update",
"documentURL": "={{ $json.id }}"
},
"credentials": {
"googleDocsOAuth2Api": {
"id": "ZvA06wLb0dNuPHl3",
"name": "Google Docs account 3"
}
},
"typeVersion": 2
},
{
"id": "838ac98e-e39d-4123-9128-a18382ff6127",
"name": "Create Output Document",
"type": "n8n-nodes-base.googleDocs",
"position": [
896,
-200
],
"parameters": {
"title": "={{ $('Format Webhook Input').item.json.videoId }}_{{ $('Format Webhook Input').item.json.language }}",
"folderId": "1FM-kd1_Xi2ikKpK7xAULFWYc_qVH2wwc"
},
"credentials": {
"googleDocsOAuth2Api": {
"id": "ZvA06wLb0dNuPHl3",
"name": "Google Docs account 3"
}
},
"typeVersion": 2
},
{
"id": "c1464a7e-5f7d-4fc5-9021-dd3560565c50",
"name": "Summarize and Translate Text",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
520,
-200
],
"parameters": {
"text": "=This is a transcription that needs processing.\n\nPlease do the following:\n\n1. Generate a complete and accurate translation of the transcript into the specified language.\n2. Generate a concise and clear summary of the transcript’s key points in the same language.\n\nTarget Language:\n{{ $('Combine Transcription Content').item.json.language }}\n\nTranscript:\n{{ $('Combine Transcription Content').item.json.mergedTranscript }}\n\nOutput Format:\nPlease return the result strictly in this JSON structure, with both values written in the target language:\n\n{\n \"translation\": \"Full translated version of the transcript in the specified language.\",\n \"summary\": \"Clear and concise summary of the transcript in the same language.\"\n}\n\nMake sure:\n- Both \"translation\" and \"summary\" keys are present.\n- The summary should not be skipped or embedded inside the translation.\n- Do NOT include markdown formatting (no triple backticks or code blocks).\n- Output must be valid JSON only.\n",
"batching": {},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "c4f73e8b-91fd-48d3-8843-98ce83c8e592",
"name": "Combine Transcription Content",
"type": "n8n-nodes-base.code",
"position": [
300,
-200
],
"parameters": {
"jsCode": "// Get the transcript JSON array from previous node\nconst data = $json[\"content\"];\n\n// Merge all text entries into a single string\nconst mergedText = data.map(entry => entry.text).join(\" \");\n\nreturn [\n {\n json: {\n mergedTranscript: mergedText\n }\n }\n];\n"
},
"typeVersion": 2
},
{
"id": "44103ed5-30af-45ea-b909-9ac8400d627e",
"name": "Transcribe YouTube Video",
"type": "n8n-nodes-base.httpRequest",
"position": [
80,
-200
],
"parameters": {
"url": "https://api.supadata.ai/v1/youtube/transcript?",
"options": {},
"sendQuery": true,
"sendHeaders": true,
"queryParameters": {
"parameters": [
{
"name": "videoId",
"value": "={{ $json.videoId }}"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "x-api-key",
"value": ""
}
]
}
},
"typeVersion": 4.2
},
{
"id": "18941114-4d44-4c6c-a01f-a9d15bcd498a",
"name": "Format Webhook Input",
"type": "n8n-nodes-base.code",
"position": [
-140,
-200
],
"parameters": {
"jsCode": "const url = $json[\"body\"][\"youtube_url\"];\nconst match = url.match(/(?:v=|\\/)([0-9A-Za-z_-]{11})/);\nconst videoId = match ? match[1] : null;\n\nreturn [\n {\n json: {\n videoId,\n language: $json[\"body\"][\"language\"],\n enable_summary: $json[\"body\"][\"enable_summary\"],\n originalUrl: url\n }\n }\n];\n"
},
"typeVersion": 2
},
{
"id": "18b57cc6-5713-44cb-ace2-8d773c18f99e",
"name": "Trigger YouTube Processing Request",
"type": "n8n-nodes-base.webhook",
"position": [
-360,
-200
],
"webhookId": "9b151e87-749b-4ef2-82b4-5c3fec1657cc",
"parameters": {
"path": "youtube",
"options": {},
"httpMethod": "POST"
},
"typeVersion": 2
},
{
"id": "b5a33cf4-b3fd-4397-ac2f-de67b275fdf8",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-460,
200
],
"parameters": {
"width": 1780,
"height": 500,
"content": "# **Node Breakdown & Descriptions:**\n\n### * The workflow starts with a **Webhook** node named **\"Trigger YouTube Processing Request\"**, which activates when an HTTP POST request is made with three parameters: `youtube_url`, `language`, and `enable_summary`. This initiates the transcription and translation process.\n\n### * The next node, named **\"Format Webhook Input\"**, is a Code node that extracts and reformats the incoming data. It converts the input into a structured object containing `videoId`, `originalUrl`, `language`, and `enable_summary`.\n\n### * The **HTTP Request** node named **\"Transcribe YouTube Video\"** sends the `videoId` to Supadata’s API to fetch the full transcription of the provided YouTube video in the source language.\n\n### * The **Code1** node named **\"Combine Transcription Content\"** takes the segmented transcription output and merges it into one coherent string. This prepares the transcription for processing by the language model.\n\n### * The **Basic LLM Chain** node named **\"Summarize and Translate Text\"** passes the merged transcript to the **Google Gemini Chat Model** to summarize and translate the text based on the selected `language` and `enable_summary` flag.\n\n### * The **Google Docs** node named **\"Create Output Document\"** creates a new Google Doc using a title derived from the `videoId` and selected `language`. It initializes the file where the final content will be stored.\n\n### * Finally, the **Google Docs** node named **\"Append Summary and Translation\"** updates the newly created Google Doc by inserting the translated and summarized content into the document body, completing the workflow."
},
"typeVersion": 1
},
{
"id": "f6c249d4-7924-4d53-be62-2f6aef324ee2",
"name": "Google Gemini To Summarize and Translate Text",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
608,
20
],
"parameters": {
"options": {},
"modelName": "models/gemini-1.5-flash"
},
"credentials": {
"googlePalmApi": {
"id": "z5bwgGNZFyahaeS7",
"name": "Google Gemini(PaLM) Api account 4"
}
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "ded3d472-ec65-4166-ae4c-cf62179b6684",
"connections": {
"Format Webhook Input": {
"main": [
[
{
"node": "Transcribe YouTube Video",
"type": "main",
"index": 0
}
]
]
},
"Create Output Document": {
"main": [
[
{
"node": "Append Summary and Translation",
"type": "main",
"index": 0
}
]
]
},
"Transcribe YouTube Video": {
"main": [
[
{
"node": "Combine Transcription Content",
"type": "main",
"index": 0
}
]
]
},
"Summarize and Translate Text": {
"main": [
[
{
"node": "Create Output Document",
"type": "main",
"index": 0
}
]
]
},
"Combine Transcription Content": {
"main": [
[
{
"node": "Summarize and Translate Text",
"type": "main",
"index": 0
}
]
]
},
"Trigger YouTube Processing Request": {
"main": [
[
{
"node": "Format Webhook Input",
"type": "main",
"index": 0
}
]
]
},
"Google Gemini To Summarize and Translate Text": {
"ai_languageModel": [
[
{
"node": "Summarize and Translate Text",
"type": "ai_languageModel",
"index": 0
}
]
]
}
}
}