AutomationFlowsAI & RAG › Youtube Transcription & Translation to Google Docs with Gemini AI

Youtube Transcription & Translation to Google Docs with Gemini AI

ByWeblineIndia @weblineindia on n8n.io

This workflow automates the end-to-end process of converting YouTube videos into structured, multilingual written content. It transcribes the video's speech, optionally summarizes it, translates it into the chosen language and stores the result in a well-formatted Google…

Webhook trigger★★★★☆ complexityAI-powered10 nodesGoogle DocsChain LlmHTTP RequestGoogle Gemini Chat
AI & RAG Trigger: Webhook Nodes: 10 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #7245 — we link there as the canonical source.

This workflow follows the Chainllm → 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 →

Download .json
{
  "id": "2fWnDQqsPy4mECqD",
  "meta": {
    "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": {
          "name": "<your credential>"
        }
      },
      "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": {
          "name": "<your credential>"
        }
      },
      "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\u2019s 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
      ],
      "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\u2019s 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": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "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
          }
        ]
      ]
    }
  }
}

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.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This workflow automates the end-to-end process of converting YouTube videos into structured, multilingual written content. It transcribes the video's speech, optionally summarizes it, translates it into the chosen language and stores the result in a well-formatted Google…

Source: https://n8n.io/workflows/7245/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

This workflow turns a spreadsheet row into a fully formatted, media-rich WordPress article. It pulls the outline and brand context from Google Sheets/Docs, drafts the article with Anthropic or Gemini,

Agent, Google Sheets, Google Docs +5
AI & RAG

ANIS_HUB 1. Uses gmail, googleDrive, googleSheets, httpRequest. Webhook trigger; 89 nodes.

Gmail, Google Drive, Google Sheets +3
AI & RAG

CLINICAINTEGRAL_secretary. Uses postgres, mcpClientTool, googleDriveTool, toolWorkflow. Webhook trigger; 89 nodes.

Postgres, Mcp Client Tool, Google Drive Tool +14
AI & RAG

secretaria. Uses postgres, n8n-nodes-evolution-api, openAi, httpRequest. Webhook trigger; 71 nodes.

Postgres, N8N Nodes Evolution Api, OpenAI +12
AI & RAG

Resume Screening & Behavioral Interviews with Gemini, Elevenlabs, & Notion ATS copy. Uses outputParserStructured, chainLlm, googleDrive, stickyNote. Webhook trigger; 67 nodes.

Output Parser Structured, Chain Llm, Google Drive +9