Transcripción de texto de TikTok

Avanzado

Este es unContent Creation, Multimodal AIflujo de automatización del dominio deautomatización que contiene 21 nodos.Utiliza principalmente nodos como If, Code, Wait, HttpRequest, GoogleSheets. Automatizar la transcripción de videos de TikTok con RapidAPI y Google Sheets

Requisitos previos
  • Pueden requerirse credenciales de autenticación para la API de destino
  • Credenciales de API de Google Sheets
Vista previa del flujo de trabajo
Visualización de las conexiones entre nodos, con soporte para zoom y panorámica
Exportar flujo de trabajo
Copie la siguiente configuración JSON en n8n para importar y usar este flujo de trabajo
{
  "id": "OW8DfG2xXPS60mSj",
  "meta": {
    "instanceId": "60c025075753afcab9f803964b4caaca9402f435deb4efafbb8e3b93b54d8752"
  },
  "name": "TikTok Transcript",
  "tags": [],
  "nodes": [
    {
      "id": "c0de0228-f79b-4b18-9e5d-ee6218259078",
      "name": "Google Sheets2",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -1380,
        40
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": ""
        },
        "authentication": "serviceAccount"
      },
      "credentials": {
        "googleApi": {
          "id": "qUtlCnYpk7bXXaYp",
          "name": "Google Sheets account 3"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "4b18deea-cfc2-4a8d-b2f3-8b31cac0d573",
      "name": "HTTP Request",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueRegularOutput",
      "position": [
        -560,
        40
      ],
      "parameters": {
        "url": "https://tiktok-transcript-generator.p.rapidapi.com/tiktok/index.php",
        "method": "POST",
        "options": {
          "response": {
            "response": {}
          }
        },
        "sendBody": true,
        "sendHeaders": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "url",
              "value": "={{ $json['Video Url'] }}"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "x-rapidapi-host",
              "value": "tiktok-transcript-generator.p.rapidapi.com"
            },
            {
              "name": "x-rapidapi-key"
            }
          ]
        }
      },
      "typeVersion": 4.2,
      "alwaysOutputData": true
    },
    {
      "id": "baad7161-51f5-4f29-8af0-39244e10eb60",
      "name": "Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        580,
        -40
      ],
      "parameters": {
        "columns": {
          "value": {
            "Video Url": "={{ $('If').item.json['Video Url'] }}",
            "Transcript": "={{ $json.cleanedSubtitles }}",
            "Generated Date": "={{ new Date().toISOString().slice(0, 10) }}"
          },
          "schema": [
            {
              "id": "Video Url",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Video Url",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Transcript",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Transcript",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Generated Date",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Generated Date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Video Url"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": ""
        },
        "authentication": "serviceAccount"
      },
      "credentials": {
        "googleApi": {
          "id": "qUtlCnYpk7bXXaYp",
          "name": "Google Sheets account 3"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "ab5bcc9b-e2a0-4ec7-a4db-de512662549d",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -1100,
        40
      ],
      "parameters": {
        "options": {
          "reset": false
        }
      },
      "typeVersion": 3
    },
    {
      "id": "d5d6e8a4-a2da-4cd5-80fc-3cf7c294697d",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        900,
        140
      ],
      "webhookId": "74ac1ccb-f843-41b8-97c4-b8d32892a5ea",
      "parameters": {
        "amount": 10
      },
      "typeVersion": 1.1
    },
    {
      "id": "6bea9362-5502-4c3c-acac-3f1a16bb0c64",
      "name": "If",
      "type": "n8n-nodes-base.if",
      "position": [
        -820,
        60
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "e0b7b7c8-3a7a-466d-bae7-269282b49d34",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json['Video Url'] }}",
              "rightValue": ""
            },
            {
              "id": "64dde394-0e49-4306-a24a-de2bf448fc95",
              "operator": {
                "type": "string",
                "operation": "empty",
                "singleValue": true
              },
              "leftValue": "={{ $json.Transcript }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "a9ca3926-efbd-42fa-9388-b24625690145",
      "name": "Code",
      "type": "n8n-nodes-base.code",
      "position": [
        -20,
        -40
      ],
      "parameters": {
        "jsCode": "return items.map(item => {\n  const raw = item.json.subtitles;\n\n  // Remove \"WEBVTT\" header and timestamp lines\n  const cleaned = raw\n    .replace(/^WEBVTT\\s*/gm, '')                       // Remove \"WEBVTT\"\n    .replace(/^\\d{2}:\\d{2}:\\d{2} --> \\d{2}:\\d{2}:\\d{2}/gm, '') // Remove timestamps\n    .replace(/^\\s*\\n/gm, '')                           // Remove empty lines\n    .trim();\n\n  return {\n    json: {\n      cleanedSubtitles: cleaned\n    }\n  };\n});\n"
      },
      "typeVersion": 2
    },
    {
      "id": "becf9d6b-26a1-4498-9683-18ad15bc82ea",
      "name": "If1",
      "type": "n8n-nodes-base.if",
      "position": [
        -260,
        40
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "cd25e377-5c82-40b1-85ea-b372ee7765b7",
              "operator": {
                "type": "number",
                "operation": "notEquals"
              },
              "leftValue": "={{ $json.error.status }}",
              "rightValue": 404
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "7c8d30f1-df83-4ee1-83ce-32f6d9b0a810",
      "name": "Google Sheets1",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        300,
        140
      ],
      "parameters": {
        "columns": {
          "value": {
            "Video Url": "={{ $('If').item.json['Video Url'] }}",
            "Transcript": "No transcription available",
            "Generated Date": "={{ new Date().toISOString().slice(0, 10) }}"
          },
          "schema": [
            {
              "id": "Video Url",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Video Url",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Transcript",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Transcript",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Generated Date",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Generated Date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Video Url"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": ""
        },
        "authentication": "serviceAccount"
      },
      "credentials": {
        "googleApi": {
          "id": "qUtlCnYpk7bXXaYp",
          "name": "Google Sheets account 3"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "90a316f5-0f08-42f8-86a0-318bcc9814f9",
      "name": "When clicking ‘Execute workflow’",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -1580,
        40
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "5d36dbf3-ebd6-4cd8-913b-ee1308d6847b",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2500,
        -480
      ],
      "parameters": {
        "width": 780,
        "height": 980,
        "content": "# 📝 TikTok Transcript Extraction & Logging Workflow\n\nThis n8n workflow automatically fetches TikTok video transcripts via the RapidAPI TikTok Transcript Generator and updates a Google Sheet with cleaned transcriptions. It processes only rows missing transcripts, handles errors, and adds timestamps.\n\n---\n\n## 🧩 Node-by-Node Explanation\n1. **Manual Trigger** – Starts the workflow manually on demand.  \n2. **Google Sheets2** – Reads TikTok video URLs and existing transcripts from the sheet.  \n3. **Loop Over Items** – Processes rows in batches of 10 for rate limiting.  \n4. **If** – Checks if a video URL exists and transcript is missing.  \n5. **HTTP Request** – Calls TikTok transcript API to fetch subtitles.  \n6. **If1** – Verifies the API response is successful (no 404 error).  \n7. **Code** – Cleans raw subtitles by removing timestamps and headers.  \n8. **Google Sheets** – Updates the sheet with cleaned transcript and date.  \n9. **Google Sheets1** – Marks videos with no transcript available in the sheet.  \n10. **Wait** – Pauses workflow to manage API rate limits before next batch.  \n\n---\n\n## 🔑 Summary Use Cases  \n- Automate generation of TikTok video transcripts for content teams.  \n- Maintain a centralized Google Sheet of transcripts for SEO, captions, or repurposing content.  \n- Reduce manual effort and errors in transcribing TikTok videos.  \n- Handle API errors and missing data gracefully.\n\n---\n\n**This workflow enables seamless, automated transcription fetching and management for TikTok videos via Google Sheets integration, ideal for marketing, social media managers, and content creators.**\n"
      },
      "typeVersion": 1
    },
    {
      "id": "708c75c1-2ed7-48eb-b606-d6ff3eca7e30",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1660,
        -320
      ],
      "parameters": {
        "height": 580,
        "content": "### 1. When clicking ‘Execute workflow’  \n**Type:** Manual Trigger  \n**Purpose:**  \nManually triggers the workflow to start the process of reading TikTok URLs and generating transcripts.  \n**Use Case:**  \nInitiate the entire flow on demand without waiting for scheduled triggers."
      },
      "typeVersion": 1
    },
    {
      "id": "b7c01b0d-726b-44e7-8099-93812eccce4b",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1400,
        -320
      ],
      "parameters": {
        "height": 580,
        "content": "### 2. Google Sheets2  \n**Type:** Google Sheets (Read)  \n**Purpose:**  \nReads rows from the specified Google Sheet containing TikTok video URLs and existing transcript data.  \n**Use Case:**  \nFetch the list of videos to process and identify which ones need transcription.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "2d5229aa-2c40-41f6-8556-77690c3ed956",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1140,
        -320
      ],
      "parameters": {
        "height": 580,
        "content": "### 3. Loop Over Items  \n**Type:** Split In Batches  \n**Purpose:**  \nProcesses the fetched rows in smaller batches (default 10 items per batch) to avoid rate limits or overload.  \n**Use Case:**  \nControl the workflow execution speed and resource usage when handling large data sets.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "89710512-98f5-4dc2-b8a5-234ae49d343f",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -880,
        -320
      ],
      "parameters": {
        "height": 580,
        "content": "### 4. If  \n**Type:** Conditional Check (If)  \n**Purpose:**  \nFilters each row to process only those where the `Video Url` is not empty and `Transcript` is empty (i.e., videos needing transcription).  \n**Use Case:**  \nSkip rows already having transcripts to avoid redundant API calls."
      },
      "typeVersion": 1
    },
    {
      "id": "7514d668-1b6d-4786-8e7f-f07fbfeac194",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -620,
        -320
      ],
      "parameters": {
        "height": 580,
        "content": "### 5. HTTP Request  \n**Type:** HTTP Request  \n**Purpose:**  \nCalls the TikTok Transcript Generator API with the video URL to retrieve the transcript.  \n**Use Case:**  \nGet the subtitle/transcript data for TikTok videos programmatically.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "2cfb2c0d-980c-4654-9486-45bc765372c6",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -360,
        -320
      ],
      "parameters": {
        "height": 580,
        "content": "### 6. If  \n**Type:** Conditional Check (If)  \n**Purpose:**  \nChecks if the API response is valid and does not contain a 404 error.  \n**Use Case:**  \nHandle cases where transcripts are unavailable or the video URL is invalid."
      },
      "typeVersion": 1
    },
    {
      "id": "167cf773-1543-4778-ba99-d4adc87f3ec3",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -100,
        -320
      ],
      "parameters": {
        "height": 580,
        "content": "### 7. Code  \n**Type:** Code (JavaScript)  \n**Purpose:**  \nCleans the raw subtitles returned by the API by removing headers, timestamps, and empty lines for better readability.  \n**Use Case:**  \nPrepare the transcript text for clean storage and further processing."
      },
      "typeVersion": 1
    },
    {
      "id": "ad776fb7-d066-4f10-917e-a1fbf476e961",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        200,
        -180
      ],
      "parameters": {
        "height": 480,
        "content": "### 8. Google Sheets  \n**Type:** Google Sheets (Append or Update)  \n**Purpose:**  \nWrites the cleaned transcript, video URL, and generation date back into the Google Sheet, updating existing rows.  \n**Use Case:**  \nMaintain an up-to-date record of transcripts next to each TikTok video URL."
      },
      "typeVersion": 1
    },
    {
      "id": "45271bfa-118b-46c7-8e73-e077119ce31f",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        520,
        -380
      ],
      "parameters": {
        "height": 580,
        "content": "### 9. Google Sheets1  \n**Type:** Google Sheets (Append or Update)  \n**Purpose:**  \nFor cases where the API returns an error (like 404), it updates the sheet with a \"No transcription available\" message for that video URL.  \n**Use Case:**  \nClearly indicate videos for which transcripts could not be generated."
      },
      "typeVersion": 1
    },
    {
      "id": "4bb59f93-a06c-4252-bec4-2809fa4d6067",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        840,
        -220
      ],
      "parameters": {
        "height": 540,
        "content": "### 10. Wait  \n**Type:** Wait  \n**Purpose:**  \nPauses the workflow briefly between batches to prevent hitting API rate limits and ensure smooth execution.  \n**Use Case:**  \nThrottle the flow execution for stability and API compliance."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "957a8859-b78c-4fdc-b1c6-50de2acaa6a0",
  "connections": {
    "6bea9362-5502-4c3c-acac-3f1a16bb0c64": {
      "main": [
        [
          {
            "node": "4b18deea-cfc2-4a8d-b2f3-8b31cac0d573",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "ab5bcc9b-e2a0-4ec7-a4db-de512662549d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "becf9d6b-26a1-4498-9683-18ad15bc82ea": {
      "main": [
        [
          {
            "node": "a9ca3926-efbd-42fa-9388-b24625690145",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "7c8d30f1-df83-4ee1-83ce-32f6d9b0a810",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "a9ca3926-efbd-42fa-9388-b24625690145": {
      "main": [
        [
          {
            "node": "baad7161-51f5-4f29-8af0-39244e10eb60",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d5d6e8a4-a2da-4cd5-80fc-3cf7c294697d": {
      "main": [
        [
          {
            "node": "ab5bcc9b-e2a0-4ec7-a4db-de512662549d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "4b18deea-cfc2-4a8d-b2f3-8b31cac0d573": {
      "main": [
        [
          {
            "node": "becf9d6b-26a1-4498-9683-18ad15bc82ea",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "baad7161-51f5-4f29-8af0-39244e10eb60": {
      "main": [
        [
          {
            "node": "d5d6e8a4-a2da-4cd5-80fc-3cf7c294697d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7c8d30f1-df83-4ee1-83ce-32f6d9b0a810": {
      "main": [
        [
          {
            "node": "d5d6e8a4-a2da-4cd5-80fc-3cf7c294697d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "c0de0228-f79b-4b18-9e5d-ee6218259078": {
      "main": [
        [
          {
            "node": "ab5bcc9b-e2a0-4ec7-a4db-de512662549d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ab5bcc9b-e2a0-4ec7-a4db-de512662549d": {
      "main": [
        [],
        [
          {
            "node": "6bea9362-5502-4c3c-acac-3f1a16bb0c64",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "90a316f5-0f08-42f8-86a0-318bcc9814f9": {
      "main": [
        [
          {
            "node": "c0de0228-f79b-4b18-9e5d-ee6218259078",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Preguntas frecuentes

¿Cómo usar este flujo de trabajo?

Copie el código de configuración JSON de arriba, cree un nuevo flujo de trabajo en su instancia de n8n y seleccione "Importar desde JSON", pegue la configuración y luego modifique la configuración de credenciales según sea necesario.

¿En qué escenarios es adecuado este flujo de trabajo?

Avanzado - Creación de contenido, IA Multimodal

¿Es de pago?

Este flujo de trabajo es completamente gratuito, puede importarlo y usarlo directamente. Sin embargo, tenga en cuenta que los servicios de terceros utilizados en el flujo de trabajo (como la API de OpenAI) pueden requerir un pago por su cuenta.

Información del flujo de trabajo
Nivel de dificultad
Avanzado
Número de nodos21
Categoría2
Tipos de nodos8
Descripción de la dificultad

Adecuado para usuarios avanzados, flujos de trabajo complejos con 16+ nodos

Enlaces externos
Ver en n8n.io

Compartir este flujo de trabajo

Categorías

Categorías: 34