AutomationFlowsGeneral › AI Research with Jina AI Deep Search

AI Research with Jina AI Deep Search

Original n8n title: Ai-powered Research with Jina AI Deep Search

AI-Powered Research with Jina AI Deep Search. Uses stickyNote, httpRequest, chatTrigger. Chat trigger; 6 nodes.

Chat trigger trigger★★★★☆ complexityAI-powered6 nodesHTTP RequestChat Trigger
General Trigger: Chat trigger Nodes: 6 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow follows the Chat Trigger → HTTP Request 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
{
  "id": "GToc9QTzJY1h1w3y",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "AI-Powered Research with Jina AI Deep Search",
  "tags": [],
  "nodes": [
    {
      "id": "c76a7993-e7b1-426e-bcb4-9a18d9c72b83",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -820,
        -140
      ],
      "parameters": {
        "color": 6,
        "width": 740,
        "height": 760,
        "content": "\n# **\ud83d\ude80 Developed by Leonard van Hemert**  \n\nThank you for using **FREE: Open Deep Research 2.0**! \ud83c\udf89  \n\nThis workflow was created to **democratize AI-powered research** and make advanced **automated knowledge discovery** available to **everyone**, without **API restrictions** or **cost barriers**.  \n\nIf you find this useful, feel free to **connect with me on LinkedIn** and stay updated on my latest AI & automation projects!  \n\n\ud83d\udd17 **Follow me on LinkedIn**: [Leonard van Hemert](https://www.linkedin.com/in/leonard-van-hemert/)  \n\nI truly appreciate the support from the **n8n community**, and I can\u2019t wait to see how you use and improve this workflow! \ud83d\ude80  \n\nHappy researching,  \n**Leonard van Hemert** \ud83d\udca1"
      },
      "typeVersion": 1
    },
    {
      "id": "5620b6b5-1485-43a8-9acd-3368147bd742",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -60,
        -140
      ],
      "parameters": {
        "width": 740,
        "height": 300,
        "content": "## \ud83d\ude80 **FREE: Open Deep Research 2.0**  \nFully automated **AI-powered research workflow** using **Jina AI\u2019s DeepSearch** to generate structured, fact-based reports\u2014**no API key required!**  "
      },
      "typeVersion": 1
    },
    {
      "id": "dbe1cc91-34b4-4e5b-b404-dd86f47d1ebf",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -60,
        180
      ],
      "parameters": {
        "width": 740,
        "height": 440,
        "content": "## \ud83e\udde0 **How This Workflow Works**  \n\nThis workflow automates **deep research and report generation** using **Jina AI's DeepSearch API**, making **advanced knowledge discovery accessible for free**.  \n\n1\ufe0f\u20e3 **User Input \u2192 AI Research**  \n- A user **enters a research query** via chat.  \n- The workflow **sends the query** to **Jina AI\u2019s DeepSearch API** for **in-depth analysis**.  \n\n2\ufe0f\u20e3 **AI-Powered Insights**  \n- DeepSearch **retrieves** and **analyzes** relevant information.  \n- The response includes **key insights, structured analysis, and sources**.  \n\n3\ufe0f\u20e3 **Markdown Formatting & Cleanup**  \n- The response **passes through a Code Node** that extracts, cleans, and **formats** the AI-generated insights into **readable Markdown output**.  \n- URLs are properly formatted, footnotes are structured, and the report is easy to read.  \n\n4\ufe0f\u20e3 **Final Output**  \n- The final, **well-structured research report** is ready for use, **fully automated and free of charge!**  "
      },
      "typeVersion": 1
    },
    {
      "id": "42fd2f04-7d83-44c9-a41b-48860efbcf79",
      "name": "Jina AI DeepSearch Request",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        220,
        0
      ],
      "parameters": {
        "url": "https://deepsearch.jina.ai/v1/chat/completions",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"model\": \"jina-deepsearch-v1\",\n  \"messages\": [\n    {\n      \"role\": \"user\",\n      \"content\": \"You are an advanced AI researcher that provides precise, well-structured, and insightful reports based on deep analysis. Your responses are factual, concise, and highly relevant.\"\n    },\n    {\n      \"role\": \"assistant\",\n      \"content\": \"Hi, how can I help you?\"\n    },\n    {\n      \"role\": \"user\",\n      \"content\": \"Provide a deep and insightful analysis on: \\\"{{ $json.chatInput }}\\\". Ensure the response is well-structured, fact-based, and directly relevant to the topic, with no unnecessary information.\"\n    }\n  ],\n  \"stream\": true,\n  \"reasoning_effort\": \"low\"\n}",
        "sendBody": true,
        "specifyBody": "json"
      },
      "typeVersion": 4.2
    },
    {
      "id": "1b7b3bbe-2068-4d3a-a962-134bbb6ee516",
      "name": "User Research Query Input",
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "position": [
        0,
        0
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.1
    },
    {
      "id": "218cbfe2-78de-4b00-875a-51761ac9f5c7",
      "name": "Format & Clean AI Response",
      "type": "n8n-nodes-base.code",
      "position": [
        440,
        0
      ],
      "parameters": {
        "jsCode": "function extractAndFormatMarkdown(input) {\n    let extractedContent = [];\n\n    // Extract raw data string from n8n input\n    let rawData = input.first().json.data;\n\n    // Split into individual JSON strings\n    let jsonStrings = rawData.split(\"\\n\\ndata: \").map(s => s.replace(/^data: /, ''));\n\n    let lastContent = \"\";\n    \n    // Reverse loop to find the last \"content\" field\n    for (let i = jsonStrings.length - 1; i >= 0; i--) {\n        try {\n            let parsedChunk = JSON.parse(jsonStrings[i]);\n\n            if (parsedChunk.choices && parsedChunk.choices.length > 0) {\n                for (let j = parsedChunk.choices.length - 1; j >= 0; j--) {\n                    let choice = parsedChunk.choices[j];\n\n                    if (choice.delta && choice.delta.content) {\n                        lastContent = choice.delta.content.trim();\n                        break;\n                    }\n                }\n            }\n\n            if (lastContent) break; // Stop once the last content is found\n        } catch (error) {\n            console.error(\"Failed to parse JSON string:\", jsonStrings[i], error);\n        }\n    }\n\n    // Clean and format Markdown\n    lastContent = lastContent.replace(/\\[\\^(\\d+)\\]: (.*?)\\n/g, \"[$1]: $2\\n\");  // Format footnotes\n    lastContent = lastContent.replace(/\\[\\^(\\d+)\\]/g, \"[^$1]\");  // Inline footnotes\n    lastContent = lastContent.replace(/(https?:\\/\\/[^\\s]+)(?=[^]]*\\])/g, \"<$1>\");  // Format links\n\n    // Return formatted content as an array of objects (n8n expects this format)\n    return [{ text: lastContent.trim() }];\n}\n\n// Execute function and return formatted output\nreturn extractAndFormatMarkdown($input);\n"
      },
      "typeVersion": 2
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "e03d69b5-3304-4f28-b99f-970d6fd1225b",
  "connections": {
    "User Research Query Input": {
      "main": [
        [
          {
            "node": "Jina AI DeepSearch Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format & Clean AI Response": {
      "main": [
        []
      ]
    },
    "Jina AI DeepSearch Request": {
      "main": [
        [
          {
            "node": "Format & Clean AI Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Pro

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

About this workflow

AI-Powered Research with Jina AI Deep Search. Uses stickyNote, httpRequest, chatTrigger. Chat trigger; 6 nodes.

Source: https://github.com/Zie619/n8n-workflows — original creator credit. Request a take-down →

More General workflows → · Browse all categories →

Related workflows

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

General

Testing Mulitple Local LLM with LM Studio. Uses stickyNote, httpRequest, chatTrigger, dateTime. Chat trigger; 21 nodes.

HTTP Request, Chat Trigger, OpenAI Chat +2
General

Testing Mulitple Local LLM with LM Studio. Uses stickyNote, httpRequest, chatTrigger, dateTime. Chat trigger; 21 nodes.

HTTP Request, Chat Trigger, OpenAI Chat +2
General

TopSourcer - Finds LinkedIn Profiles using natural language. Uses chatTrigger, stickyNote, googleSheets, httpRequest. Chat trigger; 18 nodes.

Chat Trigger, Google Sheets, HTTP Request +1
General

🔍🛠️ Tavily Search & Extract - Template. Uses stickyNote, httpRequest, lmChatOpenAi, chainLlm. Chat trigger; 17 nodes.

HTTP Request, OpenAI Chat, Chain Llm +1
General

YouTube Video Transcriber. Uses chatTrigger, respondToWebhook, stickyNote, httpRequest. Chat trigger; 14 nodes.

Chat Trigger, HTTP Request, OpenAI