Pendant longtemps, j’ai eu le même problème que beaucoup de créateurs : de bonnes idées de posts LinkedIn… qui ne voyaient jamais le jour.
L’idée surgit entre deux rendez‑vous, je me dis “il faut que je poste ça”, puis le quotidien reprend le dessus et la fenêtre se referme.

Je voulais une solution qui m’aide sur deux fronts :

  1. ne plus perdre les idées de posts,
  2. publier de façon régulière sans bloquer une heure entière dans mon agenda chaque semaine.

C’est ce qui m’a poussé à construire un petit workflow n8n qui choisit une idée dans mon “second cerveau”, la publie automatiquement sur LinkedIn chaque semaine et me notifie sur Telegram.

Dans cet article, je détaille ce workflow étape par étape.


Les briques de base du système

Avant de rentrer dans le détail des nœuds, voici les trois composants principaux de ce setup :

  • n8n pour orchestrer le workflow d’un bout à l’autre (planification, logique, appels API).
  • LinkedIn pour la publication automatique via le nœud dédié, qui permet de créer des posts texte ou image sur un profil ou une page.
  • Telegram pour recevoir une notification avec le lien du post publié, directement sur mon téléphone.

Côté stockage, j’utilise les Data Tables n8n comme base de données légère pour mes idées de posts LinkedIn. Chaque ligne représente un brouillon, avec au minimum :

  • le texte du post,
  • une éventuelle URL d’image,
  • un booléen Posted qui indique si l’idée a déjà été utilisée.

Vue d’ensemble du workflow

Conceptuellement, le workflow fait quatre choses :

  1. Se déclencher automatiquement tous les mercredis à 11h30.
  2. Récupérer une idée de post non publiée dans la Data Table.
  3. Publier sur LinkedIn, avec ou sans image selon les données disponibles.
  4. Marquer l’idée comme “Posted = true” dans la Data Table, puis m’envoyer un message Telegram avec le lien du post.

Voyons maintenant chaque nœud un par un.


Étape 1 – Le déclencheur hebdomadaire

Le point d’entrée du workflow est un nœud Schedule Trigger.

  • Intervalle : Weeks
  • Weeks Between Triggers : 1
  • Trigger on weekdays : mercredi
  • Trigger at Hour : 11
  • Trigger at Minute : 30

Concrètement, n8n lance le workflow chaque mercredi à 11h30, sans que j’aie à y penser. Ce nœud est conçu pour gérer précisément ce genre de scénarios récurrents (hebdo, mensuel, cron, etc.).

Sortie de cette étape : un item “vide” qui sert juste de signal de départ pour la suite.


Étape 2 – Sélectionner “le post de la semaine”

Juste après le déclencheur, j’utilise un nœud Data Table – Get configuré sur ma table “LinkedIn Posts Ideas”.

Paramètres clés :

  • Operation : Get many (dans ta config JSON, tu utilises un get filtré avec limit: 1)
  • Data Table : LinkedIn Posts Ideas
  • Filters : Posted isEmpty
  • Limit : 1

L’idée est simple :

  • ne récupérer qu’une seule idée par exécution ;
  • uniquement parmi celles qui n’ont pas encore été marquées comme publiées.

Le résultat est un item JSON du type :

{
"id": "123",
"Post": "Texte de mon post LinkedIn…",
"Picture": "https://…/image.png",
"Posted": null
}

C’est la matière première de la publication de la semaine.


Étape 3 – Router selon la présence d’une image

Ensuite vient la partie un peu plus “logique métier” : un nœud Switch (dans mon workflow : “Route if Picture attached”).

Son rôle : tester si le champ Picture comporte une URL exploitable ou non, et choisir le bon chemin dans le workflow.

La logique que j’utilise :

  • Sortie “Picture” si Picture.length > 10
  • Sortie “No Picture” si Picture.length === 0

C’est un test très pragmatique pour savoir si une URL d’image ressemble à quelque chose de valide.
Résultat :

  • Si une image est renseignée, on va d’abord la télécharger, puis publier un post LinkedIn avec image.
  • Si aucune image n’est fournie, on part directement sur un post texte.

Étape 4 – Télécharger l’image (optionnel)

Sur la branche “Picture”, j’enchaîne avec un nœud HTTP Request appelé “Download the Picture”.

