▶ Vidéo · 33s

Une vidéo TikTok, trois plateformes — le workflow n8n complet

n8n + Apify + OpenAI · Repurposing automatique · Niveau intermédiaire

Tu passes deux heures sur une vidéo, tu la postes sur TikTok, et elle meurt là. Pendant ce temps, la même vidéo aurait pu tourner sur YouTube Shorts et sur Instagram Reels — sans une minute de travail en plus.

Voici le workflow qui le fait. Il va chercher ta dernière vidéo TikTok, récupère le fichier sans watermark, fait réécrire la description par l'IA pour chaque plateforme, puis publie sur YouTube et Instagram. Tu le télécharges, tu remplis cinq champs, tu l'actives.

Le workflow n8n, prêt à importer

24 nœuds, entièrement commenté à l'intérieur. Importé et validé sur une instance n8n réelle avant d'être publié ici.

◈ Télécharger le workflow n8n (.json)

Ce qu'il te faut

  • n8n — auto-hébergé ou cloud
  • Un compte Apify (le plan gratuit suffit largement) pour lister tes dernières vidéos TikTok
  • Une clé OpenAI pour la réécriture des descriptions
  • Une chaîne YouTube connectée en OAuth2 dans n8n
  • Un compte Instagram professionnel relié à une page Facebook (l'API refuse les comptes perso)
  • Un endroit où héberger le fichier le temps de la publication : un bucket S3/R2, ou ton propre micro-service

L'architecture, en dix étapes

1

Un déclencheur planifié, deux fois par jour.

2

Un nœud Configuration qui centralise les cinq valeurs à personnaliser.

3

Apify scrape ton profil TikTok et renvoie tes dernières publications.

4

Un filtre ne garde que les vidéos publiées aujourd'hui, puis on en prend une seule.

5

On ouvre la page TikTok de la vidéo et on en extrait l'URL de lecture directe.

6

Téléchargement du fichier — c'est le master, il n'a jamais eu de watermark.

7

Upload sur ton hébergement, qui renvoie une URL publique en 9:16.

8

Un agent GPT-4o réécrit un titre + une description pour YouTube et une légende pour Instagram.

9

Upload resumable vers YouTube, en privé avec publication programmée à +1 h.

10

Container Instagram, attente d'encodage, publication du Reel, puis une ligne dans un Google Sheet.

Le watermark : on ne l'enlève pas, on ne le télécharge jamais

C'est le point que tout le monde rate. On voit des gens tenter de recadrer, de flouter, ou de passer par des sites tiers qui « suppriment le watermark » — et qui te rendent une vidéo réencodée, floue, avec leur propre logo.

Le watermark n'est ajouté que sur le fichier d'export, celui du bouton « Enregistrer ». Le fichier que TikTok sert à son propre lecteur web, lui, est propre. Il est référencé dans un bloc JSON planqué dans le HTML de la page :

// Nœud Code — extrait la vidéo sans watermark const html = $input.first().json.data; const cookies = ($input.first().json.headers || {})['set-cookie'] || []; const regex = /<script id="__UNIVERSAL_DATA_FOR_REHYDRATION__" type="application\/json">([\s\S]*?)<\/script>/; const match = html.match(regex); if (!match) throw new Error("TikTok a servi une page anti-bot : change le User-Agent."); const data = JSON.parse(match[1]); const item = data?.__DEFAULT_SCOPE__?.['webapp.video-detail']?.itemInfo?.itemStruct; return [{ json: { videoUrl: item?.video?.playAddr, // ← le master, sans watermark description: (item?.desc || '').trim(), cookies: cookies.join('; ') // ← indispensable pour l'étape suivante }}];
⚠ Le piège qui coûte deux heures

Cette playAddr ne se télécharge pas toute seule. Sans les cookies renvoyés par la page et un en-tête Referer: https://www.tiktok.com/, le CDN répond 403 — et le message d'erreur ne dit rien d'utile. Les cookies sont dans headers['set-cookie'] de la requête précédente : il faut donc récupérer la page avec fullResponse: true, sinon ils sont perdus.

Les cinq valeurs à remplacer

Tout est regroupé dans le nœud Configuration, en tête de workflow. Rien à chercher ailleurs :

tiktokProfile → ton pseudo TikTok, sans le @ apifyToken → apify.com → Settings → Integrations hostEndpoint → une URL qui accepte un upload multipart et renvoie { "url": "https://..." } igUserId → l'ID de ton compte Instagram business igAccessToken → ton token Facebook longue durée

Puis les credentials à brancher : YouTube OAuth2 sur les deux nœuds YouTube, OpenAI sur le nœud GPT-4o, Google Sheets sur le journal.

⚠ Instagram ne prend pas de fichier

L'API Graph ne sait pas recevoir un upload : tu lui donnes une video_url et c'est elle qui va la chercher. Cette URL doit être publique, en HTTPS, sans authentification. C'est toute la raison d'être de l'étape 7 — et la raison pour laquelle un lien Google Drive ou un stockage protégé par cookie ne marchera jamais ici.

Une description par réseau, pas un copier-coller

Reposter la description TikTok telle quelle est la façon la plus rapide de ne rien gagner. Sur YouTube, les gens cherchent : le titre doit contenir les mots qu'on tape. Sur Instagram, personne ne cherche : la première ligne doit accrocher en deux secondes.

L'agent produit donc les deux d'un coup, dans un seul JSON :

{ "youtube_title": "90 caractères max, une promesse cherchable", "youtube_description": "2 à 4 phrases + hashtags à la fin", "youtube_tags": ["8", "à", "12", "mots-clés"], "instagram_caption": "accroche courte, puis ~12 hashtags" }

Le nœud suivant nettoie cette réponse avant de la parser. Ce n'est pas de la paranoïa : un LLM renvoie régulièrement son JSON entouré de ```json, avec des guillemets typographiques ou une virgule en trop. Sans ce nettoyage, le workflow casse une fois sur cinq, au hasard.

⚠ YouTube : publishAt exige privacyStatus private

Si tu veux programmer la sortie (le workflow la place à +1 h), la vidéo doit être envoyée en privacyStatus: "private". En public, l'API accepte la requête, ignore silencieusement publishAt et publie tout de suite. Aucune erreur, juste une vidéo en ligne au mauvais moment.

Ce à quoi t'attendre

  • Tu postes sur TikTok le soir, la vidéo est sur les trois plateformes le lendemain matin
  • Trois textes différents, adaptés à trois audiences, sans les écrire
  • Aucun réencodage : c'est le fichier d'origine, en qualité d'origine, sans watermark
  • Coût réel : quelques centimes d'OpenAI par vidéo, le reste tient dans les paliers gratuits
💡 Commence par une seule plateforme

Désactive le bloc Instagram au premier essai et fais tourner uniquement la branche YouTube. Les deux tiers des problèmes de départ viennent des tokens Facebook — inutile de les déboguer en même temps que le reste de la chaîne.

◈ Télécharger le workflow n8n (.json)

Et si tu bloques ?

Le workflow est complet et gratuit — mais le brancher sur tes comptes reste la partie ingrate : le token Facebook longue durée, le compte Instagram qui doit être relié à une page, l'hébergement du fichier. C'est là que la plupart des gens abandonnent, pas sur la logique.

Si tu préfères que ce soit branché et testé une bonne fois, décris ton activité en deux lignes : je te renvoie sous 24 h les trois automatisations à mettre en place en premier chez toi, et ce que ça te fait gagner. C'est gratuit et sans engagement.

Fais-toi accompagner sur ton automatisation

Audit gratuit en 24 h : les 3 tâches à automatiser en premier dans ton activité, et le gain estimé pour chacune.

Recevoir mon audit gratuit →
← Retour aux ressources