{"id":125285,"date":"2025-12-02T16:18:04","date_gmt":"2025-12-02T16:18:04","guid":{"rendered":"\/my\/tutorials\/how-to-use-n8n-to-generate-content"},"modified":"2026-03-10T10:03:14","modified_gmt":"2026-03-10T10:03:14","slug":"how-to-use-n8n-to-generate-content","status":"publish","type":"post","link":"\/my\/tutorials\/how-to-use-n8n-to-generate-content","title":{"rendered":"How to use n8n to generate content"},"content":{"rendered":"<?xml encoding=\"utf-8\" ?><p>As a workflow automation tool, n8n lets you connect different apps and services to streamline tasks. One powerful use case is AI-powered content creation, which lets you automate the entire process of writing high-quality blog posts with minimal manual effort.<\/p><p>When using n8n, you can build a workflow that fetches trending topics, writes full-length articles, and publishes them automatically. This saves time and boosts productivity &ndash; perfect for bloggers, marketers, and businesses looking to scale their content output efficiently.<\/p><p>However, AI-generated content may still require manual fact-checking and quality control to meet high standards.<\/p><p>This article will guide you through setting up a content generation workflow in n8n. By the end, you&rsquo;ll have a fully functional system that uses multiple AI agents to automate content creation, reducing the need for constant human input.<\/p><p>\n\n\n\n<\/p><h2 class=\"wp-block-heading\" id=\"h-understanding-the-multi-agent-content-generation-approach\"><strong>Understanding the multi-agent content generation approach<\/strong><\/h2><p>A multi-agent content engine is a system where multiple AI-powered agents handle different stages of content creation, each with a specific role.<\/p><p>Instead of relying on a single AI model, which often leads to inconsistencies, this structured workflow optimizes every stage, resulting in more engaging, well-researched, and SEO-friendly content.<\/p><p>Here&rsquo;s how the process works:<\/p><ol class=\"wp-block-list\">\n<li><strong>Fetching a relevant topic<\/strong> &ndash; the first AI agent retrieves trending and engaging topics based on predefined criteria. This ensures your content aligns with current search trends and audience interests.<\/li>\n\n\n\n<li><strong>Generating an article outline<\/strong> &ndash; once a topic is selected, the next agent creates a well-structured outline, preparing a logical flow before drafting begins.<\/li>\n\n\n\n<li><strong>Writing the full draft<\/strong> &ndash; the third agent expands the outline into a complete article, focusing on readability, clear structure, and SEO best practices.<\/li>\n\n\n\n<li><strong>Refining the content<\/strong> &ndash; before publishing, another AI agent polishes the draft by improving readability, fixing grammar, and enhancing clarity for a natural, human-like tone.<\/li>\n\n\n\n<li><strong>Formatting and converting to HTML<\/strong> &ndash; function-based nodes fix formatting issues and convert Markdown-formatted text into HTML, making the content compatible with most content management systems (CMSs).<\/li>\n\n\n\n<li><strong>Publishing to CMS<\/strong> &ndash; the final workflow step uploads the content to your CMS. You can configure it to publish immediately, as drafts, or even schedule posts based on your needs.<\/li>\n<\/ol><h2 class=\"wp-block-heading\" id=\"h-prerequisites\"><strong>Prerequisites<\/strong><\/h2><p>Before setting up an automated content generation workflow in n8n, make sure you have the following:<\/p><p><strong>A virtual private server (VPS) plan<\/strong><\/p><p>You&rsquo;ll need a VPS to run n8n. A VPS provides dedicated CPU, RAM, and storage to run multiple workflows without performance issues.<\/p><p>Hostinger&rsquo;s <a href=\"\/my\/self-hosted-n8n\">n8n hosting<\/a> is a great option, offering a balance of performance and budget. Since n8n isn&rsquo;t resource-intensive, the <strong>KVM 1<\/strong> plan, starting at <strong>RM29.99\/month<\/strong>, should be enough for most workflows.<\/p><p>But if your workflow involves heavy data processing, consider getting a more advanced VPS plan. You can monitor resource usage in hPanel and easily upgrade your plan if needed.<\/p><figure data-wp-context='{\"imageId\":\"69dfb2691329d\"}' data-wp-interactive=\"core\/image\" class=\"wp-block-image aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2025\/03\/hpanel-vps-server-usage-1024x689.png\" alt=\"The Server Usage page in hPanel's VPS\n\" class=\"wp-image-125093\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><p><strong>A running n8n instance<\/strong><\/p><p>After preparing the VPS,<a href=\"\/my\/tutorials\/how-to-install-n8n\"> set up n8n on your server<\/a>. With Hostinger&rsquo;s n8n plans, installation takes just a few clicks as they come with a preconfigured template. This eliminates the need for manual installation via the command line, which can be time-consuming and prone to errors.<\/p><figure data-wp-context='{\"imageId\":\"69dfb26913d15\"}' data-wp-interactive=\"core\/image\" class=\"wp-block-image aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2025\/03\/hpanel-vps-change-os-n8n-highlighted-1024x424.png\" alt=\"The n8n template under the Change OS section of hPanel's VPS\n\" class=\"wp-image-125094\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><?xml encoding=\"utf-8\" ?><figure class=\"wp-block-image size-large\"><a href=\"\/my\/vps-hosting\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" width=\"1024\" height=\"300\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2023\/02\/VPS-hosting-banner-1024x300.png\" alt=\"\" class=\"wp-image-77934\" srcset=\"https:\/\/www.hostinger.com\/my\/tutorials\/wp-content\/uploads\/sites\/45\/2023\/02\/VPS-hosting-banner.png 1024w, https:\/\/www.hostinger.com\/my\/tutorials\/wp-content\/uploads\/sites\/45\/2023\/02\/VPS-hosting-banner-300x88.png 300w, https:\/\/www.hostinger.com\/my\/tutorials\/wp-content\/uploads\/sites\/45\/2023\/02\/VPS-hosting-banner-150x44.png 150w, https:\/\/www.hostinger.com\/my\/tutorials\/wp-content\/uploads\/sites\/45\/2023\/02\/VPS-hosting-banner-768x225.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure><p><strong>A CMS with API-based publishing<\/strong><\/p><p>To automate content publishing, you need a CMS that supports API-based publishing, such as Ghost or WordPress. We&rsquo;ll<a href=\"\/my\/tutorials\/ghost-tutorial\"> use Ghost<\/a> in this tutorial, which we&rsquo;ve already set up on a VPS.<\/p><p>Once your Ghost site is ready, open the admin dashboard and go to <strong>Settings &rarr; Integrations &rarr; Add custom integration<\/strong>.<\/p><figure data-wp-context='{\"imageId\":\"69dfb26916354\"}' data-wp-interactive=\"core\/image\" class=\"wp-block-image aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2025\/03\/ghost-admin-integrations-add-custom-integration-1024x774.png\" alt=\"The Add custom integration button in the Ghost admin dashboard\n\" class=\"wp-image-125095\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><p>Name your new integration and save the admin API key to integrate Ghost with n8n later.<\/p><figure data-wp-context='{\"imageId\":\"69dfb26916c60\"}' data-wp-interactive=\"core\/image\" class=\"wp-block-image aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2025\/03\/ghost-admin-n8n-integration-admin-api-key-highlighted-1024x930.png\" alt=\"The generated Admin API key in the Ghost admin dashboard\n\" class=\"wp-image-125096\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><p><strong>An AI model for generating content<\/strong><\/p><p>You&rsquo;ll also need a large language model (LLM) to generate content. Here, we&rsquo;ll<a href=\"\/my\/tutorials\/how-to-run-deepseek-with-n8n\"> use DeepSeek AI within n8n<\/a>.<\/p><p>Make sure to obtain an API key by accessing the <a href=\"https:\/\/platform.deepseek.com\" target=\"_blank\" rel=\"noopener\">DeepSeek platform<\/a> site and navigating to <strong>API keys &rarr; Create new API key<\/strong>. Copy and store the generated key securely, as it will only be shown once.<\/p><figure data-wp-context='{\"imageId\":\"69dfb26917701\"}' data-wp-interactive=\"core\/image\" class=\"wp-block-image aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2025\/03\/deepseek-platform-create-new-api-key-1024x483.png\" alt=\"The generated API key in the DeepSeek Platform site\n\" class=\"wp-image-125097\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><h2 class=\"wp-block-heading\" id=\"h-how-to-build-a-content-generation-workflow-in-n8n\"><strong>How to build a content generation workflow in n8n<\/strong><\/h2><p>Here&rsquo;s how to set up an automated content generation workflow in n8n from scratch, using DeepSeek as the AI agent and Ghost as the publishing platform.<\/p><p>While n8n offers <a href=\"\/my\/tutorials\/best-n8n-templates\">workflow templates<\/a> to speed up the process, we&rsquo;ll take a hands-on approach for better customization and control over each step.<\/p><h3 class=\"wp-block-heading\" id=\"h-1-create-a-new-workflow-in-n8n\"><strong>1. Create a new workflow in n8n<\/strong><\/h3><p>Start by opening your n8n dashboard. For Hostinger VPS customers, you can do so by clicking the <strong>Manage App<\/strong> button on your <strong>VPS Overview<\/strong> page.<\/p><figure data-wp-context='{\"imageId\":\"69dfb269180e6\"}' data-wp-interactive=\"core\/image\" class=\"wp-block-image aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2025\/03\/hpanel-vps-overview-manage-app-highlighted-1024x550.png\" alt=\"The Manage App button in the Overview page of hPanel's VPS\n\" class=\"wp-image-125098\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><p>Once inside the dashboard, hit <strong>Create Workflow<\/strong> in the top-right corner.<\/p><figure data-wp-context='{\"imageId\":\"69dfb26918918\"}' data-wp-interactive=\"core\/image\" class=\"wp-block-image aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2025\/03\/n8n-overview-workflows-create-workflow-highlighted-1024x553.png\" alt=\"n8n-overview-workflows-create-workflow-highlighted\n\" class=\"wp-image-125099\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><p>Give your new workflow a name, such as <strong>Multi-Agent Content Generation<\/strong>, then click <strong>Save<\/strong> to store your workflow settings.<\/p><figure data-wp-context='{\"imageId\":\"69dfb26919330\"}' data-wp-interactive=\"core\/image\" class=\"wp-block-image aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2025\/03\/n8n-editor-save-highlighted-1024x692.png\" alt=\"The Save button in the n8n workflow editor canvas\n\" class=\"wp-image-125100\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><p>Next, click <strong>Add first step&hellip;<\/strong> and choose <strong>Trigger manually<\/strong> from the available trigger options.<\/p><figure data-wp-context='{\"imageId\":\"69dfb26919cad\"}' data-wp-interactive=\"core\/image\" class=\"wp-block-image aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2025\/03\/n8n-editor-trigger-manually-highlighted-1024x552.png\" alt=\"The Trigger manually option in the n8n workflow editor canvas\n\" class=\"wp-image-125102\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><h3 class=\"wp-block-heading\" id=\"h-2-set-up-deepseek-to-fetch-a-relevant-topic\"><strong>2. Set up DeepSeek to fetch a relevant topic<\/strong><\/h3><p>After defining the first step, add a new node by clicking the <strong>plus<\/strong> (<strong>+<\/strong>) icon next to <strong>When clicking &lsquo;Test Workflow&rsquo;<\/strong>. Type <strong>DeepSeek<\/strong> in the search bar and select the one with the <strong>cube<\/strong> icon.<\/p><figure data-wp-context='{\"imageId\":\"69dfb2691a6a1\"}' data-wp-interactive=\"core\/image\" class=\"wp-block-image aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2025\/03\/n8n-editor-deepseek-highlighted-1024x534.png\" alt=\"The DeepSeek node in the n8n workflow editor canvas\n\" class=\"wp-image-125105\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><p>Next, choose <strong>Create chat completion<\/strong> from the available chat actions. This will open the configuration dialog.<\/p><figure data-wp-context='{\"imageId\":\"69dfb2691b18e\"}' data-wp-interactive=\"core\/image\" class=\"wp-block-image aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2025\/03\/n8n-editor-deepseek-create-chat-completion-highlighted-1-1024x599.png\" alt=\"The Create chat completion action under the DeepSeek node of n8n's workflow editor canvas\n\" class=\"wp-image-125104\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><p>In the <strong>Credentials to connect with<\/strong> field, click the <strong>arrow-down<\/strong> icon to open the drop-down menu, then select <strong>Create a new credential<\/strong>.<\/p><figure data-wp-context='{\"imageId\":\"69dfb2691ba72\"}' data-wp-interactive=\"core\/image\" class=\"wp-block-image aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2025\/03\/n8n-deepseek-create-new-credential-highlighted-812x1024.png\" alt=\"The Create new credential option in the DeepSeek configuration dialog of n8n\n\" class=\"wp-image-125106\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><p>Paste your DeepSeek API key into the designated field and hit <strong>Save<\/strong>.<\/p><figure data-wp-context='{\"imageId\":\"69dfb2691c2f0\"}' data-wp-interactive=\"core\/image\" class=\"wp-block-image aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2025\/03\/n8n-deepseek-api-connection-selected-1024x359.png\" alt=\"The API Key field in the DeepSeek API dialog of n8n\n\" class=\"wp-image-125107\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><p>Now, rename the node to something like <strong>SEO specialist<\/strong>. Then, choose your preferred chat model &ndash; we&rsquo;ll use <strong>deepseek-chat<\/strong> for this guide.<\/p><p>In the <strong>Prompt<\/strong> section, click <strong>Add Message<\/strong> and set the role to <strong>User<\/strong>. Type the following prompt into the <strong>Content<\/strong> field:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"atomic\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">You're an SEO specialist. Generate one blog keyword about AI, automation, or productivity. Ensure it's engaging, trending, and relevant for 2025.<\/pre><div class=\"wp-block-image\"><figure data-wp-context='{\"imageId\":\"69dfb2691ce86\"}' data-wp-interactive=\"core\/image\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2025\/03\/n8n-deepseek-seo-specialist-654x1024.png\" alt=\"The DeepSeek SEO specialist configuration dialog in n8n\" class=\"wp-image-125108\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>Once done, hit <strong>Test Step<\/strong> to run the node. If successful, you&rsquo;ll see the result in the right output pane like this:<\/p><div class=\"wp-block-image\"><figure data-wp-context='{\"imageId\":\"69dfb2691e03d\"}' data-wp-interactive=\"core\/image\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2025\/03\/n8n-deepseek-seo-specialist-node-1024x546.png\" alt=\"The input, configuration dialog, and output pane of the DeepSeek SEO specialist node in n8n\" class=\"wp-image-125109\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>Click <strong>Back to canvas<\/strong> to continue building your workflow.<\/p><h3 class=\"wp-block-heading\" id=\"h-3-generate-an-outline-based-on-the-topic\"><strong>3. Generate an outline based on the topic<\/strong><\/h3><p>Repeat the process by adding another DeepSeek node for the <strong>content specialist<\/strong> role, choosing the chat action, and renaming the node accordingly.<\/p><p>Then, select your preferred chat model and add a prompt similar to:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"atomic\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">You're a content specialist. Create a structured outline for an article with the keyword: {{ $json.message.content }}. Include 5-7 main sections.<\/pre><p>The <strong>{{ $json.message.content }}<\/strong> variable comes from the left input pane&rsquo;s <strong>content<\/strong> section. You can drag and drop this variable into the prompt field to dynamically insert the keyword from the previous step.<\/p><div class=\"wp-block-image\"><figure data-wp-context='{\"imageId\":\"69dfb2691f967\"}' data-wp-interactive=\"core\/image\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2025\/03\/n8n-deepseek-content-specialist-node-1024x548.png\" alt=\"The input, configuration dialog, and output pane of the DeepSeek content specialist node in n8n\" class=\"wp-image-125114\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p><div class=\"protip\">\n                    <h4 class=\"title\"> Pro tip<\/h4>\n                    <p> Every time you add a new node, test it immediately to confirm it works correctly and to catch potential issues early.<\/p>\n                <\/div>\n\n\n\n<\/p><h3 class=\"wp-block-heading\" id=\"h-4-draft-the-article\"><strong>4. Draft the article<\/strong><\/h3><p>You&rsquo;ll need another AI agent to generate the full-length blog post. Connect a new node, rename it to <strong>Content writer<\/strong>, adjust its settings as needed, and use the prompt below:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"atomic\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">You're a content writer. Based on this outline: {{ $json.message.content }}, generate a well-written blog post. Keep it engaging, well-structured, and SEO-friendly.<\/pre><p>At this stage, the workflow will produce a complete article based on the structured outline from the previous step.<\/p><div class=\"wp-block-image\"><figure data-wp-context='{\"imageId\":\"69dfb26921ac3\"}' data-wp-interactive=\"core\/image\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2025\/03\/n8n-deepseek-content-writer-node-1-1024x547.png\" alt=\"The input, configuration dialog, and output pane of the DeepSeek content writer node in n8n\" class=\"wp-image-125115\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p><div class=\"protip\">\n                    <h4 class=\"title\">Suggested reading<\/h4>\n                    <p> Learn effective <a href=\"\/my\/tutorials\/ai-prompt-engineering\">AI prompting techniques<\/a> to generate high-quality content in our guide.<\/p>\n                <\/div>\n\n\n\n<\/p><h3 class=\"wp-block-heading\" id=\"h-5-refine-the-content\"><strong>5. Refine the content<\/strong><\/h3><p>While the previous node generates engaging content, the article may still sound stiff, robotic, or too AI-generated.<\/p><p>To enhance readability and set a more natural tone, include another AI agent to act as a <strong>content editor<\/strong>. This step improves phrasing, structure, and flow to ensure a human-like writing style.<\/p><p>Add a DeepSeek node as usual, then paste the following prompt &ndash; or adjust it if needed:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"atomic\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">You're a content editor. Improve the {{ $json.message.content }} blog post by enhancing readability. Refine the tone and phrasing to make it sound more natural, engaging, and human-written &ndash; avoiding overly generic or robotic language.<\/pre><div class=\"wp-block-image\"><figure data-wp-context='{\"imageId\":\"69dfb2692282e\"}' data-wp-interactive=\"core\/image\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2025\/03\/n8n-deepseek-content-editor-node-1-1024x549.png\" alt=\"The input, configuration dialog, and output pane of the DeepSeek content editor node in n8n\" class=\"wp-image-125116\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><h3 class=\"wp-block-heading\" id=\"h-6-fix-the-formatting\"><strong>6. Fix the formatting<\/strong><\/h3><p>If you check the previous node&rsquo;s output, you&rsquo;ll notice that the content is still unstructured and includes unwanted formatting.<\/p><p>To fix this, include a <strong>Code<\/strong> node to separate the title and body content into two variables, clean up unnecessary tags, and ensure proper formatting.<\/p><p>After adding the node, set the running mode to <strong>Run Once for All Items<\/strong> and the language to <strong>JavaScript<\/strong>. Then, paste the script below into the designated field, replacing <strong>$input.first().json.message.content<\/strong> with your variable from the left pane:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">const text = $input.first().json.message.content; \/\/ Ensure this matches your AI output field\n\n\/\/ Split into lines and remove empty ones\n\nconst lines = text.split(\"n\").filter(line =&gt; line.trim() !== \"\");\n\n\/\/ Extract the title (first Markdown header)\n\nlet title = \"\";\n\nif (lines[0].startsWith(\"# \")) {\n\ntitle = lines.shift().replace(\"# \", \"\").trim(); \/\/ Remove `# ` from title\n\n}\n\n\/\/ Remove title duplication in content\n\nlet content = lines.join(\"n\").trim();\n\nif (content.startsWith(`**${title}**`)) {\n\ncontent = content.replace(`**${title}**`, \"\").trim();\n\n}\n\n\/\/ ** 1&#65039;&#8419; Fix Headings (No Extra `&lt;p&gt;`, Remove `**`) **\n\ncontent = content\n\n.replace(\/^##s+**(.+?)**\/gm, \"&lt;h2&gt;$1&lt;\/h2&gt;\") \/\/ Convert `## **Heading**` to `&lt;h2&gt;`\n\n.replace(\/^##s+(.+)\/gm, \"&lt;h2&gt;$1&lt;\/h2&gt;\")&nbsp; \/\/ Convert `## Heading` to `&lt;h2&gt;`\n\n.replace(\/^###s+**(.+?)**\/gm, \"&lt;h3&gt;$1&lt;\/h3&gt;\") \/\/ Convert `### **Heading**` to `&lt;h3&gt;`\n\n.replace(\/^###s+(.+)\/gm, \"&lt;h3&gt;$1&lt;\/h3&gt;\")&nbsp; \/\/ Convert `### Heading` to `&lt;h3&gt;`\n\n.replace(\/&lt;p&gt;s*(&lt;h[23]&gt;)\/g, \"$1\")&nbsp; \/\/ Remove `&lt;p&gt;` before `&lt;h2&gt;` and `&lt;h3&gt;`\n\n.replace(\/(&lt;\/h[23]&gt;)s*&lt;\/p&gt;\/g, \"$1\");&nbsp; \/\/ Remove `&lt;\/p&gt;` right after headings\n\n\/\/ ** 2&#65039;&#8419; Fix Paragraphs (No `&lt;p&gt;` Before Headings or Lists) **\n\ncontent = content\n\n.replace(\/n{2,}\/g, \"n\")&nbsp; \/\/ Prevent excess new lines\n\n.replace(\/(?&lt;!&lt;\/h2&gt;|&lt;\/h3&gt;|&lt;\/ul&gt;|&lt;\/li&gt;)n(?!&lt;h2&gt;|&lt;h3&gt;|&lt;ul&gt;|&lt;li&gt;)\/g, \"n&lt;p&gt;\")&nbsp; \/\/ Add `&lt;p&gt;` for text sections\n\n.replace(\/&lt;\/p&gt;s*&lt;p&gt;\/g, \"&lt;\/p&gt;n&lt;p&gt;\")&nbsp; \/\/ Ensure correct spacing between paragraphs\n\n.replace(\/&lt;p&gt;s*&lt;\/p&gt;\/g, \"\")&nbsp; \/\/ Remove empty `&lt;p&gt;` tags\n\n.replace(\/&lt;\/h2&gt;s*&lt;p&gt;\/g, \"&lt;\/h2&gt;n\")&nbsp; \/\/ Remove `&lt;p&gt;` after `&lt;h2&gt;`\n\n.replace(\/&lt;\/h3&gt;s*&lt;p&gt;\/g, \"&lt;\/h3&gt;n\")&nbsp; \/\/ Remove `&lt;p&gt;` after `&lt;h3&gt;`\n\n\/\/ ** 3&#65039;&#8419; Fix Lists (Ensure No `&lt;p&gt;` Inside `&lt;ul&gt;`) **\n\ncontent = content\n\n.replace(\/n- (.+)\/g, \"n&lt;ul&gt;n&lt;li&gt;$1&lt;\/li&gt;\")&nbsp; \/\/ Convert `- item` to `&lt;ul&gt;&lt;li&gt;item&lt;\/li&gt;`\n\n.replace(\/&lt;\/li&gt;n&lt;li&gt;\/g, \"&lt;\/li&gt;n&lt;li&gt;\")&nbsp; \/\/ Ensure `&lt;li&gt;` items are properly closed\n\n.replace(\/&lt;\/li&gt;nn&lt;ul&gt;\/g, \"&lt;\/li&gt;n&lt;\/ul&gt;nn&lt;ul&gt;\")&nbsp; \/\/ Fix nested list structure\n\n.replace(\/&lt;\/li&gt;n(?!&lt;\/ul&gt;)\/g, \"&lt;\/li&gt;n&lt;\/ul&gt;\")&nbsp; \/\/ Close lists properly\n\n.replace(\/&lt;\/ul&gt;n&lt;p&gt;\/g, \"&lt;\/ul&gt;n\")&nbsp; \/\/ Remove `&lt;p&gt;` right after `&lt;ul&gt;`\n\n.replace(\/&lt;p&gt;s*&lt;ul&gt;\/g, \"&lt;ul&gt;\")&nbsp; \/\/ Remove `&lt;p&gt;` before `&lt;ul&gt;`\n\n.replace(\/&lt;\/ul&gt;s*&lt;\/p&gt;\/g, \"&lt;\/ul&gt;\");&nbsp; \/\/ Remove `&lt;\/p&gt;` after `&lt;ul&gt;`\n\n\/\/ ** 4&#65039;&#8419; Remove Unnecessary `&lt;br \/&gt;` and Extra Formatting Issues **\n\ncontent = content\n\n.replace(\/&lt;brs*\/?&gt;\/g, \"\")&nbsp; \/\/ Remove all `&lt;br \/&gt;` tags\n\n.replace(\/n?---+n?\/g, \"\")&nbsp; \/\/ Remove `---` section dividers completely\n\n.replace(\/n{3,}\/g, \"nn\"); \/\/ Prevent excessive line breaks\n\nreturn [\n\n{\n\njson: {\n\ntitle: title,\n\ncontent: content.trim()\n\n}\n\n}\n\n]<\/pre><div class=\"wp-block-image\"><figure data-wp-context='{\"imageId\":\"69dfb26923245\"}' data-wp-interactive=\"core\/image\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2025\/03\/n8n-code-node-1024x549.png\" alt=\"The input, configuration dialog, and output pane of the Code node in n8n\" class=\"wp-image-125118\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>After executing the node, the output is still in Markdown format. You need to convert it to HTML to ensure compatibility with Ghost.<\/p><p>To do this, connect a <strong>Markdown<\/strong> node, select <strong>Markdown to HTML<\/strong> as the conversion mode, and then drag the <strong>content<\/strong> variable into the <strong>Markdown<\/strong> field.<\/p><figure data-wp-context='{\"imageId\":\"69dfb26923f33\"}' data-wp-interactive=\"core\/image\" class=\"wp-block-image aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2025\/03\/n8n-markdown-node-1024x552.png\" alt=\"The input, configuration dialog, and output pane of the Markdown node in n8n\n\" class=\"wp-image-125120\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><h3 class=\"wp-block-heading\" id=\"h-7-publish-to-ghost\"><strong>7. Publish to Ghost<\/strong><\/h3><p>Add a <strong>Ghost<\/strong> node to your workflow and select <strong>Get a post<\/strong> from the <strong>Actions<\/strong> list.<\/p><figure data-wp-context='{\"imageId\":\"69dfb26924ad0\"}' data-wp-interactive=\"core\/image\" class=\"wp-block-image aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2025\/03\/n8n-editor-ghost-get-a-post-highlighted-1024x387.png\" alt=\"The Get a post action under the Ghost node of n8n's workflow editor canvas\n\" class=\"wp-image-125121\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><p>From the <strong>Credentials to connect with <\/strong>field, create new Ghost credentials by entering your site&rsquo;s URL and the admin API key you previously generated.<\/p><div class=\"wp-block-image\"><figure data-wp-context='{\"imageId\":\"69dfb2692537e\"}' data-wp-interactive=\"core\/image\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2025\/03\/n8n-ghost-admin-api-connection-admin-api-selected-1024x506.png\" alt=\"The Admin API section in the Ghost Admin API dialog of n8n\" class=\"wp-image-125122\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>Change the <strong>Operation<\/strong> value to <strong>Create<\/strong>, drag <strong>{{ $json.title }} <\/strong>and <strong>{{ $json.content }}<\/strong> into their respective fields, then set the content format to <strong>HTML<\/strong>.<\/p><p>In <strong>Additional Fields<\/strong>, you can customize the blog post settings, such as changing the publishing status to <strong>Draft<\/strong> so you can review it later in the Ghost admin dashboard.<\/p><div class=\"wp-block-image\"><figure data-wp-context='{\"imageId\":\"69dfb26925cd1\"}' data-wp-interactive=\"core\/image\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2025\/03\/n8n-ghost-node-1024x548.png\" alt=\"The input, configuration dialog, and output pane of the Ghost node in n8n\" class=\"wp-image-125123\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>After testing the node, the new post should appear as a draft in the Ghost dashboard&rsquo;s <strong>Posts<\/strong> section, just as configured earlier.<\/p><div class=\"wp-block-image\"><figure data-wp-context='{\"imageId\":\"69dfb26926d1e\"}' data-wp-interactive=\"core\/image\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2025\/03\/ghost-admin-posts-selected-1024x284.png\" alt=\"The AI-generated post in the Posts section of Ghost's admin dashboard\" class=\"wp-image-125124\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><h3 class=\"wp-block-heading\" id=\"h-8-test-and-monitor-your-workflow\"><strong>8. Test and monitor your workflow<\/strong><\/h3><p>Once the workflow is set up, test it manually to verify if everything runs as expected. Go back to the workflow editor canvas and hit <strong>Test Workflow<\/strong>. Each process should be completed successfully, indicated by a green checkmark icon.<\/p><div class=\"wp-block-image\"><figure data-wp-context='{\"imageId\":\"69dfb269275a2\"}' data-wp-interactive=\"core\/image\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2025\/03\/n8n-editor-test-workflow-highlighted-1024x413.png\" alt=\"The Test workflow button in the n8n workflow editor canvas\" class=\"wp-image-125125\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>If the workflow runs smoothly, you can schedule it to execute automatically at specific intervals, such as every few hours or days.<\/p><p>To do this, delete the <strong>&ldquo;When clicking &lsquo;Test Workflow'&rdquo; <\/strong>node by clicking the <strong>trash bin<\/strong> icon above it. Then, select <strong>Add first step&hellip; &rarr; On a schedule<\/strong>.<\/p><div class=\"wp-block-image\"><figure data-wp-context='{\"imageId\":\"69dfb26927e17\"}' data-wp-interactive=\"core\/image\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2025\/03\/n8n-editor-on-a-schedule-highlighted-1024x481.png\" alt=\"The On a schedule trigger in the n8n workflow editor canvas\" class=\"wp-image-125126\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>In the <strong>Trigger Rules<\/strong> section, set the interval to hours, days, weeks, or a custom interval and specify the exact time you want the workflow to run.<\/p><div class=\"wp-block-image\"><figure data-wp-context='{\"imageId\":\"69dfb269288d4\"}' data-wp-interactive=\"core\/image\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2025\/03\/n8n-schedule-trigger-node-1024x545.png\" alt=\"The configuration dialog and output pane of the Schedule Trigger node in n8n\" class=\"wp-image-125127\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>Don&rsquo;t forget to connect the trigger to the <strong>SEO specialist<\/strong> node and re-test the entire workflow afterward. Then, activate the workflow by toggling the <strong>activation<\/strong> switch in the top bar of your editor canvas.<\/p><figure data-wp-context='{\"imageId\":\"69dfb269291da\"}' data-wp-interactive=\"core\/image\" class=\"wp-block-image aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2025\/03\/n8n-editor-activation-highlighted-1024x122.png\" alt=\"The activation switch in the n8n workflow editor canvas\n\" class=\"wp-image-125128\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><p>Here&rsquo;s what your final automated content generation workflow should look like:<\/p><figure data-wp-context='{\"imageId\":\"69dfb26929a19\"}' data-wp-interactive=\"core\/image\" class=\"wp-block-image aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2025\/03\/n8n-content-generation-workflow-1024x180.png\" alt=\"The final output of the automated content generation workflow in n8n\n\" class=\"wp-image-125129\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><h2 class=\"wp-block-heading\" id=\"h-best-practices-for-scaling-workflow-as-content-grows\"><strong>Best practices for scaling workflow as content grows<\/strong><\/h2><p>As your content production grows, you need to optimize your workflow for efficiency and high-quality output. Below are key best practices to ensure your automation scales with increasing content demands.<\/p><p><strong>Add advanced nodes for enhanced functionality<\/strong><\/p><p>Include additional nodes to improve content quality and automation:<\/p><ul class=\"wp-block-list\">\n<li><strong>Sentiment analysis node<\/strong> &ndash; ensures the generated article aligns with your brand&rsquo;s voice.<\/li>\n\n\n\n<li><strong>OpenAI&rsquo;s DALL&middot;E<\/strong> &ndash; auto-generates relevant images for each article.<\/li>\n\n\n\n<li><strong>Another AI agent to create SEO metadata<\/strong> &ndash; writes meta titles and descriptions for better search visibility.<\/li>\n<\/ul><p><strong>Distribute workload across multiple workflows<\/strong><\/p><p>Instead of running everything in a single workflow, break it into specialized, interconnected workflows:<\/p><ul class=\"wp-block-list\">\n<li><strong>Content generation workflow<\/strong> &ndash; handles keyword research, outline creation, drafting, and refinement.<\/li>\n\n\n\n<li><strong>Publishing workflow<\/strong> &ndash; manages formatting, metadata generation, and content publishing.<\/li>\n<\/ul><p>Then, use a <strong>Webhook <\/strong>node to trigger workflows asynchronously and efficiently handle high-volume content requests.<\/p><p><strong>Automate review and approval processes<\/strong><\/p><p>As the volume of generated content increases, you may need a manual review step to maintain quality control before publishing:<\/p><ul class=\"wp-block-list\">\n<li>Store drafts in Google Sheets or Airtable for quick approval.<\/li>\n\n\n\n<li>Send Slack or Telegram notifications to team members for content review.<\/li>\n\n\n\n<li>Add a manual approval step in the workflow to ensure quality control before content goes live.<\/li>\n<\/ul><p><div class=\"protip\">\n                    <h4 class=\"title\">Suggested Reading<\/h4>\n                    <p>Want to learn more about integrating AI agents with n8n? Check out our article on <a href=\"\/my\/tutorials\/how-to-build-ai-agent-with-n8n\">how set up an AI agent on n8n with Hostinger VPS<\/a>.<\/p>\n                <\/div>\n\n\n\n<\/p><h2 class=\"wp-block-heading\" id=\"h-conclusion\"><strong>Conclusion<\/strong><\/h2><p>The multi-agent content generation approach lets each AI agent handle a specific task, creating a structured and efficient content workflow while minimizing manual effort.<\/p><p>Using n8n, you can build an automated content generation workflow that streamlines the entire process. Here&rsquo;s a quick recap of the steps:<\/p><ol class=\"wp-block-list\">\n<li>Set up n8n and create a new workflow.<\/li>\n\n\n\n<li>Add the first DeepSeek node to generate a keyword.<\/li>\n\n\n\n<li>Structure the outline based on the chosen keyword.<\/li>\n\n\n\n<li>Write a full-length, engaging article.<\/li>\n\n\n\n<li>Edit the article to improve readability.<\/li>\n\n\n\n<li>Fix formatting and convert it to HTML.<\/li>\n\n\n\n<li>Publish the content to Ghost.<\/li>\n\n\n\n<li>Test and automate the workflow.<\/li>\n<\/ol><p>You can also refine your workflow by adding more nodes for advanced functionality or including a manual review step to maintain content quality.<\/p><p>If you&rsquo;re ready to take automation even further, <a href=\"\/my\/tutorials\/n8n-integrations\">explore n8n&rsquo;s integrations<\/a> with analytics tools, email marketing platforms, and other services to enhance your content strategy.<\/p><h2 class=\"wp-block-heading\" id=\"h-how-to-use-n8n-to-generate-content-faq\"><strong>How to use n8n to generate content FAQ<\/strong><\/h2><div class=\"schema-faq wp-block-yoast-faq-block\"><div class=\"schema-faq-section\" id=\"faq-question-1742221653338\"><h3 class=\"schema-faq-question\"><strong>Do I need programming skills to use n8n for content generation?<\/strong><\/h3> <p class=\"schema-faq-answer\">No, you don&rsquo;t need programming skills to use n8n, as it&rsquo;s a <a href=\"\/my\/tutorials\/what-is-no-code-automation\">no-code workflow automation<\/a> tool. However, having basic scripting knowledge can help fix formatting issues, extract titles and content, and clean unwanted characters, because AI content tends to have extra spacing or markdown elements that need adjustment.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1742221657628\"><h3 class=\"schema-faq-question\"><strong>How does the multi-agent approach improve content creation?<\/strong><\/h3> <p class=\"schema-faq-answer\">A multi-agent content engine distributes tasks across specialized AI agents, improving efficiency and content quality. Each agent focuses on a specific role, such as topic research, outline generation, drafting, editing, and formatting, which reduces inconsistencies and enhances readability.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1742221664161\"><h3 class=\"schema-faq-question\"><strong>Can I integrate n8n with a CMS?<\/strong><\/h3> <p class=\"schema-faq-answer\">Yes, you can integrate n8n with CMS platforms that support API-based publishing, like Ghost, WordPress, and Strapi. API-based publishing means the content is sent directly from n8n to the CMS, enabling automated post creation, scheduling, and updates without manually accessing the CMS dashboard.<\/p> <\/div> <\/div>\n","protected":false},"excerpt":{"rendered":"<p>As a workflow automation tool, n8n lets you connect different apps and services to streamline tasks. One powerful use case is AI-powered content creation, which lets you automate the entire process of writing high-quality blog posts with minimal manual effort. When using n8n, you can build a workflow that fetches trending topics, writes full-length articles, [&#8230;]<\/p>\n<p><a class=\"btn btn-secondary understrap-read-more-link\" href=\"\/my\/tutorials\/how-to-use-n8n-to-generate-content\">Read More&#8230;<\/a><\/p>\n","protected":false},"author":411,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"rank_math_title":"","rank_math_description":"","rank_math_focus_keyword":"","footnotes":""},"categories":[22641,22639],"tags":[],"class_list":["post-125285","post","type-post","status-publish","format-standard","hentry","category-pre-installed-applications","category-vps"],"hreflangs":[{"locale":"en-US","link":"https:\/\/www.hostinger.com\/tutorials\/how-to-use-n8n-to-generate-content","default":0},{"locale":"en-UK","link":"https:\/\/www.hostinger.com\/uk\/tutorials\/how-to-use-n8n-to-generate-content","default":0},{"locale":"en-IN","link":"https:\/\/www.hostinger.com\/in\/tutorials\/how-to-use-n8n-to-generate-content","default":0},{"locale":"en-CA","link":"https:\/\/www.hostinger.com\/ca\/tutorials\/how-to-use-n8n-to-generate-content","default":0},{"locale":"en-PH","link":"https:\/\/www.hostinger.com\/ph\/tutorials\/how-to-use-n8n-to-generate-content","default":0},{"locale":"en-MY","link":"https:\/\/www.hostinger.com\/my\/tutorials\/how-to-use-n8n-to-generate-content","default":0},{"locale":"en-AU","link":"https:\/\/www.hostinger.com\/au\/tutorials\/how-to-use-n8n-to-generate-content","default":0},{"locale":"en-NG","link":"https:\/\/www.hostinger.com\/ng\/tutorials\/how-to-use-n8n-to-generate-content","default":0}],"_links":{"self":[{"href":"https:\/\/www.hostinger.com\/my\/tutorials\/wp-json\/wp\/v2\/posts\/125285","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hostinger.com\/my\/tutorials\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hostinger.com\/my\/tutorials\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/my\/tutorials\/wp-json\/wp\/v2\/users\/411"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/my\/tutorials\/wp-json\/wp\/v2\/comments?post=125285"}],"version-history":[{"count":0,"href":"https:\/\/www.hostinger.com\/my\/tutorials\/wp-json\/wp\/v2\/posts\/125285\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.hostinger.com\/my\/tutorials\/wp-json\/wp\/v2\/media?parent=125285"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hostinger.com\/my\/tutorials\/wp-json\/wp\/v2\/categories?post=125285"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hostinger.com\/my\/tutorials\/wp-json\/wp\/v2\/tags?post=125285"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}