{
 "name": "FREE \u00b7 TikTok to Google Drive (no watermark)",
 "nodes": [
  {
   "id": "4dc30078-c7df-4bcb-91ed-953cd6da4a13",
   "name": "When clicking \u2018Test workflow\u2019",
   "type": "n8n-nodes-base.manualTrigger",
   "position": [
    -280,
    20
   ],
   "parameters": {},
   "typeVersion": 1
  },
  {
   "id": "5598aa10-f667-4023-b9de-fe07e86badec",
   "name": "Get TikTok Video Page Data",
   "type": "n8n-nodes-base.httpRequest",
   "position": [
    40,
    20
   ],
   "parameters": {
    "url": "={{ $json.tiktok_url }}",
    "options": {
     "response": {
      "response": {
       "fullResponse": true,
       "responseFormat": "text"
      }
     }
    },
    "sendHeaders": true,
    "headerParameters": {
     "parameters": [
      {
       "name": "User-Agent",
       "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/91.0.4472.124"
      }
     ]
    }
   },
   "typeVersion": 4.2
  },
  {
   "id": "734a5304-f67f-4ace-a1da-0d268664452c",
   "name": "Scrape raw video URL",
   "type": "n8n-nodes-base.code",
   "position": [
    480,
    20
   ],
   "parameters": {
    "jsCode": "const html = $input.first().json.data;\nconst headers = $input.first().json.headers || {};\nconst cookies = headers['set-cookie'] || [];\n\nif (!html) {\n  throw new Error(\"HTML body is undefined. Check the previous node's output.\");\n}\nconst regex = /<script id=\"__UNIVERSAL_DATA_FOR_REHYDRATION__\" type=\"application\\/json\">([\\s\\S]*?)<\\/script>/;\nconst match = html.match(regex);\n\nif (match) {\n  const jsonStr = match[1];\n  const data = JSON.parse(jsonStr);\n  const videoUrl = data?.__DEFAULT_SCOPE__?.[\"webapp.video-detail\"]?.itemInfo?.itemStruct?.video?.playAddr;\n  if (!videoUrl) {\n    throw new Error(\"Could not find video URL in the JSON data.\");\n  }\n  return [{ json: { videoUrl, cookies: cookies.join('; ') } }];\n} else {\n  throw new Error(\"Could not find __UNIVERSAL_DATA_FOR_REHYDRATION__ script in the HTML.\");\n}"
   },
   "typeVersion": 2
  },
  {
   "id": "f574ccb8-6f5f-4e55-a2d5-7ad775d3c4e5",
   "name": "Output video file without watermark",
   "type": "n8n-nodes-base.httpRequest",
   "position": [
    900,
    20
   ],
   "parameters": {
    "url": "={{ $json.videoUrl }}",
    "options": {
     "response": {
      "response": {
       "responseFormat": "file"
      }
     },
     "allowUnauthorizedCerts": true
    },
    "sendHeaders": true,
    "headerParameters": {
     "parameters": [
      {
       "name": "User-Agent",
       "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
      },
      {
       "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": "Accept-Language",
       "value": "en-US,en;q=0.5"
      },
      {
       "name": "Connection",
       "value": "keep-alive"
      },
      {
       "name": "Cookie",
       "value": "={{ $json.cookies }}"
      }
     ]
    }
   },
   "typeVersion": 4.2
  },
  {
   "id": "36629265-f139-433f-9603-0670a08be1ed",
   "name": "Upload to Google Drive",
   "type": "n8n-nodes-base.googleDrive",
   "position": [
    300,
    360
   ],
   "parameters": {
    "name": "={{ $node[\"Get TikTok Video Page Data\"].parameter[\"url\"].match(/\\/video\\/(\\d+)/)[1] + \".mp4\" }}",
    "driveId": {
     "__rl": true,
     "mode": "list",
     "value": "My Drive"
    },
    "options": {},
    "folderId": {
     "__rl": true,
     "mode": "list",
     "value": "root",
     "cachedResultUrl": "https://drive.google.com/drive",
     "cachedResultName": "/ (Root folder)"
    }
   },
   "credentials": {
    "googleDriveOAuth2Api": {
     "id": "ZvDuyVfbZJbDJXcS",
     "name": "Google Drive account"
    }
   },
   "typeVersion": 3
  },
  {
   "id": "94364c83-14ce-48c3-afe5-b7cd8addd2a0",
   "name": "Set file permissions to public with link",
   "type": "n8n-nodes-base.googleDrive",
   "position": [
    560,
    360
   ],
   "parameters": {
    "fileId": {
     "__rl": true,
     "mode": "id",
     "value": "={{ $json.id }}"
    },
    "options": {},
    "operation": "share",
    "permissionsUi": {
     "permissionsValues": {
      "role": "writer",
      "type": "anyone",
      "allowFileDiscovery": true
     }
    }
   },
   "credentials": {
    "googleDriveOAuth2Api": {
     "id": "ZvDuyVfbZJbDJXcS",
     "name": "Google Drive account"
    }
   },
   "typeVersion": 3
  },
  {
   "parameters": {
    "mode": "manual",
    "assignments": {
     "assignments": [
      {
       "id": "0c2bc56e-e254-41be-b41f-d5597245a29b",
       "name": "tiktok_url",
       "value": "https://www.tiktok.com/@username/video/0000000000000000000",
       "type": "string"
      }
     ]
    },
    "options": {}
   },
   "id": "5d8f08a7-28a3-480e-bf7c-988caeecd6ec",
   "name": "1. Paste your TikTok link",
   "type": "n8n-nodes-base.set",
   "typeVersion": 3.4,
   "position": [
    -60,
    20
   ]
  },
  {
   "parameters": {
    "content": "## FREE \u00b7 TikTok to Google Drive (no watermark)\n**by Maui Tech Hub** \u2014 free to use, modify and resell. No attribution required.\n\nPaste any TikTok link, run it once, and the video lands in your Google Drive\nwithout the watermark. No API key, no paid service, no downloader site\nwith pop-up ads.\n\n**How to use**\n1. Connect your Google Drive credential on both Drive nodes.\n2. Open **1. Paste your TikTok link** and paste the video URL.\n3. Click **Test workflow**.\n4. The file lands in your Drive, already shared as a public link.\n\nGood for: saving reference videos, backing up your own posts, building a\nclip library without leaving a trail of sketchy download sites.\n\nQuestions? mauitechhub.com",
    "height": 430,
    "width": 1050,
    "color": 4
   },
   "id": "6e30a98c-5276-44ce-8cf5-8987ddd0b7b2",
   "name": "About this workflow",
   "type": "n8n-nodes-base.stickyNote",
   "typeVersion": 1,
   "position": [
    -540,
    -540
   ]
  }
 ],
 "connections": {
  "Scrape raw video URL": {
   "main": [
    [
     {
      "node": "Output video file without watermark",
      "type": "main",
      "index": 0
     }
    ]
   ]
  },
  "Upload to Google Drive": {
   "main": [
    [
     {
      "node": "Set file permissions to public with link",
      "type": "main",
      "index": 0
     }
    ]
   ]
  },
  "Get TikTok Video Page Data": {
   "main": [
    [
     {
      "node": "Scrape raw video URL",
      "type": "main",
      "index": 0
     }
    ]
   ]
  },
  "When clicking \u2018Test workflow\u2019": {
   "main": [
    [
     {
      "node": "1. Paste your TikTok link",
      "type": "main",
      "index": 0
     }
    ]
   ]
  },
  "Output video file without watermark": {
   "main": [
    [
     {
      "node": "Upload to Google Drive",
      "type": "main",
      "index": 0
     }
    ]
   ]
  },
  "1. Paste your TikTok link": {
   "main": [
    [
     {
      "node": "Get TikTok Video Page Data",
      "type": "main",
      "index": 0
     }
    ]
   ]
  }
 },
 "settings": {
  "executionOrder": "v1"
 },
 "active": false
}