{
  "name": "Find Content Gaps in Competitors' Websites with InfraNodus GraphRAG for SEO",
  "nodes": [
    {
      "id": "17af96f8-2f12-48b3-864f-bd28aa765ba6",
      "name": "When clicking \"Execute Workflow\"",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -200,
        520
      ]
    },
    {
      "id": "9f270d49-c494-4c67-8749-e9ae3dfd0cef",
      "name": "HTTP Request",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        380,
        300
      ]
    },
    {
      "id": "3290629e-655a-4091-aee4-41482f441a52",
      "name": "HTML Extract",
      "type": "n8n-nodes-base.htmlExtract",
      "position": [
        560,
        300
      ]
    },
    {
      "id": "94146021-3b01-43d0-b6d7-9fcfca0d065a",
      "name": "Merge",
      "type": "n8n-nodes-base.merge",
      "position": [
        1580,
        140
      ]
    },
    {
      "id": "08e5118b-37df-47a7-a50d-dbd2854d3dee",
      "name": "Clean Content",
      "type": "n8n-nodes-base.code",
      "position": [
        720,
        300
      ]
    },
    {
      "id": "6eed41aa-176b-4a7c-8288-8c6dd47361df",
      "name": "Split In Batches",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        120,
        220
      ]
    },
    {
      "id": "1ca73312-3b32-4fd7-85e9-05850383d0b4",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -300,
        -200
      ],
      "parameters": {
        "width": 300,
        "height": 640,
        "content": "## 1. Specify the Google Sheet file\n\n#### It should contain the company names and their URLs (in the URL column). Also the Topical Summary and the Graph Summary columns that we will copy the data to.\n"
      }
    },
    {
      "id": "8c657ce2-a363-4a77-9417-a758a8f3d3a0",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        60,
        -160
      ],
      "parameters": {
        "width": 220,
        "height": 600,
        "content": "## 2. Avoid rate limit error\n\n#### Split requests into batches of 10 \n\nso you don't make too many requests at once. \n\n\n"
      }
    },
    {
      "id": "ebd2ae92-1757-4dc4-b21b-09ad906398ca",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        340,
        -80
      ],
      "parameters": {
        "width": 520,
        "height": 520,
        "content": "## 3. Make an HTTP request and extract text content from the links provided\n\n#### Clean up the content to extract only text, not HTML\n\nwe will then use this content to analyze data"
      }
    },
    {
      "id": "6ef3a264-586f-406a-ad44-cdbe2aa28654",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        920,
        -240
      ],
      "parameters": {
        "width": 440,
        "height": 680,
        "content": "## 4. Use InfraNodus GraphRAG Content Enhancer Tool \n\n#### It will use its AI to generate topical summaries and structural insights from every company's website. \n\nIt will generate a \n\n1) Topical Summ"
      }
    },
    {
      "id": "727b3598-b759-4c4c-bbaa-50704d159b96",
      "name": "InfraNodus GraphRAG Content Enhancer",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1080,
        260
      ]
    },
    {
      "id": "77584973-d4fd-4a5b-9344-baebdfb4e584",
      "name": "Google Docs",
      "type": "n8n-nodes-base.googleDocs",
      "position": [
        3780,
        600
      ]
    },
    {
      "id": "fd082093-c2b1-483e-b418-31bebd15d2c6",
      "name": "Aggregate",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        3100,
        600
      ]
    },
    {
      "id": "4c82a7bf-aa76-4d43-83dc-de54679b5f10",
      "name": "Read a Google Sheets File",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -200,
        240
      ]
    },
    {
      "id": "5c8a772c-573d-4115-ab61-54a492f69907",
      "name": "Update Google Sheets with Content Insights",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2000,
        240
      ]
    },
    {
      "id": "47de0abb-b1ff-4620-a80f-ac3c3a2369a6",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1500,
        -140
      ],
      "parameters": {
        "width": 260,
        "height": 460,
        "content": "## 5. Add the enhanced content to original row\n\n#### We use this node to match the result to the table row (company and URL) we used to generate this result.\n"
      }
    },
    {
      "id": "0a665031-77de-4649-a274-b19092d5f0cf",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1920,
        -100
      ],
      "parameters": {
        "width": 260,
        "height": 520,
        "content": "## 6. Enrich the original Google sheets with the content\n\n#### We save the keywords, topical clusters, topical summaries, and content gaps to the Google sheets, so you can reuse it later in other work"
      }
    },
    {
      "id": "6955a297-326e-4c30-bfd7-a3abdb2eb712",
      "name": "Wait to avoid API overload",
      "type": "n8n-nodes-base.wait",
      "position": [
        2280,
        500
      ]
    },
    {
      "id": "f1a16bb2-231f-46ae-87d8-91852223092a",
      "name": "If Node: did we process all the data?",
      "type": "n8n-nodes-base.if",
      "position": [
        2500,
        500
      ]
    },
    {
      "id": "d6aa6d5d-0cb8-4149-ad78-44b51312ad1a",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2240,
        300
      ],
      "parameters": {
        "width": 420,
        "height": 400,
        "content": "## 7. Batch complete? Go to the next one.\n\n#### We process content in batches of 10 to avoid API overload and rate limit errors."
      }
    },
    {
      "id": "e1814824-cb3d-46d3-8747-57bce510493f",
      "name": "Get the content from Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2800,
        600
      ]
    },
    {
      "id": "15dbb650-6c59-49fa-a2fd-8cf4a691b667",
      "name": "InfraNodus AI Advice",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        3320,
        480
      ]
    },
    {
      "id": "c7512eb4-d37f-4613-9b35-94739190515f",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2740,
        240
      ],
      "parameters": {
        "width": null,
        "height": 580,
        "content": "## 8. Enrich the original Google sheets with your insights\n\n#### We can then use this data for further research and SEO\n\n🚨 Make sure to specify the Google sheets file here"
      }
    },
    {
      "id": "987fd873-00ed-48c8-bbb5-ef309fbd2f21",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3040,
        240
      ],
      "parameters": {
        "width": 500,
        "height": 580,
        "content": "## 9. Get all the insights obtained from all the documents and create the final report.\n\n#### Synthesize the final report based on the main topics, summaries, and content gaps discovered in the previo"
      }
    },
    {
      "id": "7c83852a-8a77-471e-b105-6ef31e1e210e",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -300,
        760
      ],
      "parameters": {
        "width": 300,
        "height": 300,
        "content": "## 0. Specify the starting point\n\n#### You may choose to connect this node directly to the Step 8 if you already enriched the data in the Excel sheet.\n\nIn that case, the workflow will take data from t"
      }
    },
    {
      "id": "f0b063d7-65e3-4bea-8065-af0b6fdb7e8f",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -300,
        -400
      ],
      "parameters": {
        "width": 2940,
        "height": 100,
        "content": "# Stage 1: Data Enrichment"
      }
    },
    {
      "id": "5e697fdf-85b2-4761-a4e1-d555179afed8",
      "name": "Sticky Note11",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2720,
        -400
      ],
      "parameters": {
        "width": 1220,
        "height": 100,
        "content": "# Stage 2: Insight Generation"
      }
    },
    {
      "id": "75beedd8-bbb4-465e-98be-932af51e5199",
      "name": "Sticky Note12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3720,
        240
      ],
      "parameters": {
        "width": null,
        "height": 580,
        "content": "## 10. Save the insights into a Google Doc\n\n#### We can then use this data for further research and SEO\n\n🚨 Make sure to specify the Google docs file here"
      }
    },
    {
      "id": "3fdfae7a-456e-45fb-b1ed-c263838a5e20",
      "name": "Merge1",
      "type": "n8n-nodes-base.merge",
      "position": [
        3580,
        600
      ]
    },
    {
      "id": "f1ef6074-08e1-4afe-8175-9f6d9d0317a7",
      "name": "InfraNodus Question Generator",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        3320,
        700
      ]
    },
    {
      "id": "0b415fbb-5a2b-4b9a-a4ff-53d2cd3a9a33",
      "name": "Perplexity Research",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        620,
        1060
      ]
    },
    {
      "id": "a73d5f72-c5f1-46c8-ae7a-08c9ec7f0755",
      "name": "On form submission",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        280,
        1060
      ]
    },
    {
      "id": "19becdd1-a2f6-4be7-89c7-780a8e80a11b",
      "name": "OpenAI",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        920,
        1060
      ]
    },
    {
      "id": "5a14b12b-9645-4a16-a377-e707562af837",
      "name": "Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1760,
        1060
      ]
    },
    {
      "id": "068b21f2-b4e8-4ccb-9756-b0e5ee3a6833",
      "name": "Split Out",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        1260,
        1060
      ]
    },
    {
      "id": "02e38788-8624-4e8f-bb9a-3e0cbed63b49",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        1460,
        1060
      ]
    },
    {
      "id": "c2a4b61b-74c4-443c-a15e-252f896c372e",
      "name": "Sticky Note13",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        220,
        840
      ],
      "parameters": {
        "width": 1740,
        "height": 480,
        "content": "## Generate a List of URLs to Analyze \n\n#### Use this workflow to seed the Excel file with the list of URLs you'd like to analyze using the workflow above \n\nTrigger execution by clicking \"Test Workflo"
      }
    }
  ],
  "connections": {
    "Merge": {
      "main": [
        [
          {
            "node": "Update Google Sheets with Content Insights",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge1": {
      "main": [
        [
          {
            "node": "Google Docs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI": {
      "main": [
        [
          {
            "node": "Split Out",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate": {
      "main": [
        [
          {
            "node": "InfraNodus AI Advice",
            "type": "main",
            "index": 0
          },
          {
            "node": "InfraNodus Question Generator",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTML Extract": {
      "main": [
        [
          {
            "node": "Clean Content",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request": {
      "main": [
        [
          {
            "node": "HTML Extract",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Clean Content": {
      "main": [
        [
          {
            "node": "InfraNodus GraphRAG Content Enhancer",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Sheets": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [],
        [
          {
            "node": "Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split In Batches": {
      "main": [
        [
          {
            "node": "HTTP Request",
            "type": "main",
            "index": 0
          },
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "On form submission": {
      "main": [
        [
          {
            "node": "Perplexity Research",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Perplexity Research": {
      "main": [
        [
          {
            "node": "OpenAI",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "InfraNodus AI Advice": {
      "main": [
        [
          {
            "node": "Merge1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read a Google Sheets File": {
      "main": [
        [
          {
            "node": "Split In Batches",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait to avoid API overload": {
      "main": [
        [
          {
            "node": "If Node: did we process all the data?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "InfraNodus Question Generator": {
      "main": [
        [
          {
            "node": "Merge1",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "When clicking \"Execute Workflow\"": {
      "main": [
        [
          {
            "node": "Read a Google Sheets File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get the content from Google Sheets": {
      "main": [
        [
          {
            "node": "Aggregate",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "InfraNodus GraphRAG Content Enhancer": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "If Node: did we process all the data?": {
      "main": [
        [
          {
            "node": "Split In Batches",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Get the content from Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Google Sheets with Content Insights": {
      "main": [
        [
          {
            "node": "Wait to avoid API overload",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}