Paramètres :

  • URL : {{ $json.Picture }}
  • Method : GET

Le but est de récupérer le binaire de l’image pour que le nœud LinkedIn puisse la publier correctement. n8n sait gérer ce flux de données vers les nœuds qui acceptent des fichiers, LinkedIn y compris.​

À la sortie de ce nœud, j’ai un item enrichi avec les données du fichier image.


Étape 5 – Publier sur LinkedIn (avec ou sans image)

Ensuite, les deux branches convergent vers deux nœuds LinkedIn distincts :​

  1. LinkedIn Post on my Profil with Picture
    • Person : ID de mon profil LinkedIn
    • Text : {{ $json.Post }}
    • Media Category : IMAGE
    • L’image vient de la sortie du nœud HTTP Request.
  2. LinkedIn Post on my Profil
    • Person : même ID de profil
    • Text : {{ $('Get Post of the week').item.json.Post }}
    • Pas de media category, c’est un post texte.

Dans les deux cas, le nœud LinkedIn utilise les credentials OAuth que j’ai configurés dans n8n pour se connecter à mon compte et créer le post. La documentation officielle détaille ces paramètres (Post as Person/Organization, Text, Media Category, etc.).

LinkedIn renvoie ensuite un objet contenant notamment l’urn du post, qui me servira plus loin pour construire l’URL publique.


Étape 6 – Marquer l’idée comme “publiée”

Une fois la publication effectuée, je dois éviter de republier la même idée les semaines suivantes.

Pour ça, j’utilise un second nœud Data Table – Update, relié aux deux nœuds LinkedIn (avec et sans image).

Paramètres :

  • Operation : Update
  • Data Table : “LinkedIn Posts Ideas”
  • Filter : id = {{ $('Get Post of the week').item.json.id }}
  • Columns (mapping) :
    • Posted = true

Ce nœud applique la mise à jour uniquement sur la ligne correspondant à l’idée publiée. La prochaine fois que le workflow s’exécutera, cette idée sera exclue du Get initial, puisqu’elle ne sera plus “Posted isEmpty”.

En pratique, ça me donne un tableau qui se vide progressivement au fil des semaines, sans doublons de posts.


Étape 7 – Notification Telegram avec le lien du post

Dernière étape : me tenir au courant que le post est bien en ligne.

J’utilise un nœud Telegram (Send Message) configuré avec :

  • Chat ID : mon chat privé ou celui de mon bot
  • Text : un message formaté qui contient :
    • une phrase de confirmation,
    • l’URL du post LinkedIn,
    • le texte du post (pour relecture rapide).

Exemple de texte que j’envoie :

Message publié sur LinkedIn: https://www.linkedin.com/feed/update/{{ $json.urn }} — {{ $('Get Post of the week').item.json.Post }}

Résultat : quelques secondes après la publication, je reçois une notification Telegram avec le lien cliquable. Je peux vérifier que tout est ok, ou éventuellement corriger directement sur LinkedIn si besoin.


Pourquoi ce workflow change vraiment la donne

Au final, ce workflow ne fait rien de “magique”, mais il adresse très bien quelques frictions clés :

  • Régularité sans friction : je n’ai plus besoin de penser chaque mercredi à “qu’est‑ce que je poste aujourd’hui ?”. Le slot est rempli automatiquement.
  • Zéro double publication : la Data Table joue le rôle de liste d’idées, avec un statut clair “publié / pas encore publié”.
  • Notification systématique : je garde un œil sur ce qui sort, sans devoir surveiller LinkedIn en permanence.
  • Évolutivité : je peux facilement enrichir ce workflow (ajouter une étape IA, générer des visuels, pousser aussi vers d’autres réseaux, etc.).

Et surtout, ça libère du temps mental : je peux me concentrer sur collecter de bonnes idées et améliorer le fond, plutôt que sur la mécanique de publication.


Pistes d’extensions possibles

Ce workflow est une base. Voici quelques idées pour aller plus loin :

  • Ajouter une étape IA avant la Data Table pour reformuler / enrichir les brouillons.
  • Générer automatiquement une image de couverture à partir du texte du post.
  • Dupliquer la logique pour une page entreprise LinkedIn, en changeant simplement l’ID dans le nœud LinkedIn.​
  • Envoyer un récap hebdo des posts publiés dans Notion ou par email.