AutomationFlowsAI & RAG › Transform Documents Into Engaging Linkedin Posts with Gpt-4.1 and Email Approval

Transform Documents Into Engaging Linkedin Posts with Gpt-4.1 and Email Approval

ByYannick @yjoly on n8n.io

Ce template permet de transformer un document (PDF, TXT, DocX...) en post LinkedIn engageant, prêt à être publié ou validé par email, le tout avec l’aide d’une IA spécialisée en copywriting LinkedIn. Voici les étapes clés : Formulaire de dépôt : L'utilisateur charge un fichier…

Event trigger★★★★☆ complexityAI-powered12 nodesForm TriggerAgentOpenAI ChatLinkedInGoogle DocsHTTP RequestEmail SendEmail Read Imap
AI & RAG Trigger: Event Nodes: 12 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #4777 — we link there as the canonical source.

This workflow follows the Agent → Emailsend recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "f83c8742-ad0a-4ce4-83d8-9aa1bcd105f3",
      "name": "On form submission",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        0,
        -220
      ],
      "parameters": {
        "options": {},
        "formTitle": "Test",
        "formFields": {
          "values": [
            {
              "fieldType": "file",
              "fieldLabel": "fichier"
            },
            {
              "fieldLabel": "Text",
              "placeholder": "Copier le texte ici"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "ec90f76e-01bb-452a-967b-58e42bdbbff3",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        880,
        -220
      ],
      "parameters": {
        "text": "=Voici un doc peux tu m'en faire un post linkedin : Son titre est {{ $json.info.Title }} son contenu est : {{ $json.text }}, {{ $json.data }}, {{ $json.content }}, {{ $json.Text }},{{ $json.text }}",
        "options": {
          "systemMessage": "You are a helpful french assistant, tu es sp\u00e9cialiste Linkedin et tu cr\u00e9es des post hyper personnel en mon nom et tu utilises \"Je\" et engageant avec des \u00e9motic\u00f4nes mais pas trop pour maximiser le taux d'engagement tu utilises cette m\u00e9thode en 4 \u00e9tapes pour ton contenu :\nLa m\u00e9thode en 4 \u00e9tapes pour un contenu qui convertit\n\u00c9tape 1 : d\u00e9finir ton jeu\nIl existe 3 grands types de jeux, et tu dois en choisir un sans compromis :\n1. Le jeu de l'influenceur : Maximiser ta port\u00e9e pour la mon\u00e9tiser. Tu poursuis le reach.\n- Avantage : une port\u00e9e de fou qui fait plaisir \u00e0 l'\u00e9go\n- Inconv\u00e9nient : corr\u00e9lation faible entre performances du contenu et retomb\u00e9es business.\n2. Le leadership d'opinion : D\u00e9velopper ta marque personnelle pour occuper une th\u00e9matique et en \u00eatre au sommet. Tu mesures ton leadership \u00e0 la fr\u00e9quence \u00e0 laquelle on t'invite en conf\u00e9rence ou en podcast pour partager \u00e0 ce sujet.\n3. Le jeu entrepreneurial : Produire du contenu pour g\u00e9n\u00e9rer des ventes en s'adressant \u00e0 son client id\u00e9al, en partageant son expertise et ses r\u00e9sultats.\n\nMon conseil : choisis le jeu entrepreneurial.\n\n\u00c9tape 2 : d\u00e9finir ton client id\u00e9al\nLe client id\u00e9al se trouve \u00e0 l'entrecroisement de 4 facteurs :\n\n1. Probl\u00e8me-solution fit tr\u00e8s fort : Tu lui vends A, tu lui d\u00e9livres A, il est content de recevoir A et rach\u00e8te potentiellement A\n\n 2. Facilit\u00e9 de g\u00e9n\u00e9ration de r\u00e9sultats : Tu le connais, il est bien positionn\u00e9\n\n3. Il te paie bien, rapidement, beaucoup et sur la dur\u00e9e : Bonne lifetime value\n\n4. Fit humain : Tu pourrais aller d\u00e9jeuner avec lui\nL'anti-client, c'est l'inverse :\n- Il convertit lentement\n- Rechigne \u00e0 payer\n- Tu gal\u00e8res \u00e0 produire pour lui\n- Le fit humain est faible.\n\n \n\nIdentifier ces deux profils d\u00e9termine \u00e9norm\u00e9ment de choses et \u00e9volue dans le temps.\nL'anti-client, c'est l'inverse :\n- Il convertit lentement\n- Rechigne \u00e0 payer\n- Tu gal\u00e8res \u00e0 produire pour lui\n- Le fit humain est faible.\n\n \n\nIdentifier ces deux profils d\u00e9termine \u00e9norm\u00e9ment de choses et \u00e9volue dans le temps.\n\n\u00c9tape 3 : ne plus parler qu'\u00e0 ton client id\u00e9al\nVoici la ligne \u00e9ditoriale th\u00e9oris\u00e9e d'un entrepreneur. Il n'y a que trois sujets dont parler :\n\n \n\nLe probl\u00e8me : Tu explores la probl\u00e9matique sous toutes ses dimensions :\n- Le co\u00fbt d'opportunit\u00e9 de ne pas le r\u00e9soudre\n- L'urgence\n- Les cons\u00e9quences.\n\n \n\nLe probl\u00e8me doit \u00eatre douloureux, urgent, reconnu.\n\n \n\nLes solutions concr\u00e8tes : Tu transmets ton expertise et d\u00e9montres pourquoi ton option est la meilleure pour ce client id\u00e9al sp\u00e9cifiquement.\n\n \n\nLes preuves : Cas clients, t\u00e9moignages qui illustrent tout \u00e7a. C'est ce qu'on fait jamais assez car ces posts g\u00e9n\u00e8rent moins de port\u00e9e, mais nettement plus de conversions.\n\n \n\n95% du contenu doit corr\u00e9ler \u00e0 ces 3 piliers : probl\u00e8me,solution,preuve.\n\n\u00c9tape 4 : on s'adresse \u00e0 des TPE\n\nTu n'h\u00e9sites pas \u00e0 citer des r\u00e9f\u00e9rences et des parties de texte int\u00e9ressantes ! Ton texte sera viable sans que j'intervienne pour mettre des liens ou autres, tu n'ajoutes pas dans ton texte Joker : Je suis une IA d\u00e9guis\u00e9e !\n\n \n\n"
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2
    },
    {
      "id": "c408d312-3947-4c28-b8a9-2a4cf4ae1353",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        968,
        0
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini",
          "cachedResultName": "gpt-4.1-mini"
        },
        "options": {
          "temperature": 0.7
        }
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "906ae331-b613-41b9-840a-c0ccb055a874",
      "name": "Extract from File",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        660,
        -420
      ],
      "parameters": {
        "options": {},
        "operation": "pdf",
        "binaryPropertyName": "fichier"
      },
      "typeVersion": 1
    },
    {
      "id": "7bb8147e-ae70-46bb-8060-86bfcb365c93",
      "name": "LinkedIn",
      "type": "n8n-nodes-base.linkedIn",
      "position": [
        1680,
        -320
      ],
      "parameters": {
        "text": "={{ $('AI Agent').item.json.output }}",
        "person": "9wNP5HmVRE",
        "additionalFields": {
          "visibility": "PUBLIC"
        },
        "binaryPropertyName": "Image",
        "shareMediaCategory": "IMAGE"
      },
      "credentials": {
        "linkedInOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "e2b861ad-ce2c-4337-a804-b5880e1df85f",
      "name": "Switch",
      "type": "n8n-nodes-base.switch",
      "position": [
        220,
        -220
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "outputKey": "pdf",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "97d20e90-c038-4898-8e79-640e2c95a34c",
                    "operator": {
                      "type": "string",
                      "operation": "contains"
                    },
                    "leftValue": "={{ $json.fichier[0].mimetype }}",
                    "rightValue": "pdf"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "docx",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "22119b44-83c0-49e5-bbf3-7b2896c65314",
                    "operator": {
                      "type": "string",
                      "operation": "contains"
                    },
                    "leftValue": "={{ $json.fichier[0].mimetype }}",
                    "rightValue": "document"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "txt",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "8b3d7fc3-a5d0-48d0-87cb-587465f04b2f",
                    "operator": {
                      "type": "string",
                      "operation": "contains"
                    },
                    "leftValue": "={{ $json.fichier[0].mimetype }}",
                    "rightValue": "text"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "70110653-142e-499e-9104-487699413902",
                    "operator": {
                      "type": "string",
                      "operation": "notEmpty",
                      "singleValue": true
                    },
                    "leftValue": "{{ $json.Text }}",
                    "rightValue": "="
                  }
                ]
              }
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 3.2
    },
    {
      "id": "9d798da2-c2c9-4483-bca9-2e3b8ef070d5",
      "name": "Extract from File1",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        660,
        -20
      ],
      "parameters": {
        "options": {},
        "operation": "text",
        "binaryPropertyName": "fichier"
      },
      "typeVersion": 1
    },
    {
      "id": "03e9122f-99c6-4a26-8373-2e1c7c4136bd",
      "name": "Google Docs",
      "type": "n8n-nodes-base.googleDocs",
      "position": [
        660,
        -220
      ],
      "parameters": {
        "operation": "get",
        "documentURL": "={{ $json.data }}"
      },
      "credentials": {
        "googleDocsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "7829c078-fb7b-4296-ba42-c7ba76ef7db7",
      "name": "HTTP Request2",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        440,
        -220
      ],
      "parameters": {
        "url": "https://hook.integrator.boost.space/w71nefqvpxa60j1u58gd44nwbogpoo25",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "binaryData",
        "inputDataFieldName": "fichier"
      },
      "typeVersion": 4.2
    },
    {
      "id": "afdc4cc8-8af5-42c5-a813-da63132e53f1",
      "name": "Send Email",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        1260,
        -220
      ],
      "parameters": {
        "message": "=<p>Tu valides ou pas ?</p>\n\n {{ $json.output }}",
        "options": {
          "appendAttribution": false
        },
        "subject": "LinkedIn ?",
        "toEmail": "user@example.com",
        "fromEmail": "user@example.com",
        "operation": "sendAndWait",
        "formFields": {
          "values": [
            {
              "fieldType": "file",
              "fieldLabel": "Image"
            },
            {
              "fieldLabel": "Tu valides (oui/non)",
              "requiredField": true
            }
          ]
        },
        "responseType": "customForm"
      },
      "credentials": {
        "smtp": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "0e65e913-9a14-4f5d-b1d3-661efff5396d",
      "name": "Switch1",
      "type": "n8n-nodes-base.switch",
      "position": [
        1480,
        -220
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "488f8643-67da-4546-b4ae-c49a3fe0ef00",
                    "operator": {
                      "type": "string",
                      "operation": "contains"
                    },
                    "leftValue": "={{ $json.data[\"Tu valides (oui/non)\"] }}",
                    "rightValue": "oui"
                  }
                ]
              }
            },
            {
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "7f74c53e-61b2-4977-8342-d54c705a8cbb",
                    "operator": {
                      "type": "string",
                      "operation": "contains"
                    },
                    "leftValue": "={{ $json.data[\"Tu valides (oui/non)\"] }}",
                    "rightValue": "non"
                  }
                ]
              }
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 3.2
    },
    {
      "id": "94ac12d5-86a4-4fdc-a778-b42e8fdbe0e8",
      "name": "Email Trigger (IMAP)",
      "type": "n8n-nodes-base.emailReadImap",
      "position": [
        40,
        -540
      ],
      "parameters": {
        "format": "resolved",
        "options": {
          "customEmailConfig": "[\"UNSEEN\", [\"FROM\", \"user@example.com\"]]"
        }
      },
      "credentials": {
        "imap": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    }
  ],
  "connections": {
    "Switch": {
      "main": [
        [
          {
            "node": "Extract from File",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "HTTP Request2",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Extract from File1",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Switch1": {
      "main": [
        [
          {
            "node": "LinkedIn",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    },
    "AI Agent": {
      "main": [
        [
          {
            "node": "Send Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Email": {
      "main": [
        [
          {
            "node": "Switch1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Docs": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request2": {
      "main": [
        [
          {
            "node": "Google Docs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract from File": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Extract from File1": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "On form submission": {
      "main": [
        [
          {
            "node": "Switch",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Email Trigger (IMAP)": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Ce template permet de transformer un document (PDF, TXT, DocX...) en post LinkedIn engageant, prêt à être publié ou validé par email, le tout avec l’aide d’une IA spécialisée en copywriting LinkedIn. Voici les étapes clés : Formulaire de dépôt : L'utilisateur charge un fichier…

Source: https://n8n.io/workflows/4777/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

K&S-Media Downloadliste SQL. Uses httpRequest, agent, googleSheets, lmChatOpenAi. Event-driven trigger; 97 nodes.

HTTP Request, Agent, Google Sheets +3
AI & RAG

Code Schedule. Uses memoryBufferWindow, agent, stickyNote, outputParserStructured. Event-driven trigger; 45 nodes.

Memory Buffer Window, Agent, Output Parser Structured +8
AI & RAG

3790. Uses memoryBufferWindow, agent, outputParserStructured, lmChatOpenAi. Event-driven trigger; 45 nodes.

Memory Buffer Window, Agent, Output Parser Structured +8
AI & RAG

Stock Analysis Agent (Hebrew, RTL, GPT-4o)

Memory Buffer Window, Agent, Output Parser Structured +8
AI & RAG

This workflow creates an automated Product Intelligence Engine that continuously collects signals from multiple product sources and generates structured PRD updates using AI. It ingests conversations,

Slack Trigger, Form Trigger, HTTP Request +9