AutomationFlowsAI & RAG › Map Which AI Search Topics Each Domain Owns with Se Ranking and Gpt

Map Which AI Search Topics Each Domain Owns with Se Ranking and Gpt

ByEugene Melnychenko @eugene-m on n8n.io

SEO teams wanting to understand topic-level AI search dominance across competitors Content strategists building editorial plans around AI visibility gaps Marketing managers benchmarking brand presence across AI search topics

Event trigger★★★★☆ complexityAI-powered24 nodesForm Trigger@Seranking/N8N Nodes SerankingGoogle SheetsOpenAI
AI & RAG Trigger: Event Nodes: 24 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Form Trigger → Google Sheets 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
{
  "name": "Find which AI search topics each domain owns with SE Ranking and GPT",
  "tags": [],
  "nodes": [
    {
      "id": "2e6c5225-5d10-4bc1-9d4d-6aa270fff1f9",
      "name": "Domain Input Form",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        2080,
        1344
      ],
      "parameters": {
        "options": {},
        "formTitle": "AI Search Topic Analysis",
        "formFields": {
          "values": [
            {
              "fieldLabel": "Your Domain",
              "placeholder": "example.com",
              "requiredField": true
            },
            {
              "fieldLabel": "Your Brand Name",
              "placeholder": "Example",
              "requiredField": true
            },
            {
              "fieldLabel": "Competitor 1 Domain",
              "placeholder": "competitor1.com",
              "requiredField": true
            },
            {
              "fieldLabel": "Competitor 1 Brand",
              "placeholder": "Competitor One",
              "requiredField": true
            },
            {
              "fieldLabel": "Competitor 2 Domain",
              "placeholder": "competitor2.com"
            },
            {
              "fieldLabel": "Competitor 2 Brand",
              "placeholder": "Competitor Two"
            },
            {
              "fieldType": "dropdown",
              "fieldLabel": "Target Market",
              "fieldOptions": {
                "values": [
                  {
                    "option": "us"
                  },
                  {
                    "option": "uk"
                  },
                  {
                    "option": "de"
                  },
                  {
                    "option": "fr"
                  },
                  {
                    "option": "es"
                  },
                  {
                    "option": "it"
                  },
                  {
                    "option": "au"
                  },
                  {
                    "option": "ca"
                  },
                  {
                    "option": "pl"
                  }
                ]
              },
              "requiredField": true
            }
          ]
        },
        "formDescription": "Enter your domain and up to 2 competitors to see which topics each domain owns in AI search."
      },
      "typeVersion": 2.2
    },
    {
      "id": "26c4b85f-a770-4ad8-a7e3-d35ff9349c10",
      "name": "Configuration",
      "type": "n8n-nodes-base.set",
      "position": [
        2272,
        1344
      ],
      "parameters": {
        "fields": {
          "values": [
            {
              "name": "your_domain",
              "stringValue": "={{ $json['Your Domain'] }}"
            },
            {
              "name": "your_brand",
              "stringValue": "={{ $json['Your Brand Name'] }}"
            },
            {
              "name": "competitor_domain_1",
              "stringValue": "={{ $json['Competitor 1 Domain'] }}"
            },
            {
              "name": "competitor_brand_1",
              "stringValue": "={{ $json['Competitor 1 Brand'] }}"
            },
            {
              "name": "competitor_domain_2",
              "stringValue": "={{ $json['Competitor 2 Domain'] || $json['Competitor 1 Domain'] }}"
            },
            {
              "name": "competitor_brand_2",
              "stringValue": "={{ $json['Competitor 2 Brand'] || $json['Competitor 1 Brand'] }}"
            },
            {
              "name": "source",
              "stringValue": "={{ $json['Target Market'] }}"
            },
            {
              "name": "scope",
              "stringValue": "base_domain"
            },
            {
              "name": "prompts_limit",
              "stringValue": "10"
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "97547689-c739-491d-b038-c29693b11dff",
      "name": "Wait (3s)",
      "type": "n8n-nodes-base.wait",
      "position": [
        2640,
        800
      ],
      "parameters": {
        "amount": 3
      },
      "typeVersion": 1.1
    },
    {
      "id": "9a46be9b-a3f5-4b4e-aa76-124aac18b708",
      "name": "Get your target prompts",
      "type": "@seranking/n8n-nodes-seranking.seRanking",
      "position": [
        2848,
        800
      ],
      "parameters": {
        "scope": "={{ $('Configuration').item.json.scope }}",
        "domain": "={{ $('Configuration').item.json.your_domain }}",
        "engine": "ai-overview",
        "source": "={{ $('Configuration').item.json.source }}",
        "resource": "aiSearch",
        "operation": "getPromptsByTarget",
        "additionalFields": {
          "sort": "volume",
          "limit": "={{ $('Configuration').item.json.prompts_limit }}",
          "sortOrder": "desc"
        }
      },
      "credentials": {
        "seRankingApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "5054f858-ff05-421e-a9c3-340c8b276b2c",
      "name": "Wait (6s)",
      "type": "n8n-nodes-base.wait",
      "position": [
        2640,
        960
      ],
      "parameters": {
        "amount": 6
      },
      "typeVersion": 1.1
    },
    {
      "id": "92bec71b-ddaa-4639-b059-2327fd716920",
      "name": "Get your brand prompts",
      "type": "@seranking/n8n-nodes-seranking.seRanking",
      "position": [
        2848,
        960
      ],
      "parameters": {
        "engine": "ai-overview",
        "source": "={{ $('Configuration').item.json.source }}",
        "resource": "aiSearch",
        "brandName": "={{ $('Configuration').item.json.your_brand }}",
        "operation": "getPromptsByBrand",
        "additionalFields": {
          "sort": "volume",
          "limit": "={{ $('Configuration').item.json.prompts_limit }}",
          "sortOrder": "desc"
        }
      },
      "credentials": {
        "seRankingApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "652d4222-c579-47f3-bcc9-e8bbde37e062",
      "name": "Wait (9s)",
      "type": "n8n-nodes-base.wait",
      "position": [
        2656,
        1376
      ],
      "parameters": {
        "amount": 9
      },
      "typeVersion": 1.1
    },
    {
      "id": "3e3a7d8b-6aa6-4304-9e04-c4d91d370f3a",
      "name": "Get competitor 1 target prompts",
      "type": "@seranking/n8n-nodes-seranking.seRanking",
      "position": [
        2864,
        1376
      ],
      "parameters": {
        "scope": "={{ $('Configuration').item.json.scope }}",
        "domain": "={{ $('Configuration').item.json.competitor_domain_1 }}",
        "engine": "ai-overview",
        "source": "={{ $('Configuration').item.json.source }}",
        "resource": "aiSearch",
        "operation": "getPromptsByTarget",
        "additionalFields": {
          "sort": "volume",
          "limit": "={{ $('Configuration').item.json.prompts_limit }}",
          "sortOrder": "desc"
        }
      },
      "credentials": {
        "seRankingApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "ef3916dc-b83f-4f7f-8890-545f740f70c0",
      "name": "Wait (12s)",
      "type": "n8n-nodes-base.wait",
      "position": [
        2656,
        1536
      ],
      "parameters": {
        "amount": 12
      },
      "typeVersion": 1.1
    },
    {
      "id": "1983219e-736b-4383-a47f-962af5f31bdc",
      "name": "Get competitor 1 brand prompts",
      "type": "@seranking/n8n-nodes-seranking.seRanking",
      "position": [
        2864,
        1536
      ],
      "parameters": {
        "engine": "ai-overview",
        "source": "={{ $('Configuration').item.json.source }}",
        "resource": "aiSearch",
        "brandName": "={{ $('Configuration').item.json.competitor_brand_1 }}",
        "operation": "getPromptsByBrand",
        "additionalFields": {
          "sort": "volume",
          "limit": "={{ $('Configuration').item.json.prompts_limit }}",
          "sortOrder": "desc"
        }
      },
      "credentials": {
        "seRankingApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "e1f6225a-d44a-48b1-a037-0e85fe2209ce",
      "name": "Wait (15s)",
      "type": "n8n-nodes-base.wait",
      "position": [
        2656,
        1696
      ],
      "parameters": {
        "amount": 15
      },
      "typeVersion": 1.1
    },
    {
      "id": "1f127bc0-2086-416b-8ae9-8dd12786292e",
      "name": "Get competitor 2 target prompts",
      "type": "@seranking/n8n-nodes-seranking.seRanking",
      "position": [
        2864,
        1696
      ],
      "parameters": {
        "scope": "={{ $('Configuration').item.json.scope }}",
        "domain": "={{ $('Configuration').item.json.competitor_domain_2 }}",
        "engine": "ai-overview",
        "source": "={{ $('Configuration').item.json.source }}",
        "resource": "aiSearch",
        "operation": "getPromptsByTarget",
        "additionalFields": {
          "sort": "volume",
          "limit": "={{ $('Configuration').item.json.prompts_limit }}",
          "sortOrder": "desc"
        }
      },
      "credentials": {
        "seRankingApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "1038a841-7303-4305-b279-002cb242d548",
      "name": "Wait (18s)",
      "type": "n8n-nodes-base.wait",
      "position": [
        2656,
        1856
      ],
      "parameters": {
        "amount": 18
      },
      "typeVersion": 1.1
    },
    {
      "id": "978e649e-07e1-4c21-8e9d-a27db7481065",
      "name": "Get competitor 2 brand prompts",
      "type": "@seranking/n8n-nodes-seranking.seRanking",
      "position": [
        2864,
        1856
      ],
      "parameters": {
        "engine": "ai-overview",
        "source": "={{ $('Configuration').item.json.source }}",
        "resource": "aiSearch",
        "brandName": "={{ $('Configuration').item.json.competitor_brand_2 }}",
        "operation": "getPromptsByBrand",
        "additionalFields": {
          "sort": "volume",
          "limit": "={{ $('Configuration').item.json.prompts_limit }}",
          "sortOrder": "desc"
        }
      },
      "credentials": {
        "seRankingApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "8758ffe6-c613-47f7-a8f8-e433ed3d5c4a",
      "name": "Merge all prompts",
      "type": "n8n-nodes-base.merge",
      "position": [
        3136,
        1136
      ],
      "parameters": {
        "numberInputs": 6
      },
      "typeVersion": 3.2
    },
    {
      "id": "0c9dae06-cba6-4619-bd62-637dda205d7a",
      "name": "Format prompts for GPT",
      "type": "n8n-nodes-base.code",
      "position": [
        3392,
        1200
      ],
      "parameters": {
        "jsCode": "const allInputs = $input.all();\nconst config = $('Configuration').first().json;\n\nconst seoTerms = ['seo', 'keyword', 'ranking', 'backlink', 'serp', 'traffic',\n  'search engine', 'search optim', 'rank track', 'domain', 'audit', 'content',\n  'google', 'organic', 'link building', 'on-page', 'off-page', 'site speed',\n  'crawl', 'index', 'digital marketing', 'competitor', 'analytics'];\n\nconst isSeoRelated = p =>\n  seoTerms.some(t => (p || '').toLowerCase().includes(t));\n\nconst domainMap = [\n  { label: config.your_domain + ' (your domain \u2014 target)', filterSeo: false },\n  { label: config.your_domain + ' (your domain \u2014 brand)', filterSeo: false },\n  { label: config.competitor_domain_1 + ' (competitor 1 \u2014 target)', filterSeo: true },\n  { label: config.competitor_domain_1 + ' (competitor 1 \u2014 brand)', filterSeo: true },\n  { label: config.competitor_domain_2 + ' (competitor 2 \u2014 target)', filterSeo: true },\n  { label: config.competitor_domain_2 + ' (competitor 2 \u2014 brand)', filterSeo: true },\n];\n\nconst sections = allInputs.map((input, idx) => {\n  const info = domainMap[idx] || { label: 'domain ' + idx, filterSeo: true };\n  let prompts = (input.json.prompts || []).map(function(p) { return p.prompt; }).filter(Boolean);\n  if (info.filterSeo) {\n    prompts = prompts.filter(function(p) { return isSeoRelated(p); });\n  }\n  if (!prompts.length) return null;\n  return 'Domain: ' + info.label + '\\nPrompts: ' + prompts.join(', ');\n}).filter(Boolean);\n\nreturn [{\n  json: {\n    prompt_data: sections.join('\\n\\n'),\n    your_domain: config.your_domain,\n    your_brand: config.your_brand,\n    competitor_domain_1: config.competitor_domain_1,\n    competitor_brand_1: config.competitor_brand_1,\n    competitor_domain_2: config.competitor_domain_2,\n    competitor_brand_2: config.competitor_brand_2\n  }\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "3d417bef-276d-4b06-97ff-cfab220ebd55",
      "name": "Format GPT output",
      "type": "n8n-nodes-base.code",
      "position": [
        3920,
        1200
      ],
      "parameters": {
        "jsCode": "const data = $input.first().json;\nconst config = $('Configuration').first().json;\n\nlet parsed;\ntry {\n  const content =\n    data.output?.[0]?.content?.[0]?.text ||\n    data.message?.content ||\n    data.choices?.[0]?.message?.content ||\n    '';\n  const clean = content.replace(/```json|```/g, '').trim();\n  parsed = JSON.parse(clean);\n} catch(e) {\n  return [{ json: { error: 'Failed to parse GPT response', raw: JSON.stringify(data) } }];\n}\n\nconst topics = parsed.topics || [];\n\nreturn topics.map(t => ({\n  json: {\n    topic: t.topic || '',\n    winner: t.winner || '',\n    [`${config.your_domain}_prompts`]: t.your_count || 0,\n    [`${config.competitor_domain_1}_prompts`]: t.competitor_1_count || 0,\n    [`${config.competitor_domain_2}_prompts`]: t.competitor_2_count || 0,\n    insight: t.insight || '',\n    top_prompts: (t.top_prompts || []).join(', '),\n    overall_winner: parsed.overall_winner || '',\n    summary: parsed.summary || '',\n    date: new Date().toISOString().split('T')[0]\n  }\n}));"
      },
      "typeVersion": 2
    },
    {
      "id": "45b4d46f-3534-4f30-b4e9-4f86954cd37c",
      "name": "Export to Sheets: Topic Analysis",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        4112,
        1200
      ],
      "parameters": {
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": ""
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.4
    },
    {
      "id": "944b8032-66ce-42c0-a5ae-03bf8e944f76",
      "name": "GPT topic clustering",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        3600,
        1200
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-5.4-nano-2026-03-17",
          "cachedResultName": "GPT-5.4-NANO-2026-03-17"
        },
        "options": {
          "textFormat": {
            "textOptions": {}
          },
          "temperature": 0.3
        },
        "responses": {
          "values": [
            {
              "content": "={{ $json.prompt_data }}"
            },
            {
              "role": "system",
              "content": "You are an SEO competitive intelligence analyst specialising in AI search visibility.\n\nYou will receive a list of AI search prompts grouped by domain. Each prompt is a real query where that domain appeared in AI search results.\n\nYour task:\n1. Cluster all prompts across all domains into 5\u201310 meaningful topic groups (e.g. \"Keyword Research\", \"Backlink Analysis\", \"Rank Tracking\", \"Technical SEO\", \"Content SEO\")\n2. For each topic count how many prompts each domain has\n3. Identify the winner \u2014 the domain with the most prompts in that topic\n4. Write one brief actionable insight per topic\n5. In top_prompts include representative prompts from ALL domains that appear in that topic, not just the winner\n\nReturn ONLY valid JSON \u2014 no markdown, no explanation:\n{\n  \"topics\": [\n    {\n      \"topic\": \"Topic Name\",\n      \"winner\": \"winning-domain.com\",\n      \"your_count\": 0,\n      \"competitor_1_count\": 0,\n      \"competitor_2_count\": 0,\n      \"insight\": \"Brief actionable insight\",\n      \"top_prompts\": [\"prompt from your domain\", \"prompt from competitor 1\", \"prompt from competitor 2\"]\n    }\n  ],\n  \"overall_winner\": \"domain.com\",\n  \"summary\": \"One sentence overall competitive verdict\"\n}"
            }
          ]
        },
        "builtInTools": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "c57b9b78-1ee3-4780-8b7d-b3e4f5a2231d",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1664,
        32
      ],
      "parameters": {
        "color": 5,
        "width": 744,
        "height": 1240,
        "content": "# Find which AI search topics each domain owns with SE Ranking and GPT\n\n## Who is this for\n- SEO teams wanting to understand topic-level AI search dominance across competitors\n- Content strategists building editorial plans around AI visibility gaps\n- Marketing managers benchmarking brand presence across AI search topics\n\n## What this workflow does\nPulls AI search prompts for your domain and up to 2 competitors, then uses GPT to cluster them into topics and reason about which domain owns each one \u2014 turning a flat list of prompts into a strategic competitive topic map.\n\n## What you'll get\n- AI search leaderboard with share of voice across ChatGPT, Perplexity, Gemini, AI Overviews, and AI Mode\n- A topic-level competitive map showing which domain wins each topic area\n- Prompt counts per domain per topic so you can see exactly where you're ahead or behind\n- A one-line actionable insight per topic to guide your content strategy\n- An overall winner and competitive summary saved to Google Sheets\n\n## How it works\n1. Add your domain and 2 competitors in the form \u2014 pulls the AI search leaderboard across all 5 LLM engines\n2. Fetches up to 10 prompts per domain (both brand and target) for you and each competitor\n3. Filters competitor prompts to keep only SEO-relevant topics \u2014 removes noise like gaming or sports\n4. Sends all prompts to GPT with instructions to cluster them into topics and identify which domain appears most per topic\n5. GPT reasons about dominance per cluster and returns a structured competitive topic map\n6. Saves the leaderboard and topic map to separate tabs in Google Sheets\n\n## Requirements\n- SE Ranking community node installed\n- SE Ranking API token ([Get one here](https://online.seranking.com/admin.api.dashboard.html))\n- OpenAI API key\n- Google Sheets account (optional)\n\n## Setup\n1. Install the [SE Ranking community node](https://www.npmjs.com/package/@seranking/n8n-nodes-seranking)\n2. Add your SE Ranking API credentials\n3. Add your OpenAI API credentials\n4. Connect your Google Sheets account and set a spreadsheet URL in each export node\n5. Activate the workflow \u2014 n8n generates a unique form URL you can share or embed\n6. Open the form, fill in your domain and competitors, and the workflow runs automatically\n\n## Customization\n- Change `prompts_limit` in the Configuration node to fetch more or fewer prompts per domain\n- Change `source` in the Configuration node for a different regional database (us, uk, de, fr, es, etc.)\n- Edit the system prompt in the GPT node to adjust how topics are clustered or how insights are written"
      },
      "typeVersion": 1
    },
    {
      "id": "0e583986-4f10-4f2c-98eb-d57e04cdd7b2",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2544,
        1264
      ],
      "parameters": {
        "color": 7,
        "width": 512,
        "height": 816,
        "content": "## Pulls AI search prompts for your 2 competitors domain target and brand"
      },
      "typeVersion": 1
    },
    {
      "id": "67186cde-7444-432d-82e8-256b4c862b53",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1808,
        1520
      ],
      "parameters": {
        "color": 7,
        "width": 456,
        "height": 464,
        "content": "### \ud83d\udccb How to share or embed this form\n\n1. **Activate** the workflow using the toggle in the top right\n2. Open the **Domain Input Form** node and copy the **Production URL**\n3. **Share the link** directly \u2014 anyone with the URL can fill in their domain and trigger the workflow\n4. **Embed on your website** using an iframe:\n\n```html\n<iframe\n  src=\"YOUR_PRODUCTION_URL\"\n  width=\"600\"\n  height=\"500\"\n  frameborder=\"0\">\n</iframe>\n```\n\nEach form submission runs the full workflow automatically."
      },
      "typeVersion": 1
    },
    {
      "id": "22fe7875-f28c-442a-9e86-bfe2631e0276",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2544,
        704
      ],
      "parameters": {
        "color": 7,
        "width": 512,
        "height": 432,
        "content": "## Pulls AI search prompts for your domain target and brand"
      },
      "typeVersion": 1
    },
    {
      "id": "b7c0881c-971e-46aa-931c-25781d5ea94a",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3328,
        1024
      ],
      "parameters": {
        "color": 7,
        "width": 736,
        "height": 416,
        "content": "## GPT cluster prompts into topics and reason about which domain owns each one \u2014 turning a flat list of prompts into a strategic competitive topic map."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "connections": {
    "Wait (3s)": {
      "main": [
        [
          {
            "node": "Get your target prompts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait (6s)": {
      "main": [
        [
          {
            "node": "Get your brand prompts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait (9s)": {
      "main": [
        [
          {
            "node": "Get competitor 1 target prompts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait (12s)": {
      "main": [
        [
          {
            "node": "Get competitor 1 brand prompts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait (15s)": {
      "main": [
        [
          {
            "node": "Get competitor 2 target prompts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait (18s)": {
      "main": [
        [
          {
            "node": "Get competitor 2 brand prompts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Configuration": {
      "main": [
        [
          {
            "node": "Wait (3s)",
            "type": "main",
            "index": 0
          },
          {
            "node": "Wait (6s)",
            "type": "main",
            "index": 0
          },
          {
            "node": "Wait (9s)",
            "type": "main",
            "index": 0
          },
          {
            "node": "Wait (12s)",
            "type": "main",
            "index": 0
          },
          {
            "node": "Wait (15s)",
            "type": "main",
            "index": 0
          },
          {
            "node": "Wait (18s)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Domain Input Form": {
      "main": [
        [
          {
            "node": "Configuration",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format GPT output": {
      "main": [
        [
          {
            "node": "Export to Sheets: Topic Analysis",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge all prompts": {
      "main": [
        [
          {
            "node": "Format prompts for GPT",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GPT topic clustering": {
      "main": [
        [
          {
            "node": "Format GPT output",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format prompts for GPT": {
      "main": [
        [
          {
            "node": "GPT topic clustering",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get your brand prompts": {
      "main": [
        [
          {
            "node": "Merge all prompts",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Get your target prompts": {
      "main": [
        [
          {
            "node": "Merge all prompts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get competitor 1 brand prompts": {
      "main": [
        [
          {
            "node": "Merge all prompts",
            "type": "main",
            "index": 3
          }
        ]
      ]
    },
    "Get competitor 2 brand prompts": {
      "main": [
        [
          {
            "node": "Merge all prompts",
            "type": "main",
            "index": 5
          }
        ]
      ]
    },
    "Get competitor 1 target prompts": {
      "main": [
        [
          {
            "node": "Merge all prompts",
            "type": "main",
            "index": 2
          }
        ]
      ]
    },
    "Get competitor 2 target prompts": {
      "main": [
        [
          {
            "node": "Merge all prompts",
            "type": "main",
            "index": 4
          }
        ]
      ]
    }
  }
}

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

SEO teams wanting to understand topic-level AI search dominance across competitors Content strategists building editorial plans around AI visibility gaps Marketing managers benchmarking brand presence across AI search topics

Source: https://n8n.io/workflows/14380/ — 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

Note: Now includes an Apify alternative for Rapid API (Some users can't create new accounts on Rapid API, so I have added an alternative for you. But immediately you are able to get access to Rapid AP

Form Trigger, Google Sheets Trigger, OpenAI +2
AI & RAG

This system automates LinkedIn lead generation and enrichment in six clear stages: Lead Collection (via Apollo.io) Automatically pulls leads based on keywords, roles, or industries using Apollo’s API.

Form Trigger, OpenAI, Google Sheets Trigger +2
AI & RAG

This workflow automates the process of creating high-quality articles using AI, organizing them in Google Drive, and tracking their progress in Google Sheets. It's perfect for marketers, bloggers, and

Google Drive, Form Trigger, Google Sheets +1
AI & RAG

Automatically analyze your full sports performance evolution using your Strava activities, enriched with AI insights and delivered directly to your email — all powered by your own n8n instance.

Google Sheets, OpenAI, Stop And Error +3
AI & RAG

An n8n-based automation that generates client proposals from a form, lets you review everything in one place, and sends the proposal only when you approve it.

Form Trigger, Google Sheets Trigger, OpenAI +4