{
  "id": "IeYRHfuYjk7rTlBh",
  "meta": {
    "builderVariant": "mcp",
    "aiBuilderAssisted": true
  },
  "name": "Repost watermark-free TikTok videos to social media with Blotato",
  "tags": [],
  "nodes": [
    {
      "id": "64caea67-fe42-497a-8a81-717230f44796",
      "name": "Receive TikTok URL on Telegram",
      "type": "n8n-nodes-base.telegramTrigger",
      "position": [
        240,
        -128
      ],
      "parameters": {
        "updates": [
          "message"
        ],
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "de946548-a9c7-4242-a5be-504b49d86abd",
      "name": "Configuration",
      "type": "n8n-nodes-base.set",
      "position": [
        448,
        -128
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "a1",
              "name": "tiktok_url",
              "type": "string",
              "value": "={{ $('Receive TikTok URL on Telegram').item.json.message.text }}"
            },
            {
              "id": "a2",
              "name": "telegram_chat_id",
              "type": "string",
              "value": "={{ $('Receive TikTok URL on Telegram').item.json.message.chat.id }}"
            },
            {
              "id": "a3",
              "name": "post_caption",
              "type": "string",
              "value": "Check out this clip"
            },
            {
              "id": "a4",
              "name": "youtube_title",
              "type": "string",
              "value": "Reposted TikTok video"
            },
            {
              "id": "a5",
              "name": "tiktok_privacy_level",
              "type": "string",
              "value": "PUBLIC_TO_EVERYONE"
            },
            {
              "id": "a6",
              "name": "youtube_privacy_status",
              "type": "string",
              "value": "public"
            },
            {
              "id": "a7",
              "name": "is_ai_generated",
              "type": "boolean",
              "value": false
            },
            {
              "id": "a8",
              "name": "scraper_user_agent",
              "type": "string",
              "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "e298fd64-f94d-4033-bcde-736d827032eb",
      "name": "Get TikTok Video Page",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        688,
        -128
      ],
      "parameters": {
        "url": "={{ $('Configuration').item.json.tiktok_url }}",
        "options": {
          "response": {
            "response": {
              "fullResponse": true,
              "responseFormat": "text"
            }
          }
        },
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "User-Agent",
              "value": "={{ $('Configuration').item.json.scraper_user_agent }}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "991c373e-c7a5-48be-a89e-8325f43c1c67",
      "name": "Extract Raw Video URL",
      "type": "n8n-nodes-base.code",
      "position": [
        880,
        -128
      ],
      "parameters": {
        "jsCode": "const html = $input.first().json.data;\nconst headers = $input.first().json.headers || {};\nlet cookies = headers['set-cookie'] || [];\nif (Array.isArray(cookies)) { cookies = cookies.join('; '); }\n\nif (!html) {\n  throw new Error(\"HTML body is undefined. Check the previous node's output.\");\n}\n\nconst regex = /<script id=\"__UNIVERSAL_DATA_FOR_REHYDRATION__\" type=\"application\\/json\">([\\s\\S]*?)<\\/script>/;\nconst match = html.match(regex);\n\nif (!match) {\n  throw new Error(\"Could not find __UNIVERSAL_DATA_FOR_REHYDRATION__ script in the HTML. TikTok may have changed its page or blocked the request.\");\n}\n\nconst data = JSON.parse(match[1]);\nconst videoUrl = data?.__DEFAULT_SCOPE__?.[\"webapp.video-detail\"]?.itemInfo?.itemStruct?.video?.playAddr;\n\nif (!videoUrl) {\n  throw new Error(\"Could not find the raw video URL in the page data.\");\n}\n\nreturn [{ json: { videoUrl, cookies } }];"
      },
      "typeVersion": 2
    },
    {
      "id": "331f3bbd-beee-4718-a209-35c21753e740",
      "name": "Download Video Without Watermark",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1088,
        -128
      ],
      "parameters": {
        "url": "={{ $json.videoUrl }}",
        "options": {
          "response": {
            "response": {
              "responseFormat": "file"
            }
          },
          "allowUnauthorizedCerts": true
        },
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "User-Agent",
              "value": "={{ $('Configuration').item.json.scraper_user_agent }}"
            },
            {
              "name": "Referer",
              "value": "https://www.tiktok.com/"
            },
            {
              "name": "Accept",
              "value": "video/mp4,video/webm,video/*;q=0.9,application/octet-stream;q=0.8"
            },
            {
              "name": "Cookie",
              "value": "={{ $json.cookies }}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "e4a7bc81-7e1b-44c9-9287-5f2db49448af",
      "name": "Upload Video to Blotato",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        1328,
        -128
      ],
      "parameters": {
        "resource": "media",
        "useBinaryData": true
      },
      "credentials": {
        "blotatoApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "2959e53c-fdd9-4a34-a2a6-e6e49f9daa58",
      "name": "Publish to TikTok",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        1504,
        -128
      ],
      "parameters": {
        "options": {},
        "platform": "tiktok",
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "9332",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/9332",
          "cachedResultName": "docteur.firas"
        },
        "postContentText": "={{ $('Configuration').item.json.post_caption }}",
        "postContentMediaUrls": "={{ $('Upload Video to Blotato').item.json.url }}",
        "postCreateTiktokOptionPrivacyLevel": "={{ $('Configuration').item.json.tiktok_privacy_level }}",
        "postCreateTiktokOptionIsAiGenerated": "={{ $('Configuration').item.json.is_ai_generated }}"
      },
      "credentials": {
        "blotatoApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "7c2aaf54-3359-4bb3-832c-e46806c3248f",
      "name": "Publish to YouTube",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        1712,
        -128
      ],
      "parameters": {
        "options": {},
        "platform": "youtube",
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "8047",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/8047",
          "cachedResultName": "DR FIRASS (Dr. Firas)"
        },
        "postContentText": "={{ $('Configuration').item.json.post_caption }}",
        "postContentMediaUrls": "={{ $('Upload Video to Blotato').item.json.url }}",
        "postCreateYoutubeOptionTitle": "={{ $('Configuration').item.json.youtube_title }}",
        "postCreateYoutubeOptionPrivacyStatus": "={{ $('Configuration').item.json.youtube_privacy_status }}",
        "postCreateYoutubeOptionContainsSyntheticMedia": "={{ $('Configuration').item.json.is_ai_generated }}"
      },
      "credentials": {
        "blotatoApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "4d8988e8-4aad-4ef9-aa23-1bce8bd49336",
      "name": "Notify on Telegram",
      "type": "n8n-nodes-base.telegram",
      "position": [
        1904,
        -128
      ],
      "parameters": {
        "text": "Your TikTok video has been downloaded and reposted to your social accounts.",
        "chatId": "={{ $('Configuration').item.json.telegram_chat_id }}",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "03487ebd-84ed-489e-810b-a69909a2b3d9",
      "name": "Sticky Note 4bb2e89e",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -512,
        -336
      ],
      "parameters": {
        "width": 620,
        "height": 1032,
        "content": "# Repost watermark-free TikTok videos to social media with Blotato\n\n# \ud83d\udce5  [Open full documentation on Notion](https://automatisation.notion.site/Repost-watermark-free-TikTok-videos-to-social-media-with-Blotato-course-material-3983d6550fd981cca6decf915014630b)\n\n## Who is this for\nContent creators and social media managers who want to grab a TikTok video without its watermark and repost it to TikTok, YouTube and more, straight from Telegram.\n\n## How it works\n1. Send a TikTok video URL to your Telegram bot.\n2. The workflow fetches the video page, extracts the raw source and downloads the file without watermark.\n3. The clip is uploaded to [Blotato](https://blotato.com/?ref=firas) and reposted to your connected social accounts.\n4. You get a confirmation message back on Telegram.\n\n## Setup\n1. Add your Telegram bot credential to the trigger and the confirmation node.\n2. Add your [Blotato](https://blotato.com/?ref=firas) credential to the three Blotato nodes and pick the target account for each platform.\n3. Open the Configuration node and adjust the caption, titles and privacy levels.\n\n## Requirements\n- A Telegram bot (via BotFather)\n- A Blotato account with connected social accounts\n- Community node: this workflow uses the Blotato node, so it needs n8n self-hosted or n8n Cloud with Verified Community Nodes enabled.\n\n## Customization\n- Add more platforms by duplicating a Blotato Publish node and changing the platform.\n- Edit the default caption, YouTube title and privacy in the Configuration node.\n- Set is_ai_generated to true in Configuration if the clip is AI-made (honest disclosure on TikTok and YouTube)."
      },
      "typeVersion": 1
    },
    {
      "id": "5e19db35-f938-4399-ae55-589d3b78d7e0",
      "name": "Sticky Note 6da09d92",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        144,
        -320
      ],
      "parameters": {
        "color": 7,
        "width": 472,
        "height": 408,
        "content": "## 1. Receive & configure\nSend a TikTok URL to your Telegram bot. Everything you can tune (caption, titles, privacy, AI flag) lives in the Configuration node."
      },
      "typeVersion": 1
    },
    {
      "id": "27fc1f45-1a9b-4432-8942-76f244566d84",
      "name": "Sticky Note acc191fd",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        640,
        -320
      ],
      "parameters": {
        "color": 7,
        "width": 596,
        "height": 408,
        "content": "## 2. Download without watermark\nFetch the video page, extract the raw source URL and download the original file with no watermark."
      },
      "typeVersion": 1
    },
    {
      "id": "6bfa85c7-1b2e-406b-904c-b1d1e69973ff",
      "name": "Sticky Note 585b76f2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1264,
        -320
      ],
      "parameters": {
        "color": 7,
        "width": 960,
        "height": 408,
        "content": "## 3. Upload & publish everywhere\nUpload the file to Blotato, then repost to TikTok and YouTube. A Telegram message confirms when done."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "availableInMCP": true,
    "executionOrder": "v1"
  },
  "versionId": "05318c09-9ba4-4cf0-bcb1-107d9217d56c",
  "nodeGroups": [],
  "connections": {
    "Configuration": {
      "main": [
        [
          {
            "node": "Get TikTok Video Page",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Publish to TikTok": {
      "main": [
        [
          {
            "node": "Publish to YouTube",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Publish to YouTube": {
      "main": [
        [
          {
            "node": "Notify on Telegram",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Raw Video URL": {
      "main": [
        [
          {
            "node": "Download Video Without Watermark",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get TikTok Video Page": {
      "main": [
        [
          {
            "node": "Extract Raw Video URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload Video to Blotato": {
      "main": [
        [
          {
            "node": "Publish to TikTok",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Receive TikTok URL on Telegram": {
      "main": [
        [
          {
            "node": "Configuration",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download Video Without Watermark": {
      "main": [
        [
          {
            "node": "Upload Video to Blotato",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}