AutomationFlowsAI & RAG › Create Dual-source Expert Articles with Internal Knowledge and Web Research…

Create Dual-source Expert Articles with Internal Knowledge and Web Research…

Original n8n title: Create Dual-source Expert Articles with Internal Knowledge and Web Research Using Lookio, Linkup, and Gpt-5

ByGuillaume Duvernay @duv on n8n.io

Create truly authoritative articles that blend your unique, internal expertise with the latest, most relevant information from the web. This template orchestrates an advanced "hybrid research" content process that delivers unparalleled depth and credibility.

Event trigger★★★★☆ complexityAI-powered21 nodesChain LlmForm TriggerOutput Parser StructuredOpenAI ChatHTTP Request
AI & RAG Trigger: Event Nodes: 21 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Chainllm → Form Trigger recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

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

Download .json
{
  "nodes": [
    {
      "id": "7bf61071-1e5c-4a4f-a187-86322f7870fd",
      "name": "New content - generate research questions",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        -1024,
        528
      ],
      "parameters": {
        "text": "=Content title:  {{ $json.Title }}\n\nArticle guidelines: {{ $json.Guidelines }}\n\n",
        "messages": {
          "messageValues": [
            {
              "message": "=You will receive a content title and an angle. Return 5\u20138 non-overlapping questions in JSON array format that cover everything needed to write excellent content as it breaks down the topic into sub-questions.\n\nGuidelines:  \n- Start with simple, short broad questions for example to define the terms (e.g., What is X?, Why is X important?, How to do X?).  \n- Then move into more specific, advanced, or analytical questions.  \n- Ensure questions together form a complete coverage of the topic.   \n\n## Output format:\n\nYou'll return the questions in such a JSON ARRAY:\n\n[\n  {\n    \"question\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit?\"\n  },\n  {\n    \"question\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua?\"\n  },\n  {\n    \"question\": \"Lorem ipsum dolor sit amet?\"\n  },\n  {\n    \"question\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua, ut enim ad minim veniam?\"\n  },\n  {\n    \"question\": \"Lorem ipsum dolor sit amet, consectetur?\"\n  }\n]"
            }
          ]
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.5
    },
    {
      "id": "1b690964-85a5-4b63-8bc0-bdcabda04687",
      "name": "New content - Generate the AI output",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        144,
        -48
      ],
      "parameters": {
        "text": "=Article title:\n\n{{ $('Prepare form values').first().json.Title }}\n\nArticle guidelines:\n\n{{ $('Prepare form values').first().json.Guidelines }}\n\n\nContent to leverage:\n\nThis detailed Q&A research provides high-quality knowledge, insights, and sources for your content. Each question features insights from our internal knowledge base and insights found on the web. Be sure to include source links in your output whenever a source was used.\n\n{{ JSON.stringify($json['Content to leverage'], null, 2) }}\n",
        "messages": {
          "messageValues": [
            {
              "message": "=# Role\n\nYour role is to write an article based on the request in the user message.\n\n# What the user message contains\n\nThe user message includes the article title, any guidelines to follow, and comprehensive research material. This research is the sole basis for your article \u2014 do not invent information beyond it. When the research includes source links, integrate them smoothly as hyperlinks in the article.\n\n# How to write good articles\n\nYou excel at writing articles by making sure that they deliver value, are concise, seem like they are human-written, not using typical AI useless sentence formulations.\n\n# Your output format\n\nOutput only the full article.\n\n* Begin with a `# H1` title.\n* Use subheadings throughout the article."
            }
          ]
        },
        "promptType": "define"
      },
      "typeVersion": 1.5
    },
    {
      "id": "2bcda6a8-4a48-4f93-be65-8dc21116d2dd",
      "name": "New article form",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        -1568,
        528
      ],
      "parameters": {
        "options": {},
        "formTitle": "New article",
        "formFields": {
          "values": [
            {
              "fieldLabel": "Article title",
              "placeholder": "10 ways to do Influencer Marketing in 2025",
              "requiredField": true
            },
            {
              "fieldLabel": "Article guidelines",
              "placeholder": "Promote xyz and write in British English...",
              "requiredField": true
            }
          ]
        },
        "formDescription": "Fill in this form to trigger the generation of a new article."
      },
      "typeVersion": 2.3
    },
    {
      "id": "06e35599-9ab1-445b-aa1e-7a04ea798c8a",
      "name": "Prepare form values",
      "type": "n8n-nodes-base.set",
      "position": [
        -1312,
        528
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "ec4734ed-654f-478a-ab90-91bfcee1e208",
              "name": "Title",
              "type": "string",
              "value": "={{ $json['Article title'] }}"
            },
            {
              "id": "c034402e-a7b9-4c91-aaed-f24a838c3d91",
              "name": "Guidelines",
              "type": "string",
              "value": "={{ $json['Article guidelines'] }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "ddd15121-9dd9-48e0-90cf-5f3970e43564",
      "name": "Structured Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        -896,
        752
      ],
      "parameters": {
        "jsonSchemaExample": "[\n  {\n    \"question\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit?\"\n  },\n  {\n    \"question\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua?\"\n  },\n  {\n    \"question\": \"Lorem ipsum dolor sit amet?\"\n  },\n  {\n    \"question\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua, ut enim ad minim veniam?\"\n  },\n  {\n    \"question\": \"Lorem ipsum dolor sit amet, consectetur?\"\n  }\n]"
      },
      "typeVersion": 1.2
    },
    {
      "id": "bbf1d36c-9cfa-4bb0-b1b1-7403493bd836",
      "name": "GPT 5 mini",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -1024,
        752
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-5-mini",
          "cachedResultName": "gpt-5-mini"
        },
        "options": {
          "reasoningEffort": "low"
        }
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "1472aa87-3e1a-4ca1-8985-4e4a37ea6544",
      "name": "Split Out Questions",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        -608,
        528
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "output"
      },
      "typeVersion": 1
    },
    {
      "id": "d49ae369-48e2-4566-9d46-f532abd54213",
      "name": "Loop Over Questions",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -352,
        512
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "ceb186a4-09ba-4cf2-bb3d-3ff8f9677d13",
      "name": "GPT 5 chat",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        224,
        176
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-5-chat-latest",
          "cachedResultName": "gpt-5-chat-latest"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "2b8a4dbb-0920-432c-a4b0-8cb08a49a1ea",
      "name": "Article result",
      "type": "n8n-nodes-base.set",
      "position": [
        560,
        -48
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "d3b8c4bc-27d9-4d57-b8d6-3a40b84d7b7d",
              "name": "Article",
              "type": "string",
              "value": "={{ $json.text }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "6f55841c-a444-4f2a-ab9d-ebd7b2dd222a",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -96,
        512
      ],
      "parameters": {
        "color": 7,
        "width": 224,
        "height": 368,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nConnect your [lookio.app](https://www.lookio.app) credentials & set the ID of the Assistant to query"
      },
      "typeVersion": 1
    },
    {
      "id": "f167aab8-2d09-4748-9eba-74bbd8acae27",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1152,
        -256
      ],
      "parameters": {
        "width": 832,
        "height": 560,
        "content": "# Expert AI Article Writer - Knowledge base + Web\n\nThis isn't just a writer; it's an automated research and content team. It generates high-quality, reliable articles by grounding the entire process in *your own* knowledge base.\n\n## How it works\n1.  **Decompose:** An AI planner breaks your article topic into a series of sub-questions.\n2.  **Research:** It queries your **Lookio Assistant** to gather insights from your internal knowledge base and queries **Linkup** to gather insights from the web.\n3.  **Write:** A final, powerful AI writes the article based *only* on this verified research, including source links.\n\n## How to use\n1.  **Set up in Lookio:** First, build your assistant in **Lookio** with your knowledge sources and get your **API Token** & **Assistant ID**.\n2.  **Configure this workflow:**\n    * Connect your **AI provider** to the LLM nodes.\n    * In the **Query Lookio Assistant** node, add your **Assistant ID** and **API Token**.\n    * In the **Query Linkup for AI web-search** node, add your Linkup **credentials**.\n3.  **Run:** Use the form to enter a title and guidelines, and let the workflow generate your article.\n\n\n*A template built by Guillaume Duvernay*"
      },
      "typeVersion": 1
    },
    {
      "id": "7a895183-d6fc-4a09-bd3a-ec90e633a040",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -448,
        384
      ],
      "parameters": {
        "color": 6,
        "width": 1232,
        "height": 608,
        "content": "## Answering each sub-question one by one with Lookio for internal knowledge insights & Linkup for web-insights"
      },
      "typeVersion": 1
    },
    {
      "id": "e1be0351-9071-446c-acab-2640f776b2ea",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        80,
        -208
      ],
      "parameters": {
        "color": 5,
        "width": 368,
        "height": 512,
        "content": "## AI step writing the final article based on the research and initial request"
      },
      "typeVersion": 1
    },
    {
      "id": "6a0492ec-fd4c-449c-ab88-d8dcdd02f9b1",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1152,
        384
      ],
      "parameters": {
        "color": 6,
        "width": 480,
        "height": 608,
        "content": "## Breaking down the topic into sub-questions"
      },
      "typeVersion": 1
    },
    {
      "id": "fa485a6a-d18e-4ff6-a808-9e3deb904c0f",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1648,
        400
      ],
      "parameters": {
        "color": 4,
        "width": 272,
        "height": 304,
        "content": "## Fill in this form to request a new article"
      },
      "typeVersion": 1
    },
    {
      "id": "13a04bfc-4e36-48fa-8c3e-c0104a959c8f",
      "name": "Query Lookio Assistant",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -32,
        560
      ],
      "parameters": {
        "url": "https://api.lookio.app/webhook/query",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "sendHeaders": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "query",
              "value": "={{ $json.question }}"
            },
            {
              "name": "assistant_id",
              "value": "<YOUR ASSISTANT ID>"
            },
            {
              "name": "query_mode",
              "value": "flash"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "api_key",
              "value": "<YOUR API KEY>"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "3fe8d920-61d3-410c-bba5-0a42ac0783f2",
      "name": "Format question and insights",
      "type": "n8n-nodes-base.set",
      "position": [
        592,
        768
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "1e33a1f4-a1a2-4962-ac72-cc518d7ff043",
              "name": "Question",
              "type": "string",
              "value": "={{ $('Loop Over Questions').item.json.question }}"
            },
            {
              "id": "0c1e6dbd-11cf-49b0-8105-f4736c5102aa",
              "name": "Internal knowledge insights",
              "type": "string",
              "value": "={{ $('Query Lookio Assistant').item.json.Output }}"
            },
            {
              "id": "903bcf38-13dd-48fb-8eb3-83f7a232aa53",
              "name": "Web insights",
              "type": "array",
              "value": "={{ $json.insights }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "881dfbff-7917-49cc-9584-6e43ada8fe8e",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        208,
        512
      ],
      "parameters": {
        "color": 7,
        "width": 224,
        "height": 368,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nConnect your linkup.so credentials (adding your API key in the header or using \"generic credentials\" that you've stored for Linkup)."
      },
      "typeVersion": 1
    },
    {
      "id": "6bc89e0a-ab8d-44ff-bbda-d36764791fc1",
      "name": "Query Linkup for AI web-search",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        272,
        560
      ],
      "parameters": {
        "url": "https://api.linkup.so/v1/search",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "q",
              "value": "=Find 5 specific and meaningful insights about the topic:\n\n\"{{ $('Loop Over Questions').item.json.question }}\"\n\nthat would strengthen an article paragraph. Each insight should be a concrete finding, statistic, research result, or illustrative example (not just generic background), and should come from a robust source."
            },
            {
              "name": "depth",
              "value": "standard"
            },
            {
              "name": "outputType",
              "value": "structured"
            },
            {
              "name": "structuredOutputSchema",
              "value": "={\n  \"type\": \"object\",\n  \"properties\": {\n    \"insights\": {\n      \"description\": \"A list of 5 insights about the topic\",\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"insight\": {\n            \"description\": \"A one-sentence key insight, finding, or example about the topic\",\n            \"type\": \"string\"\n          },\n          \"url\": {\n            \"description\": \"The URL of the source where the insight is from\",\n            \"type\": \"string\"\n          },\n          \"title\": {\n            \"description\": \"The title of the page containing the insight\",\n            \"type\": \"string\"\n          }\n        },\n        \"required\": [\"insight\", \"url\", \"title\"]\n      }\n    }\n  }\n}"
            },
            {
              "name": "includeImages",
              "value": "=false"
            }
          ]
        },
        "genericAuthType": "httpBearerAuth"
      },
      "credentials": {
        "httpBearerAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "74d00282-becc-4bd2-a853-fd90abac6ce6",
      "name": "Aggregate full research",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        -112,
        160
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData",
        "destinationFieldName": "Content to leverage"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "GPT 5 chat": {
      "ai_languageModel": [
        [
          {
            "node": "New content - Generate the AI output",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "GPT 5 mini": {
      "ai_languageModel": [
        [
          {
            "node": "New content - generate research questions",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "New article form": {
      "main": [
        [
          {
            "node": "Prepare form values",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Questions": {
      "main": [
        [
          {
            "node": "Aggregate full research",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Query Lookio Assistant",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare form values": {
      "main": [
        [
          {
            "node": "New content - generate research questions",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out Questions": {
      "main": [
        [
          {
            "node": "Loop Over Questions",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Query Lookio Assistant": {
      "main": [
        [
          {
            "node": "Query Linkup for AI web-search",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate full research": {
      "main": [
        [
          {
            "node": "New content - Generate the AI output",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "New content - generate research questions",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Format question and insights": {
      "main": [
        [
          {
            "node": "Loop Over Questions",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Query Linkup for AI web-search": {
      "main": [
        [
          {
            "node": "Format question and insights",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "New content - Generate the AI output": {
      "main": [
        [
          {
            "node": "Article result",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "New content - generate research questions": {
      "main": [
        [
          {
            "node": "Split Out Questions",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

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

Pro

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

About this workflow

Create truly authoritative articles that blend your unique, internal expertise with the latest, most relevant information from the web. This template orchestrates an advanced "hybrid research" content process that delivers unparalleled depth and credibility.

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

More AI & RAG workflows → · Browse all categories →

Related workflows

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

AI & RAG

This template attempts to replicate OpenAI's DeepResearch feature which, at time of writing, is only available to their pro subscribers.

Output Parser Structured, OpenAI Chat, Form Trigger +8
AI & RAG

My workflow 53. Uses formTrigger, httpRequest, lmChatOpenAi, form. Event-driven trigger; 74 nodes.

Form Trigger, HTTP Request, OpenAI Chat +15
AI & RAG

Episode 23: UGC with nanobanana. Uses lmChatOpenAi, lmChatOllama, lmChatDeepSeek, lmChatOpenRouter. Event-driven trigger; 74 nodes.

OpenAI Chat, Ollama Chat, Lm Chat Deep Seek +12
AI & RAG

PixelSensei(ZH). Uses agent, outputParserStructured, formTrigger, lmChatOpenAi. Event-driven trigger; 55 nodes.

Agent, Output Parser Structured, Form Trigger +4
AI & RAG

This workflow is perfect for: Agile development teams and project managers who need to quickly set up Jira projects Product managers who want to convert feature ideas into structured user stories and

Form Trigger, OpenAI Chat, Output Parser Structured +5