{
  "name": "Extract clean content from any URL and summarize it with AI using Rendex",
  "nodes": [
    {
      "parameters": {
        "content": "## 🧠 URL → clean content → AI summary — powered by Rendex Extract\n\n**Who it's for:** anyone building RAG pipelines, research assistants, or content digests who needs clean, reader-mode text from a live page (paywalls, JS apps, and cookie walls handled).\n\n**What it does:** the **Rendex** node extracts clean Markdown from a URL (no ads, nav, or boilerplate), then an LLM summarizes it. Ideal input for vector stores and agents.\n\n**How it works:**\n1. A trigger supplies the URL (here Manual + sample **Target URL** — swap in a Webhook, RSS, or a Sheets row)\n2. **Rendex — Extract** returns `{{ $json.data.title }}` + `{{ $json.data.content }}` as clean Markdown\n3. **Summarize** (LLM chain) turns it into a short summary\n\n**How to use:**\n1. Install `n8n-nodes-rendex` and add your **Rendex API** credential (free key at rendex.dev)\n2. Add your **OpenAI** (or any chat model) credential on the model node\n3. Click **Test workflow**\n\n📚 Docs: https://rendex.dev/docs/n8n",
        "height": 460,
        "width": 430
      },
      "id": "sticky-overview",
      "name": "Overview",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [-370, 100]
    },
    {
      "parameters": {
        "content": "### 1 · Target URL\nSwap Manual + Target URL for your real source. Rendex Extract works on JS-heavy pages and returns clean, LLM-ready Markdown — set **Extract Format** to `json` for structured fields (title, byline, excerpt).",
        "height": 320,
        "width": 320,
        "color": 4
      },
      "id": "sticky-source",
      "name": "Source note",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [110, 100]
    },
    {
      "parameters": {},
      "id": "manual-trigger",
      "name": "When clicking Test",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [170, 300]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            { "id": "d1", "name": "url", "value": "https://rendex.dev/blog", "type": "string" }
          ]
        },
        "options": {}
      },
      "id": "target-url",
      "name": "Target URL",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [380, 300]
    },
    {
      "parameters": {
        "content": "### 2 · Extract clean content\nReturns reader-mode content under `data.content` plus `data.title`, `data.byline`, `data.excerpt`. Feed `data.content` to any LLM, vector store, or summarizer.",
        "height": 300,
        "width": 320,
        "color": 5
      },
      "id": "sticky-extract",
      "name": "Extract note",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [640, 100]
    },
    {
      "parameters": {
        "resource": "document",
        "operation": "extract",
        "url": "={{ $json.url }}",
        "extractFormat": "markdown",
        "additionalFields": {
          "blockCookieBanners": true
        }
      },
      "id": "rendex-extract",
      "name": "Rendex — Extract",
      "type": "n8n-nodes-rendex.rendex",
      "typeVersion": 1,
      "position": [720, 300]
    },
    {
      "parameters": {
        "content": "### 3 · Summarize with AI\nA Basic LLM Chain summarizes the extracted Markdown. Add your chat-model credential on **OpenAI Chat Model**. Replace with an **AI Agent** + **vector store** for a full RAG ingest.",
        "height": 320,
        "width": 340,
        "color": 3
      },
      "id": "sticky-ai",
      "name": "AI note",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [1000, 100]
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=Summarize the following article in 3 concise bullet points.\n\nTitle: {{ $json.data.title }}\n\nContent:\n{{ $json.data.content }}"
      },
      "id": "summarize",
      "name": "Summarize",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "typeVersion": 1.5,
      "position": [1080, 300]
    },
    {
      "parameters": {
        "model": "gpt-4o-mini",
        "options": {}
      },
      "id": "lm-openai",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1,
      "position": [1080, 500]
    }
  ],
  "connections": {
    "When clicking Test": {
      "main": [[{ "node": "Target URL", "type": "main", "index": 0 }]]
    },
    "Target URL": {
      "main": [[{ "node": "Rendex — Extract", "type": "main", "index": 0 }]]
    },
    "Rendex — Extract": {
      "main": [[{ "node": "Summarize", "type": "main", "index": 0 }]]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [[{ "node": "Summarize", "type": "ai_languageModel", "index": 0 }]]
    }
  },
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "meta": {
    "instanceId": ""
  }
}
