Blogueur – Automatisation complète de la recherche, de la création, de l'optimisation et de la publication de contenu pilotée par l'IA
Ceci est unContent Creation, Multimodal AIworkflow d'automatisation du domainecontenant 35 nœuds.Utilise principalement des nœuds comme If, Set, Code, Discord, HttpRequest. Utiliser Gemini, Ideogram AI et WordPress pour automatiser la création et la publication de blog
- •Token Bot Discord ou Webhook
- •Peut nécessiter les informations d'identification d'authentification de l'API cible
- •Informations d'identification Google Sheets API
- •Clé API OpenAI
- •Clé API Google Gemini
Nœuds utilisés (35)
Catégorie
{
"id": "3LIrbty8O6tBURFs",
"meta": {
"instanceId": "bc8ca75c203589705ae2e446cad7181d6f2a7cc1766f958ef9f34810e53b8cb2",
"templateCredsSetupCompleted": true
},
"name": "Blog Publisher – Complete AI-Powered Content Research, Creation, Optimization, and Publishing Automation",
"tags": [],
"nodes": [
{
"id": "2c398975-2f74-43e6-8450-e69392869450",
"name": "Google Gemini Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
-3696,
256
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"id": "xbK4CzkeE3YrIut4",
"name": "Shan API"
}
},
"typeVersion": 1
},
{
"id": "ece45d3f-313b-48ab-b086-1250b695ea86",
"name": "Google Gemini Chat Model1",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
-3312,
256
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"id": "xbK4CzkeE3YrIut4",
"name": "Shan API"
}
},
"typeVersion": 1
},
{
"id": "9823b639-66c5-4cd8-b47d-94dc080e7eae",
"name": "Effectuer la recherche sur le sujet",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-3696,
32
],
"parameters": {
"text": "=Keyword: {{ $json['Focus Keyword'] }}\nContent Topic: {{ $json['Content Topic'] }}",
"options": {
"systemMessage": "I will provide a content topic and a targeted keyword. As an expert content writer, please conduct comprehensive research and deliver a detailed, actionable report that will help craft a highly engaging, user-focused blog post. Your report should include:\n\nSearch Intent Analysis: Identify the main search intent (informational, commercial, navigational, transactional) behind the keyword and explain why it matters for content strategy.\n\nTop Competitor Insights: Analyze the top 5–10 ranking pages for this keyword. For each, provide the title, meta description, URL, and a brief summary highlighting their approach and content strengths.\n\nContent Gaps & Opportunities: Identify what these top pages miss or underdeliver on, revealing opportunities to make my blog more valuable and distinctive.\n\nAudience Profile & Needs: Describe the target audience’s demographics, pain points, desires, and the key questions they want answered related to this topic.\n\nTrending Subtopics & Related Keywords: List relevant, trending subtopics and related keywords, including search volume and difficulty metrics where available, to help expand and deepen the blog content.\n\nLSI Keywords & Related Keywords: Provide 5 LSI (Latent Semantic Indexing) keywords and 5 closely related keywords that can be incorporated to improve SEO and content relevance.\n\nSEO-Optimized Blog Outline: Propose a detailed blog outline with clear headings and subheadings designed to maximize SEO impact and reader engagement.\n\nTrusted Sources & References: Provide a curated list of credible sources and references for fact-checking and citation to ensure authoritative and trustworthy content.\n\nPlease make your recommendations practical and focused on creating an engaging, authoritative, and SEO-friendly blog post that stands out."
},
"promptType": "define"
},
"typeVersion": 2.2
},
{
"id": "e34a1527-856d-4d83-975e-87eb5b79a5ec",
"name": "Rédiger le contenu",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-3312,
32
],
"parameters": {
"text": "=- **Keyword:** {{ $('Pass 1 Blog Topic').item.json['Focus Keyword'] }}\n- **Content Topic:** {{ $('Pass 1 Blog Topic').item.json['Content Topic'] }}\n- **Target Page:** {{ $('Pass 1 Blog Topic').item.json['Target Page'] }}\n- **Words:** {{ $('Pass 1 Blog Topic').item.json.Words }}\n\n - Reaesrch: {{ $json.output }}",
"options": {
"systemMessage": "=You are an expert content writer. Write an 800–1000 word article in clear, easy-to-read, conversational English. Use short sentences, avoid heavy jargon, and explain technical terms simply for an Indian investor audience. The content must have a high readability score.\n\nInstructions:\nStart content with the Question.\nDo not use AI Terms Like Imagine\nUse simple HTML with only these tags: <h1>, <h2>, <p>, <ul>, <ol>, <b>, <i>, <a>.\n\nStart directly with the content section—no <head>, <footer>, CSS, or extra formatting.\n\nIntegrate the primary keyword naturally without repeating it too closely. Use it once in a subheading (<h2> or <h3>), phrased naturally (e.g., instead of “buy sell unlisted shares India,” write “buy and sell unlisted shares in India”).\n\nAdd relevant LSI keywords naturally to provide context.\n\nInclude at least 3 internal links to relevant pages on the target website. Use descriptive anchor text (not exact keywords) and apply this inline CSS to each link: <a style=\"color: #256181; font-weight: 700\">.\n\nKeep paragraphs short (3–4 sentences) to enhance readability.\n\nAvoid repeated points and do not use em dashes or \\n line breaks in the HTML.\n\nWrite as if explaining to a smart friend, with practical tips and examples tailored for Indian investors.\n\nAvoid keyword stuffing; integrate keywords naturally throughout the text.\n\nDeliverable:\nOutput only the HTML content—no explanations or extra comments."
},
"promptType": "define"
},
"typeVersion": 2.2
},
{
"id": "7db51d0d-7467-4b9b-983d-032e0b7b8a5c",
"name": "Vérifier le statut de publication du blog",
"type": "n8n-nodes-base.if",
"position": [
-4896,
48
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "or",
"conditions": [
{
"id": "ad02573b-8ca4-4657-9e4a-ee6490d9cce3",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $json['Weekly Frequency'] }}",
"rightValue": "={{ $now.toFormat('ccc') }}"
},
{
"id": "b170466b-7f1b-4575-8749-1e6185cae9f8",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json['Weekly Frequency'] }}",
"rightValue": "Daily"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "a7d9e1aa-bc4f-4ca8-806c-aca8a8fd7762",
"name": "Transmettre 1 sujet de blog",
"type": "n8n-nodes-base.code",
"position": [
-3936,
32
],
"parameters": {
"jsCode": "// Keep only the first item\nreturn [items[0]];\n"
},
"typeVersion": 2
},
{
"id": "da031e62-192f-4be0-b4e0-df6a60153fe0",
"name": "Vérifier la qualité du contenu",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-2960,
32
],
"parameters": {
"text": "={{ $json.output }}",
"options": {
"systemMessage": "Please evaluate this content for its humanized writing style by answering the following:\n\nDoes the content use a conversational tone that feels natural and friendly?\n\nAre personal pronouns (I, you, we) used effectively to engage the reader?\n\nAre sentences short, clear, and easy to understand?\n\nIs the language simple and free of jargon or complex terms?\n\nDoes the content show empathy or emotional connection with the reader?\n\nAre stories, examples, or anecdotes used to illustrate key points?\n\nAre questions included to engage the reader and encourage interaction?\n\nIs the writing primarily in active voice rather than passive?\n\nDoes the content include contractions to sound more natural?\n\nAre paragraphs short and well-structured with bullet points or lists where appropriate?\n\nDoes the content convey authenticity and personality?\n\nIs the content clearly focused on the reader’s needs, problems, or desires?\n\n\n\nI want what to improve in the content as output "
},
"promptType": "define"
},
"typeVersion": 2.2
},
{
"id": "62c25f2c-5311-4df1-8d55-202bbc033843",
"name": "Corriger les problèmes de qualité",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-2608,
32
],
"parameters": {
"text": "=Original Content\n\n{{ $('Write the Content').item.json.output }}\n\nQC Feedback\n{{ $json.output }}",
"options": {
"systemMessage": "Assume you are and expert content writer and this the feedback of the content. do not change the entire flow of the content just optimize the content base on the feedback\nInstructions:\nContent should in the same html structure\nNo Extra comment or expiations\nPlain simple HTML format content\nDo not Use the ```html and \\n for line break\n1 mistake related to each\nIncorrect comma usage (missing commas, comma splices, or overusing commas)\nMisuse of apostrophes (its vs. it’s)\nOveruse or misuse of semicolons and colons\nNot using periods or question marks properly\nExtra spaces between words or after punctuation"
},
"promptType": "define"
},
"typeVersion": 2.2
},
{
"id": "0405e8b2-c932-448d-8cee-6b1438fd5be7",
"name": "Boucler sur les éléments",
"type": "n8n-nodes-base.splitInBatches",
"position": [
-4640,
32
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "542bf697-9b66-44c9-a1ee-46a013828b00",
"name": "Déclencheur programmé",
"type": "n8n-nodes-base.scheduleTrigger",
"disabled": true,
"position": [
-5312,
48
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 7
}
]
}
},
"typeVersion": 1.2
},
{
"id": "bcd14b3a-e70e-4faf-a1a1-db7284796a08",
"name": "Si",
"type": "n8n-nodes-base.if",
"position": [
-4176,
48
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "8cc1c059-bf65-4864-bfb8-12c56481789a",
"operator": {
"type": "string",
"operation": "notEmpty",
"singleValue": true
},
"leftValue": "={{ $json['Focus Keyword'] }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "a951e883-0729-4142-9dbc-b9a834bf7408",
"name": "Récupérer les sujets en attente depuis Content Req & Posting",
"type": "n8n-nodes-base.googleSheets",
"position": [
-4384,
48
],
"parameters": {
"options": {},
"filtersUI": {
"values": [
{
"lookupValue": "Approved",
"lookupColumn": "Status for Approval"
},
{
"lookupValue": "Pending",
"lookupColumn": "Live Link"
}
]
},
"sheetName": {
"__rl": true,
"mode": "name",
"value": "Content Req & Posting"
},
"documentId": {
"__rl": true,
"mode": "url",
"value": "YOUR_GOOGLE_SHEET_URL"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "Aam5AW9oxNhvIGd2",
"name": "Shiv@incrementors.com - Google Sheets"
}
},
"executeOnce": false,
"notesInFlow": false,
"typeVersion": 4.5,
"alwaysOutputData": true
},
{
"id": "aa0b797c-fcea-4fdf-8e11-86f16fc453b6",
"name": "Préparer les données finales",
"type": "n8n-nodes-base.set",
"position": [
-2048,
32
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "879ec377-94b8-47da-a593-5876e2f35f28",
"name": "S NO",
"type": "string",
"value": "={{ $('Pass 1 Blog Topic').item.json['S.No.'] }}"
},
{
"id": "be91b8ad-22cd-4a72-ae04-0e9a44df7cb2",
"name": "Blog Title",
"type": "string",
"value": "={{ $('Pass 1 Blog Topic').item.json['Content Topic'] }}"
},
{
"id": "b04eb3ec-c74d-42ca-95ea-190f05e160d2",
"name": "Content",
"type": "string",
"value": "={{ $json.excludedH1 }}"
},
{
"id": "5267bc48-e1ec-454b-b85c-c87b9f789123",
"name": "Auth Code",
"type": "string",
"value": "={{ $('Fetch Client Details').item.json['Blog Posting Auth Code'] }}"
},
{
"id": "23e11954-9595-448c-ad95-ad56c652edf5",
"name": "Website URL",
"type": "string",
"value": "={{ $('Fetch Client Details').item.json['Website URL'] }}"
},
{
"id": "e9e5d5fd-973f-4f82-b433-a6ef83697dc5",
"name": "OnPage SEO",
"type": "string",
"value": "={{ $('Fetch Client Details').item.json['On Page Sheet'] }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "e9ff48d2-dce5-48bb-a96f-fb7a141a7afe",
"name": "Extraire le titre du blog",
"type": "n8n-nodes-base.code",
"position": [
-2256,
32
],
"parameters": {
"jsCode": "// Get the input string\nlet content = $input.first().json.output;\n\n// Remove all newlines\ncontent = content.replace(/\\n/g, '');\n\n// Remove em dashes\ncontent = content.replace(/—/g, ' ');\n\n// Extract the content inside the first <h1> tag\nconst h1Match = content.match(/<h1[^>]*>(.*?)<\\/h1>/);\nconst h1Content = h1Match ? h1Match[1] : '';\n\n// Remove all <h1> tags and their content from the original string\nconst excludedH1Content = content.replace(/<h1[^>]*>.*?<\\/h1>/g, '');\n\nreturn {\n json: {\n h1Only: h1Content,\n excludedH1: excludedH1Content\n }\n};\n"
},
"typeVersion": 2
},
{
"id": "c48aad87-2bf1-4b0a-a75d-b9722cc6a2da",
"name": "Générer l'invite d'image",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-1808,
32
],
"parameters": {
"text": "=Heading: {{ $('Edit Fields').item.json['Blog Title'] }}\nContent:\n{{ $('Edit Fields').item.json.Content }}",
"options": {
"systemMessage": "=You are an expert AI image prompt creator for Blog Posting visuals. Based on the following Blog Content, write a rich, vivid, and visually appealing image prompt that would generate a share-worthy image. Use Realistic image with Real Persons. Keep it realistic, aesthetic, and optimized for high engagement.\n\nThis is the Heading so first make it 4 to 5 words and that should be added on the image\n{{ $json['Blog Title'] }}\n\nin output just give me plain prompt do not include supportive text and explanatory words.\nand supporting words like \"image prompt:\"\n\nOUTPUT REQUIREMENTS:\n\nBackground: Light beige to gradient with a subtle golden overlay effect on the edges.\n\nStyle: Clean, professional business graphic with detailed visual hierarchy\n\nColors: Choose 2-3 vibrant professional colors\n\nText: Heading\n\nText Heading should be in bottom or left side\n\nAVOID:\n\nComplex graphics or multiple elements\n\nLong text or paragraphs\n\nUnrealistic photos\n\nCluttered designs\n\nDo not use other text on the image only add the heading\n\nDo not use icons\n\nMake the image realistic, not animated or cartoonish"
},
"promptType": "define"
},
"typeVersion": 2
},
{
"id": "b4f07418-a028-456c-8846-e650c23172c4",
"name": "OpenAI Chat Model1",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
-1808,
256
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini",
"cachedResultName": "gpt-4.1-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "tCrLCjVYHhZMrULt",
"name": "OpenAI - Keyword Research"
}
},
"typeVersion": 1.2
},
{
"id": "8e9a83db-005f-42bc-acf3-ec2b5dcfc354",
"name": "Générer l'image",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueRegularOutput",
"position": [
-1456,
32
],
"parameters": {
"url": "https://api.ideogram.ai/v1/ideogram-v3/generate",
"method": "POST",
"options": {},
"sendBody": true,
"contentType": "multipart-form-data",
"sendHeaders": true,
"bodyParameters": {
"parameters": [
{
"name": "=prompt",
"value": "={{ $json.output }}"
},
{
"name": "rendering_speed",
"value": "QUALITY"
},
{
"name": "resolution",
"value": "1248x832"
},
{
"name": "num_images",
"value": "1"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "Api-Key",
"value": "YOUR_IDEOGRAM_API_KEY"
}
]
}
},
"typeVersion": 4.2,
"alwaysOutputData": true
},
{
"id": "e3118468-ded3-4e2c-a9ee-aceb2e2b034f",
"name": "Télécharger l'image en fichier binaire",
"type": "n8n-nodes-base.httpRequest",
"position": [
-1200,
32
],
"parameters": {
"url": "={{ $json.data[0].url }}",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "44a76ee6-989a-4c06-a524-d59830a151b2",
"name": "Téléverser l'image sur Wordpress",
"type": "n8n-nodes-base.httpRequest",
"position": [
-960,
32
],
"parameters": {
"url": "={{ $('Edit Fields').item.json['Website URL'] }}wp-json/wp/v2/media",
"method": "POST",
"options": {},
"sendBody": true,
"contentType": "binaryData",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Content-Disposition",
"value": "=attachment; filename=\"{{ $('Edit Fields').item.json['Blog Title'] }}\".jpg"
},
{
"name": "Content-Type",
"value": "image/png"
},
{
"name": "Authorization",
"value": "Basic YOUR_WORDPRESS_AUTH_CODE"
}
]
},
"inputDataFieldName": "data"
},
"typeVersion": 4.2
},
{
"id": "ed475e00-2634-40f8-8f86-8c3dd862e013",
"name": "Définir l'image comme image mise en avant",
"type": "n8n-nodes-base.httpRequest",
"position": [
-496,
32
],
"parameters": {
"url": "={{ $('Edit Fields').item.json['Website URL'] }}wp-json/wp/v2/posts/{{ $('Publish Blog on Wordpress').item.json.id }}",
"method": "POST",
"options": {},
"sendQuery": true,
"sendHeaders": true,
"queryParameters": {
"parameters": [
{
"name": "featured_media",
"value": "={{ $('Upload Image in Wordpress').item.json.id }}"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Basic YOUR_WORDPRESS_AUTH_CODE"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "4f3f2c07-8388-4ce6-95c1-dad017caa081",
"name": "Publier le blog sur Wordpress",
"type": "n8n-nodes-base.httpRequest",
"position": [
-736,
32
],
"parameters": {
"url": "={{ $('Edit Fields').item.json['Website URL'] }}wp-json/wp/v2/posts",
"method": "POST",
"options": {},
"sendBody": true,
"sendHeaders": true,
"bodyParameters": {
"parameters": [
{
"name": "title",
"value": "={{ $('Edit Fields').item.json['Blog Title'] }}"
},
{
"name": "content",
"value": "=<img src=\"{{ $json.guid.rendered }}\">\n{{ $('Edit Fields').item.json.Content }}"
},
{
"name": "status",
"value": "publish"
},
{
"name": "categories",
"value": "=7"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Basic YOUR_WORDPRESS_AUTH_CODE"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "eb1985f3-8c5c-47d4-82a9-7f4fa0d07115",
"name": "Google Gemini Chat Model2",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
-2960,
272
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"id": "xbK4CzkeE3YrIut4",
"name": "Shan API"
}
},
"typeVersion": 1
},
{
"id": "e4217e7b-d2bf-4612-9fd1-b1531d6a076d",
"name": "Google Gemini Chat Model3",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
-2608,
256
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"id": "xbK4CzkeE3YrIut4",
"name": "Shan API"
}
},
"typeVersion": 1
},
{
"id": "9fb77411-6eb6-4fb7-859a-3df4eecd47d6",
"name": "Récupérer les détails du client",
"type": "n8n-nodes-base.googleSheets",
"position": [
-5088,
48
],
"parameters": {
"options": {},
"filtersUI": {
"values": [
{
"lookupValue": "Automation",
"lookupColumn": "Project Status"
},
{
"lookupValue": "Automation",
"lookupColumn": "Blog Publishing"
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "YOUR_GOOGLE_SHEET_URL",
"cachedResultName": "Project"
},
"documentId": {
"__rl": true,
"mode": "url",
"value": "YOUR_GOOGLE_SHEET_URL"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "Aam5AW9oxNhvIGd2",
"name": "Shiv@incrementors.com - Google Sheets"
}
},
"typeVersion": 4.7
},
{
"id": "fc4a1ec4-7119-4e53-8684-e9892392c98a",
"name": "Mettre à jour le statut du blog dans la feuille",
"type": "n8n-nodes-base.googleSheets",
"position": [
-256,
32
],
"parameters": {
"columns": {
"value": {
"S.No.": "={{ $('Edit Fields').item.json['Blog S No'] }}",
"Live Link": "={{ $json.link }}"
},
"schema": [
{
"id": "S.No.",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "S.No.",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Focus Keyword",
"type": "string",
"display": true,
"required": false,
"displayName": "Focus Keyword",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Content Topic",
"type": "string",
"display": true,
"required": false,
"displayName": "Content Topic",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Target Page",
"type": "string",
"display": true,
"required": false,
"displayName": "Target Page",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Words",
"type": "string",
"display": true,
"required": false,
"displayName": "Words",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Brief URL",
"type": "string",
"display": true,
"required": false,
"displayName": "Brief URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Content URL",
"type": "string",
"display": true,
"required": false,
"displayName": "Content URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status for Approval ",
"type": "string",
"display": true,
"required": false,
"displayName": "Status for Approval ",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Live Link",
"type": "string",
"display": true,
"required": false,
"displayName": "Live Link",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "number",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"S.No."
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "name",
"value": "Content Req & Posting"
},
"documentId": {
"__rl": true,
"mode": "url",
"value": "YOUR_GOOGLE_SHEET_URL"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "Aam5AW9oxNhvIGd2",
"name": "Shiv@incrementors.com - Google Sheets"
}
},
"typeVersion": 4.7
},
{
"id": "38ba9188-ccc3-4d64-86de-2563673d5722",
"name": "Annoncer le nouveau blog",
"type": "n8n-nodes-base.discord",
"position": [
-64,
32
],
"webhookId": "YOUR_DISCORD_API_KEY",
"parameters": {
"content": "=<@1314814621777133568>\n\nA new article has just been published on the Hair Transplant Istanbul Website.\n\nCheck it out here: \n{{ $json['Live Link'] }}\n\n✅ Please review the content and let us know if you’d like any changes to the article publishing automation. ",
"guildId": {
"__rl": true,
"mode": "list",
"value": "YOUR_DISCORD_API_KEY",
"cachedResultUrl": "https://discord.com/channels/YOUR_DISCORD_API_KEY",
"cachedResultName": "Project Delivery"
},
"options": {},
"resource": "message",
"channelId": {
"__rl": true,
"mode": "id",
"value": "YOUR_DISCORD_API_KEY"
}
},
"credentials": {
"discordBotApi": {
"id": "FrBoFzk7ybIfABi8",
"name": "Nathan - Shan"
}
},
"typeVersion": 2
},
{
"id": "6a3e2526-b010-438d-b437-d47f12994b7c",
"name": "Note adhésive9",
"type": "n8n-nodes-base.stickyNote",
"position": [
-6240,
-752
],
"parameters": {
"color": 4,
"width": 720,
"height": 1232,
"content": "## 🚀 Automation Summary\n\n### 🔹 What does this automation do?\nThis automation takes care of the entire blog publishing process automatically.\nYou don’t have to manually research, write, design, or post content. Instead:\n\nYou just add or approve a blog topic in Google Sheets.\nThe system will then research the topic, write the blog, create an image, publish it on WordPress, update the sheet, and notify your team – all without any manual effort.\n\n### 🔹 How does it work step by step?\n**Start –** The workflow runs on a schedule (like every morning) or whenever you trigger it manually.\n\n**Read Topics from Google Sheets –** It looks at your content sheet and picks only those topics that are approved and still pending to be published.\n\n**AI Research & Content Writing -**\nGoogle Gemini (AI) does in-depth research on the topic and target keyword.\nThen it writes a full 800–1000 word article in clear, simple language with SEO optimization.\n\n**Quality Check & Fixes: -**\nThe blog draft is checked to make sure it sounds natural, human-friendly, and well-written. Any grammar, flow, or readability issues are automatically improved.\n\n**Image Creation –**\nAn image prompt is created based on the blog title and content.\nThe prompt is sent to Ideogram AI, which generates a realistic and professional blog cover image.\n\n**Publish to WordPress –**\nThe article and image are uploaded directly to your WordPress site.\nThe image is set as the blog’s featured image, so the post looks complete and professional.\n\n**Update & Notify –**\nThe blog’s live link is saved back into your Google Sheet.\nA notification is sent to your team on Discord with the new blog link, so everyone knows it’s published.\n\n### 🔹 Which APIs power this workflow?\n**Google Sheets API →** To read topics and update status.\n**Google Gemini API →** For research and blog writing.\n**OpenAI API →** To create creative image prompts.\n**Ideogram API →** To generate professional blog images.\n**WordPress REST API →** To publish content and images.\n**Discord API →** To notify the team automatically.\n\n### 🔹 Why is this useful?\nSaves hours of manual work (research, writing, image design, posting).\nEnsures blogs are always SEO-optimized and published on time.\nKeeps everything organized in Google Sheets.\nKeeps the team updated instantly after publishing.\n\n### 👉 In short: Approve a topic in Google Sheets → The automation handles everything else from research to publishing.\n\n📩 For any questions or support, please contact:\n✉️ info@incrementors.com\nor fill out this form: https://www.incrementors.com/contact-us/"
},
"typeVersion": 1
},
{
"id": "8d955eea-8ca4-4dc3-a962-dde31f266308",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
-5152,
-256
],
"parameters": {
"color": 6,
"width": 448,
"height": 464,
"content": "### 🟡 Get the Client Data:\n\"Fetches client data from Google Sheet (Auth Code, Website URL, SEO Sheet, Frequency, etc.). Only picks rows where Project Status = Active and Blog Publishing = Automation.\"\n\n### 🟡 Check Blog Publishing Status:\n\"Checks the client’s publishing schedule. If Weekly Frequency matches the current day or is set to Daily, the workflow continues; otherwise, it stops.\""
},
"typeVersion": 1
},
{
"id": "d492e8f8-bcef-4309-913e-72c4db55c785",
"name": "Note adhésive1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-4432,
-256
],
"parameters": {
"color": 6,
"width": 640,
"height": 464,
"content": "### 🟡 Fetch Pending Topics from Content Req & Posting:\n\"Reads the client’s sheet and selects only those topics where status is Approved and Live Link is still Pending, meaning they are ready for publishing.\"\n\n### 🟡 If condition:\n\"Checks whether the selected topic has a Focus Keyword; if empty the process stops, if not empty the workflow continues to content creation.\"\n\n### 🟡 Pass 1 Blog Topic:\n\"Keeps only the first blog topic from the list so that the workflow processes one topic at a time.\""
},
"typeVersion": 1
},
{
"id": "86cfa16b-0242-4452-a388-ab19a5d560e4",
"name": "Note adhésive3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-3760,
-256
],
"parameters": {
"color": 6,
"width": 704,
"height": 464,
"content": "### 🟡 Do the Research on the Topic:\n\"Generates an in-depth research report for the given keyword and topic, covering search intent, top competitors, content gaps, audience profile, trending subtopics, related keywords, and a suggested SEO-friendly blog outline.\"\n\n### 🟡 Write the Content:\n\"Creates a complete 800–1000 word blog article in clean HTML format, written in a simple and conversational style, naturally integrating keywords, adding internal links, and ensuring readability for the target audience.\""
},
"typeVersion": 1
},
{
"id": "66771410-a54c-4ef6-ad58-716b3d2ce537",
"name": "Note adhésive4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-3008,
-256
],
"parameters": {
"color": 6,
"width": 640,
"height": 464,
"content": "### 🟡 Check Content Quality:\n\"Analyzes the generated blog to ensure it reads like human-written content by checking tone, conversational flow, readability, sentence clarity, empathy, active voice usage, and overall engagement, then produces feedback on what to improve.\"\n\n### 🟡 Fix the Quality Issues:\n\"Takes the feedback from the quality check and improves the content by correcting grammar, punctuation, sentence flow, and readability issues while keeping the same HTML format, structure, and overall meaning of the blog intact.\""
},
"typeVersion": 1
},
{
"id": "8c3d27bd-8e51-4e00-818f-8eb948acb67d",
"name": "Note adhésive5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2336,
-256
],
"parameters": {
"color": 6,
"width": 816,
"height": 464,
"content": "### 🟡 Extract Blog Title:\n\"Processes the AI-generated HTML content to extract the main <h1> title separately and remove it from the body text, ensuring the blog title and content are clean and distinct.\"\n\n### 🟡 Prepare Final Data:\n\"Collects all required fields (S. No, Blog Title, Content, Auth Code, Website URL, and OnPage SEO) into a structured format, preparing the data for final publishing to the correct WordPress site.\"\n\n### 🟡 Sticky Note for Generate Image Prompt:\n\"Generates a clean and professional AI image prompt from the blog title and content—keeping it realistic, minimal, and visually engaging for use in blog cover images.\""
},
"typeVersion": 1
},
{
"id": "f3e4c9e8-a7db-4fc5-91fa-8b6d60bdbf24",
"name": "Note adhésive6",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1504,
-256
],
"parameters": {
"color": 6,
"width": 448,
"height": 464,
"content": "### 🟡 Image Generate:\n\"This node connects to the Ideogram AI API and submits the blog’s tailored image prompt with fixed quality, resolution, and count settings, generating a polished blog visual and returning its direct URL for the next steps.\"\n\n### 🟡 Download Image in Binary File:\n\"This node takes the image URL produced by Ideogram, downloads the file, and converts it into binary format, making the image immediately usable for storage, sharing, or publishing on WordPress.\""
},
"typeVersion": 1
},
{
"id": "f2d28eb9-1156-4782-b62b-516b9260dc88",
"name": "Note adhésive7",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1008,
-256
],
"parameters": {
"color": 6,
"width": 672,
"height": 464,
"content": "### 🟡 Upload Image in WordPress:\n\"Uploads the generated blog image into the WordPress media library using REST API, assigns it a filename from the blog title, and returns a unique media ID for use in the post.\"\n\n### 🟡 Publish Blog on WordPress:\n\"Creates and publishes a new WordPress post with the blog title, content, and embedded uploaded image, returning the post ID for further updates.\"\n\n### 🟡 Set Image as Featured Image:\n\"Updates the published blog post to assign the uploaded image as the featured thumbnail, ensuring the blog appears with a proper cover image on the website.\""
},
"typeVersion": 1
},
{
"id": "68b98d34-8aa7-4624-9434-c9046e9be648",
"name": "Note adhésive8",
"type": "n8n-nodes-base.stickyNote",
"position": [
-304,
-256
],
"parameters": {
"color": 6,
"width": 368,
"height": 464,
"content": "### 🟡 Update row in sheet:\n\"Finds the correct row in the Google Sheet using s. no. and updates it with the blog’s Live Link, keeping the publishing tracker accurate and up-to-date.\"\n\n### 🟡 Send a message (Discord):\n\"Sends an automated notification to the project’s Discord channel, tagging the responsible person and sharing the live blog link so the team can review it immediately.\""
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "cfad449c-e406-4804-8a8d-88063a1f9fd2",
"connections": {
"bcd14b3a-e70e-4faf-a1a1-db7284796a08": {
"main": [
[
{
"node": "a7d9e1aa-bc4f-4ca8-806c-aca8a8fd7762",
"type": "main",
"index": 0
}
],
[
{
"node": "0405e8b2-c932-448d-8cee-6b1438fd5be7",
"type": "main",
"index": 0
}
]
]
},
"8e9a83db-005f-42bc-acf3-ec2b5dcfc354": {
"main": [
[
{
"node": "e3118468-ded3-4e2c-a9ee-aceb2e2b034f",
"type": "main",
"index": 0
}
]
]
},
"0405e8b2-c932-448d-8cee-6b1438fd5be7": {
"main": [
[],
[
{
"node": "a951e883-0729-4142-9dbc-b9a834bf7408",
"type": "main",
"index": 0
}
]
]
},
"542bf697-9b66-44c9-a1ee-46a013828b00": {
"main": [
[
{
"node": "9fb77411-6eb6-4fb7-859a-3df4eecd47d6",
"type": "main",
"index": 0
}
]
]
},
"a7d9e1aa-bc4f-4ca8-806c-aca8a8fd7762": {
"main": [
[
{
"node": "9823b639-66c5-4cd8-b47d-94dc080e7eae",
"type": "main",
"index": 0
}
]
]
},
"e34a1527-856d-4d83-975e-87eb5b79a5ec": {
"main": [
[
{
"node": "da031e62-192f-4be0-b4e0-df6a60153fe0",
"type": "main",
"index": 0
}
]
]
},
"e9ff48d2-dce5-48bb-a96f-fb7a141a7afe": {
"main": [
[
{
"node": "aa0b797c-fcea-4fdf-8e11-86f16fc453b6",
"type": "main",
"index": 0
}
]
]
},
"b4f07418-a028-456c-8846-e650c23172c4": {
"ai_languageModel": [
[
{
"node": "c48aad87-2bf1-4b0a-a75d-b9722cc6a2da",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"aa0b797c-fcea-4fdf-8e11-86f16fc453b6": {
"main": [
[
{
"node": "c48aad87-2bf1-4b0a-a75d-b9722cc6a2da",
"type": "main",
"index": 0
}
]
]
},
"9fb77411-6eb6-4fb7-859a-3df4eecd47d6": {
"main": [
[
{
"node": "7db51d0d-7467-4b9b-983d-032e0b7b8a5c",
"type": "main",
"index": 0
}
]
]
},
"da031e62-192f-4be0-b4e0-df6a60153fe0": {
"main": [
[
{
"node": "62c25f2c-5311-4df1-8d55-202bbc033843",
"type": "main",
"index": 0
}
]
]
},
"62c25f2c-5311-4df1-8d55-202bbc033843": {
"main": [
[
{
"node": "e9ff48d2-dce5-48bb-a96f-fb7a141a7afe",
"type": "main",
"index": 0
},
{
"node": "0405e8b2-c932-448d-8cee-6b1438fd5be7",
"type": "main",
"index": 0
}
]
]
},
"c48aad87-2bf1-4b0a-a75d-b9722cc6a2da": {
"main": [
[
{
"node": "8e9a83db-005f-42bc-acf3-ec2b5dcfc354",
"type": "main",
"index": 0
}
]
]
},
"2c398975-2f74-43e6-8450-e69392869450": {
"ai_languageModel": [
[
{
"node": "9823b639-66c5-4cd8-b47d-94dc080e7eae",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"ece45d3f-313b-48ab-b086-1250b695ea86": {
"ai_languageModel": [
[
{
"node": "e34a1527-856d-4d83-975e-87eb5b79a5ec",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"eb1985f3-8c5c-47d4-82a9-7f4fa0d07115": {
"ai_languageModel": [
[
{
"node": "da031e62-192f-4be0-b4e0-df6a60153fe0",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"e4217e7b-d2bf-4612-9fd1-b1531d6a076d": {
"ai_languageModel": [
[
{
"node": "62c25f2c-5311-4df1-8d55-202bbc033843",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"4f3f2c07-8388-4ce6-95c1-dad017caa081": {
"main": [
[
{
"node": "ed475e00-2634-40f8-8f86-8c3dd862e013",
"type": "main",
"index": 0
}
]
]
},
"44a76ee6-989a-4c06-a524-d59830a151b2": {
"main": [
[
{
"node": "4f3f2c07-8388-4ce6-95c1-dad017caa081",
"type": "main",
"index": 0
}
]
]
},
"ed475e00-2634-40f8-8f86-8c3dd862e013": {
"main": [
[
{
"node": "fc4a1ec4-7119-4e53-8684-e9892392c98a",
"type": "main",
"index": 0
}
]
]
},
"fc4a1ec4-7119-4e53-8684-e9892392c98a": {
"main": [
[
{
"node": "38ba9188-ccc3-4d64-86de-2563673d5722",
"type": "main",
"index": 0
}
]
]
},
"7db51d0d-7467-4b9b-983d-032e0b7b8a5c": {
"main": [
[
{
"node": "0405e8b2-c932-448d-8cee-6b1438fd5be7",
"type": "main",
"index": 0
}
]
]
},
"9823b639-66c5-4cd8-b47d-94dc080e7eae": {
"main": [
[
{
"node": "e34a1527-856d-4d83-975e-87eb5b79a5ec",
"type": "main",
"index": 0
}
]
]
},
"e3118468-ded3-4e2c-a9ee-aceb2e2b034f": {
"main": [
[
{
"node": "44a76ee6-989a-4c06-a524-d59830a151b2",
"type": "main",
"index": 0
}
]
]
},
"a951e883-0729-4142-9dbc-b9a834bf7408": {
"main": [
[
{
"node": "bcd14b3a-e70e-4faf-a1a1-db7284796a08",
"type": "main",
"index": 0
}
]
]
}
}
}Comment utiliser ce workflow ?
Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.
Dans quelles scénarios ce workflow est-il adapté ?
Avancé - Création de contenu, IA Multimodale
Est-ce payant ?
Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.
Workflows recommandés
Incrementors
@incrementorsPartager ce workflow