AutomationFlowsAI & RAG › Brand Visibility & Sentiment Analysis Across AI Search Tools (openai,…

Brand Visibility & Sentiment Analysis Across AI Search Tools (openai,…

Original n8n title: Brand Visibility & Sentiment Analysis Across AI Search Tools (openai, Perplexity, Chatgpt)

ByAOE Agent Lab @aoepeople on n8n.io

This n8n template demonstrates how to audit your brand’s visibility across multiple AI systems and automatically log the results to Google Sheets. It sends the same prompt to OpenAI, Perplexity, and (optionally) a ChatGPT web actor, then runs sentiment and brand-hierarchy…

Event trigger★★★★★ complexityAI-powered48 nodesAgentGoogle SheetsOpenAI ChatOutput Parser StructuredChain LlmHTTP RequestPerplexity
AI & RAG Trigger: Event Nodes: 48 Complexity: ★★★★★ AI nodes: yes Added:

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

This workflow follows the Agent → Chainllm 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": "eoiCUdr68Q41iEua",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "LLMO Brand Visibility Check - AI Lab (28.08) Demo Project",
  "tags": [],
  "nodes": [
    {
      "id": "6023f97b-3528-4390-8e58-1c506dedc75d",
      "name": "Manual Trigger",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -2240,
        256
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "fc60def4-55f5-4838-bae8-ef18ab63730e",
      "name": "Response Sentiment Analyse1",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -528,
        -704
      ],
      "parameters": {
        "text": "=You task is to analyse the sentiment of a text message. Your input is the result of an Perplexity AI API Call in the JSON format. \nTake this message and evaluate its content: \"{{ $json.Message }} \"\n\nYour output is a JSON with three classifications:\n1. the Basic Polarity (KEY), with values from Positive, Neutral to Negative \n2. Emotion Category (Key) with values from Joy, Sadness,Anger,Fear, Disgust, Surprise.\n3. Third, Brand Hierachy (key), you evaluate the hierachy of brands mentioned in the LLM Response.\n\nExample Output for Brand Hierarchy: Nike>Adidas>Puma",
        "options": {},
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "0baea2a7-b19a-4aa7-b121-f1455215102b",
      "name": "Sheet/Excel updaten",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        224,
        -704
      ],
      "parameters": {
        "columns": {
          "value": {
            "Response": "={{ $json.Message }}"
          },
          "schema": [
            {
              "id": "Prompt",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Prompt",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Brand Mentioning",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Brand Mentioning",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Response",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Response",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Emotion Category",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Emotion Category",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Basic Polarity",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Basic Polarity",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Quelle1",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Quelle1",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Quelle2",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Quelle2",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Quelle3",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Quelle3",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Quelle4",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Quelle4",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Quelle5",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Quelle5",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Message",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Message",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Tool",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Tool",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Anfrage",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Anfrage",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "autoMapInputData",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 568802405,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1ObN4sF1fBBXsrg6aBayZdPXETRFNlAtp5H92mEiH33o/edit#gid=568802405",
          "cachedResultName": "Output"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1ObN4sF1fBBXsrg6aBayZdPXETRFNlAtp5H92mEiH33o",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1ObN4sF1fBBXsrg6aBayZdPXETRFNlAtp5H92mEiH33o/edit?usp=drivesdk",
          "cachedResultName": "AI Lab Prompts"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "0dccf99d-c7ca-4a54-9f81-094b0cf61b15",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1152,
        -800
      ],
      "parameters": {
        "width": 464,
        "height": 416,
        "content": "## LLMO GEO Visibility Research"
      },
      "typeVersion": 1
    },
    {
      "id": "033a6e5a-4614-41b2-9055-91690ca20975",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -656,
        -800
      ],
      "parameters": {
        "width": 528,
        "height": 416,
        "content": "## Sentiment analysis und brand evaluation"
      },
      "typeVersion": 1
    },
    {
      "id": "0bf0f1c1-7faf-48a0-972a-7d38b1fa5c07",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -80,
        -800
      ],
      "parameters": {
        "width": 496,
        "height": 416,
        "content": "## Reporting"
      },
      "typeVersion": 1
    },
    {
      "id": "7529683e-cc21-4351-b603-96c1ab5196a0",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1472,
        -800
      ],
      "parameters": {
        "width": 288,
        "height": 416,
        "content": "## Data source"
      },
      "typeVersion": 1
    },
    {
      "id": "67a8ef42-42da-4729-8818-6782625e46b2",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1936,
        -864
      ],
      "parameters": {
        "color": 7,
        "width": 2672,
        "height": 656,
        "content": "## Simplified Flow"
      },
      "typeVersion": 1
    },
    {
      "id": "0ce10377-ac99-4f8e-97de-407716b12053",
      "name": "LLM-Prompts",
      "type": "n8n-nodes-base.set",
      "position": [
        -1376,
        -704
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "306f8ce3-e140-4d8b-a8b4-a57c5c131066",
              "name": "Prompt",
              "type": "string",
              "value": "Are Asics running shoes any good"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "d76ce3fd-91cd-4c1c-9a4d-579b42b08123",
      "name": "Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -528,
        -512
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini",
          "cachedResultName": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "13244b6e-40b4-494c-b5b2-2c6693e3807f",
      "name": "Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        -384,
        -512
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \n    \"Basic Polarity\": \"Negative\",\n    \"Emotion Category\": \"Anger\",\n    \"Brand Hierachy\": \"Nike>Adidas>Puma\"\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "f4455754-0af0-4ede-a0ab-eb6a77d1b6d5",
      "name": "Append row in sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        928,
        304
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [
            {
              "id": "Prompt",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Prompt",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "LLM",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "LLM",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Response",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Response",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Brand mentioned",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Brand mentioned",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Brand Hierarchy",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Brand Hierarchy",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Basic Polarity",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Basic Polarity",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Emotion Category",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Emotion Category",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Source 1",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Source 1",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Source 2",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Source 2",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Source 3",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Source 3",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "autoMapInputData",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1051572958,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1ObN4sF1fBBXsrg6aBayZdPXETRFNlAtp5H92mEiH33o/edit#gid=1051572958",
          "cachedResultName": "Output many models"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1ObN4sF1fBBXsrg6aBayZdPXETRFNlAtp5H92mEiH33o",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1ObN4sF1fBBXsrg6aBayZdPXETRFNlAtp5H92mEiH33o/edit?usp=drivesdk",
          "cachedResultName": "AI Lab Prompts"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "fb6acc43-81a2-4b6f-85d9-74715960213d",
      "name": "OpenAI Chat Model1",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        336,
        528
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "f6d1180b-8dbc-4ae2-ad7d-02e3a17dbb7f",
      "name": "Response Sentiment Analyse3",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        320,
        320
      ],
      "parameters": {
        "text": "=Take this message and evaluate its content: \"{{ $json.Response }}\"\n",
        "options": {
          "systemMessage": "You task is to analyse the sentiment of a text message. Your input is the result of an Perplexity AI API Call in JSON format. \n\n--\n\n\nYour output is a JSON with three classifications:\n1. the Basic Polarity (KEY), with values from Positive, Neutral to Negative \n2. Emotion Category (Key) with values from Joy, Sadness,Anger,Fear, Disgust, Surprise.\n3. Third, Brand Hierachy (key), you evaluate the hierachy of brands mentioned in the LLM Response.\n\nExample Output for Brand Hierarchy: Nike>Adidas>Puma"
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "c8786ef3-5147-4f02-9d71-bbee87d3a19d",
      "name": "Structured Output Parser3",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        480,
        528
      ],
      "parameters": {
        "jsonSchemaExample": "{\n    \"Basic Polarity\": \"Negative\",\n    \"Emotion Category\": \"Anger\",\n    \"Brand Hierachy\": \"Nike>Adidas>Puma\"\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "e3398784-fe71-4d86-bfcd-96ec8ae6e816",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2416,
        -208
      ],
      "parameters": {
        "color": 7,
        "width": 4000,
        "height": 1360,
        "content": "## multi-model prompting"
      },
      "typeVersion": 1
    },
    {
      "id": "89625abb-4027-42ea-83d0-b180b42bcd24",
      "name": "Sticky Note11",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1168,
        -48
      ],
      "parameters": {
        "color": 2,
        "width": 1008,
        "height": 80,
        "content": "## LLMO GEO Brand Visibility Research"
      },
      "typeVersion": 1
    },
    {
      "id": "dfdf11bb-f6f3-4af9-93dd-8ccb540ea09b",
      "name": "Sticky Note12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -112,
        48
      ],
      "parameters": {
        "width": 704,
        "height": 640,
        "content": "## Sentiment Analysis and Brandevaluation"
      },
      "typeVersion": 1
    },
    {
      "id": "8125153b-44e3-4caf-b48e-966abc5f88a3",
      "name": "Sticky Note13",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3360,
        -1280
      ],
      "parameters": {
        "color": 4,
        "width": 896,
        "height": 384,
        "content": "# Use Case Explanation\n\nUsers are continuously more and more using AI tools like ChatGPT, Perplexity etc to find what they need. Therefore, it's more and more important for brands and organization to be visible when users ask relevant questions. \n\nThe first step to optimize for visibility in these AI tools is to know where your brand stand. \n\nThis workflow helps in automating the analysis of the current visibility in tools like:\n- native open AI knowledge\n- Perplexity\n- chatGPT\n\nIt can be extended for more tools. See this workflow as a kickstart. There's much more you can do. The benefit of using a workflow for these analysis is that you can add your specific evaluations and your specific reasonings, even such as potential optimizations to increase visibility.\n\nInterested in professional AI automation - feel free to [check our services](https://www.aoe.com/de/services/automation-ai/n8n)"
      },
      "typeVersion": 1
    },
    {
      "id": "46cf70fd-a8f5-4310-b226-8f0bbca0519a",
      "name": "OpenAI Chat Model (GPT 5)",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -704,
        256
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-5",
          "cachedResultName": "gpt-5"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "7260d41f-2349-45ab-bcec-6c8d73fab4e5",
      "name": "OpenAI Anfrage",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        -704,
        112
      ],
      "parameters": {
        "text": "={{ $json.Prompt }}",
        "batching": {},
        "promptType": "define"
      },
      "typeVersion": 1.7
    },
    {
      "id": "f83b4579-7eee-437c-bdc7-34273e19925b",
      "name": "OpenAI",
      "type": "n8n-nodes-base.set",
      "position": [
        -352,
        96
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "51253e72-9fc7-45de-bdfb-52087d1e6fc2",
              "name": "Response",
              "type": "string",
              "value": "={{ $json.text }}"
            },
            {
              "id": "1f6d60ae-2599-4371-baf9-d833bf03ad98",
              "name": "LLM",
              "type": "string",
              "value": "OpenAI"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "81b6c166-e656-45e1-a630-d899fe850841",
      "name": "Sticky Note14",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1168,
        48
      ],
      "parameters": {
        "width": 1008,
        "height": 288,
        "content": "## OpenAI (API / LLM Knowledge)"
      },
      "typeVersion": 1
    },
    {
      "id": "a5778474-4314-4347-abd3-f13e095d4b39",
      "name": "Sticky Note15",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1968,
        -48
      ],
      "parameters": {
        "width": 752,
        "height": 624,
        "content": "## Input\n(Replace to your need)"
      },
      "typeVersion": 1
    },
    {
      "id": "7f4cb9f8-941f-42bd-aba5-833b15dee6d8",
      "name": "Sticky Note16",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -112,
        -48
      ],
      "parameters": {
        "color": 2,
        "width": 704,
        "height": 80,
        "content": "## Result Evaluation"
      },
      "typeVersion": 1
    },
    {
      "id": "8f53dcf4-7957-478a-9f67-bf8b8b701775",
      "name": "Sticky Note17",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        624,
        -48
      ],
      "parameters": {
        "color": 2,
        "width": 576,
        "height": 80,
        "content": "## Store Result"
      },
      "typeVersion": 1
    },
    {
      "id": "b997e680-41f9-4163-b6e3-47bb734b06b8",
      "name": "Sticky Note18",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1168,
        384
      ],
      "parameters": {
        "width": 1008,
        "height": 256,
        "content": "## Perplexity"
      },
      "typeVersion": 1
    },
    {
      "id": "44c0457c-ce38-4285-be10-13be5af2046e",
      "name": "Sticky Note19",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1168,
        672
      ],
      "parameters": {
        "width": 1008,
        "height": 272,
        "content": "## ChatGPT\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "1fc655af-c428-4bad-8df3-7dbb193d8005",
      "name": "APIfy Call ChatGPT Scraper",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueRegularOutput",
      "position": [
        -864,
        736
      ],
      "parameters": {
        "url": "https://api.apify.com/v2/acts/automation_nerd~chatgpt-prompt-actor/run-sync-get-dataset-items",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n    \"prompts\": [{{ JSON.stringify($json[\"Prompt\"]) }}],\n    \"proxyCountry\": \"DE\"\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpQueryAuth"
      },
      "credentials": {
        "httpQueryAuth": {
          "name": "<your credential>"
        }
      },
      "retryOnFail": false,
      "typeVersion": 4.2,
      "alwaysOutputData": false
    },
    {
      "id": "0c0d89a3-8c5a-4d18-82af-2c0cf3129e85",
      "name": "Sticky Note20",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1168,
        992
      ],
      "parameters": {
        "color": 3,
        "width": 464,
        "height": 256,
        "content": "Use this node with care - only for testing and to your own risk. \nIt's using an APIfy actor that tries to prompt ChatGPT through the web interface.\n\nOpen AI might restrict access and you might violate usage conditions. \nSo use at your own risk and check the APIfy documentations for more details on how to use this.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "a66095ef-09fd-4d7e-a33c-ea7ac731fc4a",
      "name": "final mapping",
      "type": "n8n-nodes-base.set",
      "position": [
        16,
        -704
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "81d3aa0e-4db1-4a08-9d17-a2e88708a262",
              "name": "source #1",
              "type": "string",
              "value": "={{ $('Map LLM Output').item.json.Citation1 }}"
            },
            {
              "id": "ec22de77-1bb3-4acd-889a-23866068014f",
              "name": "source #2",
              "type": "string",
              "value": "={{ $('Map LLM Output').item.json.Citation2 }}"
            },
            {
              "id": "d8ada9a6-8be5-4042-928b-f88364fe6c20",
              "name": "source #3",
              "type": "string",
              "value": "={{ $('Map LLM Output').item.json.Citation3 }}"
            },
            {
              "id": "30a63ecd-ab3d-4de5-9a9e-0010f40beb4d",
              "name": "source #4",
              "type": "string",
              "value": "={{ $('Map LLM Output').item.json.Citation4 }}"
            },
            {
              "id": "e87fcbbd-a77d-408b-a27d-ecec890d0cc1",
              "name": "source #5",
              "type": "string",
              "value": "={{ $('Map LLM Output').item.json.Citation5 }}"
            },
            {
              "id": "0972cb5b-a561-44a3-8872-477a54c4d64e",
              "name": "Message",
              "type": "string",
              "value": "={{ $('Map LLM Output').item.json.Message }}"
            },
            {
              "id": "ac0895c7-df51-46a4-b6bd-6a736ecd4eea",
              "name": "Emotion Category",
              "type": "string",
              "value": "={{ $json.output['Emotion Category'] }}"
            },
            {
              "id": "dd9c8884-b58d-4d01-b5c1-a1d1b9b38ac4",
              "name": "Basic Polarity",
              "type": "string",
              "value": "={{ $json.output['Basic Polarity'] }}"
            },
            {
              "id": "e47cbb34-9bfe-4a5f-8ade-80754a9e9d1a",
              "name": "Brand Hierachy",
              "type": "string",
              "value": "={{ $json.output[\"Brand Hierachy\"] }}"
            },
            {
              "id": "11e7f8c8-e965-4cbb-8d48-ec59b95eb7b6",
              "name": "Prompt",
              "type": "string",
              "value": "={{ $('LLM-Prompts').item.json.Prompt }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "ec91e5db-13ab-4c68-91d3-c15fbd391c57",
      "name": "Perplexity Request",
      "type": "n8n-nodes-base.perplexity",
      "position": [
        -656,
        464
      ],
      "parameters": {
        "model": "sonar",
        "options": {},
        "messages": {
          "message": [
            {
              "content": "={{ $json.Prompt }}"
            }
          ]
        },
        "requestOptions": {}
      },
      "credentials": {
        "perplexityApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "8912b8d9-266c-4b9f-9e4e-d12dd5c7a97d",
      "name": "Perplexity Request1",
      "type": "n8n-nodes-base.perplexity",
      "position": [
        -1072,
        -704
      ],
      "parameters": {
        "model": "sonar",
        "options": {},
        "messages": {
          "message": [
            {
              "content": "={{ $json.Prompt }}"
            }
          ]
        },
        "requestOptions": {}
      },
      "credentials": {
        "perplexityApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "410190c4-513c-4524-b8ca-1383bd00f8fe",
      "name": "Map LLM Output",
      "type": "n8n-nodes-base.set",
      "position": [
        -864,
        -704
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "81d3aa0e-4db1-4a08-9d17-a2e88708a262",
              "name": "Citation1",
              "type": "string",
              "value": "={{ $json.citations[0] }}"
            },
            {
              "id": "ec22de77-1bb3-4acd-889a-23866068014f",
              "name": "Citation2",
              "type": "string",
              "value": "={{ $json.citations[1] }}"
            },
            {
              "id": "d8ada9a6-8be5-4042-928b-f88364fe6c20",
              "name": "Citation3",
              "type": "string",
              "value": "={{ $json.citations[2] }}"
            },
            {
              "id": "30a63ecd-ab3d-4de5-9a9e-0010f40beb4d",
              "name": "Citation4",
              "type": "string",
              "value": "={{ $json.citations[3] }}"
            },
            {
              "id": "e87fcbbd-a77d-408b-a27d-ecec890d0cc1",
              "name": "Citation5",
              "type": "string",
              "value": "={{ $json.citations[4] }}"
            },
            {
              "id": "0972cb5b-a561-44a3-8872-477a54c4d64e",
              "name": "Message",
              "type": "string",
              "value": "={{ $json.choices[0].message.content }}"
            },
            {
              "id": "d06c8225-5bfe-41a8-8d56-06201c5de6c7",
              "name": "Prompt",
              "type": "string",
              "value": "={{ $('LLM-Prompts').item.json.Prompt }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "b1b67d26-323f-43d6-af99-6a751e7dc75e",
      "name": "Sticky Note21",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3328,
        -848
      ],
      "parameters": {
        "color": 4,
        "width": 896,
        "height": 384,
        "content": "# Using the simple Perplexity Flow\n\nThe simple flow calls the Perplexity API with the hardcoded Prompt in the first node. \n\nTo use it, just connect your openAI credentials and create a Google Sheet in your Google account with the proper fields to collect the result. \n\nThis simple flow acts as a demo. Use it to extend with your logic.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "a3fac816-4abc-4869-9ab1-19ffa4f5a53a",
      "name": "Sticky Note22",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3360,
        -144
      ],
      "parameters": {
        "color": 4,
        "width": 896,
        "height": 480,
        "content": "# Using the multi model flow\n\nThis flow uses a Google Sheet to get the input prompts and then executes that prompts towards three different AI tools:\n\n1) just the openAI API to check the basic knowledge.\n2) Perplexity \n3) Uses APIfy to call a chatGPT scraping actor (use at own risk)\n\n--\n## To use the flow:\n\n- Connect your google sheet and prepare two sheets: \n    - one with the input prompts (containing just one Column \"Prompt\")\n    - and one for the output w\n\n\n- Create apify credential: \"Generic Credential Type\" > \"Query Auth\". Use Name \"token\" and paste the \nt te Column \"Prompt\tLLM\tResponse\tBrand mentioned\tBrand Hierarchy\tBasic Polarity\tEmotion Category\tSource 1\tSource 2\tSource 3\tSource4\""
      },
      "typeVersion": 1
    },
    {
      "id": "84a55a32-071a-43c6-a8c8-6e50dc31c705",
      "name": "Read Prompts1",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -1936,
        240
      ],
      "parameters": {
        "range": "A1:A100",
        "options": {},
        "sheetId": "1ObN4sF1fBBXsrg6aBayZdPXETRFNlAtp5H92mEiH33o"
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "d22d72c3-9a88-4fa9-8e13-4f6c84100ae6",
      "name": "Loop Over prompts",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -1456,
        240
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "67f32fd1-5f4a-40d9-825c-a90157dae006",
      "name": "before-loop-input",
      "type": "n8n-nodes-base.noOp",
      "position": [
        -1616,
        240
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "f92edafd-a458-42f5-acfc-c2a0e9eae6af",
      "name": "manual input",
      "type": "n8n-nodes-base.set",
      "position": [
        -1904,
        448
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "05e2a95b-2e64-43c1-873d-744a9fd4b656",
              "name": "Prompt",
              "type": "string",
              "value": "Was sind die besten Laufschuhe?"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "53519447-0bb2-4975-8c91-2b3b729f837c",
      "name": "Limit for testing",
      "type": "n8n-nodes-base.limit",
      "position": [
        -1792,
        240
      ],
      "parameters": {
        "maxItems": 2
      },
      "typeVersion": 1
    },
    {
      "id": "438305e4-b1e0-4ce9-b54e-86c93ea850b7",
      "name": "Perplexity Mapper",
      "type": "n8n-nodes-base.set",
      "position": [
        -336,
        480
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "44594b4e-0665-4a34-b7af-9eb8993dca3e",
              "name": "Response",
              "type": "string",
              "value": "={{ $json.choices[0].message.content }}"
            },
            {
              "id": "1add090f-9bc2-44ba-b996-7946ffb0fc17",
              "name": "LLM",
              "type": "string",
              "value": "Perplexity"
            },
            {
              "id": "bb33a029-c428-490d-a51b-0e11556a04bf",
              "name": "Source1",
              "type": "string",
              "value": "={{ $json.citations[0]}}"
            },
            {
              "id": "71b8cc6a-f6a7-484e-ab76-8b20a15217d6",
              "name": "Source2",
              "type": "string",
              "value": "={{ $json.citations[1]}}"
            },
            {
              "id": "512b2a94-91c7-4046-be6f-ffee545a8502",
              "name": "Source3",
              "type": "string",
              "value": "={{ $json.citations[3]}}"
            },
            {
              "id": "13e874d5-bbb1-4624-809b-2631f2e915ad",
              "name": "Source4",
              "type": "string",
              "value": "={{ $json.citations[3]}}"
            },
            {
              "id": "85f0a9a3-22ac-482d-9ba6-31cf18a33af9",
              "name": "Source5",
              "type": "string",
              "value": "={{ $json.citations[4]}}"
            },
            {
              "id": "0d7bfe8c-a9de-442d-a186-1d10bdf31985",
              "name": "Source6",
              "type": "string",
              "value": "={{ $json.citations[5]}}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "4086a4bc-527c-41ad-8f46-7e9ab78f30f5",
      "name": "ChatGPT Mapper",
      "type": "n8n-nodes-base.set",
      "position": [
        -320,
        688
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "44594b4e-0665-4a34-b7af-9eb8993dca3e",
              "name": "Response",
              "type": "string",
              "value": "={{ $json.response }}"
            },
            {
              "id": "1add090f-9bc2-44ba-b996-7946ffb0fc17",
              "name": "LLM",
              "type": "string",
              "value": "ChatGPT"
            },
            {
              "id": "bb33a029-c428-490d-a51b-0e11556a04bf",
              "name": "Source1",
              "type": "string",
              "value": "={{ $json.citations[0].url}}"
            },
            {
              "id": "71b8cc6a-f6a7-484e-ab76-8b20a15217d6",
              "name": "Source2",
              "type": "string",
              "value": "={{ $json.citations[1].url}}"
            },
            {
              "id": "512b2a94-91c7-4046-be6f-ffee545a8502",
              "name": "Source3",
              "type": "string",
              "value": "={{ $json.citations[3].url}}"
            },
            {
              "id": "13e874d5-bbb1-4624-809b-2631f2e915ad",
              "name": "Source4",
              "type": "string",
              "value": "={{ $json.citations[3].url}}"
            },
            {
              "id": "85f0a9a3-22ac-482d-9ba6-31cf18a33af9",
              "name": "Source5",
              "type": "string",
              "value": "={{ $json.citations[4].url}}"
            },
            {
              "id": "0d7bfe8c-a9de-442d-a186-1d10bdf31985",
              "name": "Source6",
              "type": "string",
              "value": "={{ $json.citations[5].url}}"
            },
            {
              "id": "998de421-8d87-4f4b-a605-e7cc54dc7872",
              "name": "NewsListing1",
              "type": "string",
              "value": "={{ $json.newsListing[0].url}}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "cbe3ef1b-49c9-438f-bcdb-96476e293cd9",
      "name": "Prepare Sheet Columns",
      "type": "n8n-nodes-base.set",
      "position": [
        704,
        304
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "08e610b4-563f-4f6d-b79e-cfc40b0d2f81",
              "name": "Prompt",
              "type": "string",
              "value": "={{ $('loop-input').item.json.Prompt }}"
            },
            {
              "id": "d34deaf5-2918-4afa-911c-d0922dcd7925",
              "name": "Response",
              "type": "string",
              "value": "={{ $('normalized-tool-response').item.json.Response }}"
            },
            {
              "id": "9f4ccf36-cfe0-4920-8f72-5c683a345806",
              "name": "Brand mentioned",
              "type": "string",
              "value": "={{ $('normalized-tool-response').item.json.Response.toLowerCase().includes(\"asics\") }}"
            },
            {
              "id": "b8b67f47-747b-41f7-9e8c-e31ac5f8047f",
              "name": "Brand Hierarchy",
              "type": "string",
              "value": "={{ $json.output['Brand Hierachy'] || \"\" }}"
            },
            {
              "id": "f954ed8a-d432-4a30-bbc5-2d864901b356",
              "name": "Basic Polarity",
              "type": "string",
              "value": "={{ $json.output['Basic Polarity'] || \"\" }}"
            },
            {
              "id": "817ce1aa-f913-4933-9646-340ff66c784b",
              "name": "Emotion Category",
              "type": "string",
              "value": "={{ $json.output['Emotion Category'] || \"\"}}"
            },
            {
              "id": "25feac61-7a0d-469b-ba5f-061e75a66c99",
              "name": "Source 1",
              "type": "string",
              "value": "={{ $('normalized-tool-response').item.json.Source1?$('normalized-tool-response').item.json.Source1:\"\" }}"
            },
            {
              "id": "9d7b5abd-64ac-4032-a765-d8d995a898e4",
              "name": "Source 2",
              "type": "string",
              "value": "={{ $('normalized-tool-response').item.json.Source2?$('normalized-tool-response').item.json.Source2:\"\" }}"
            },
            {
              "id": "d1bd2690-777b-419d-9b8c-e3d746525fe0",
              "name": "Source 3",
              "type": "string",
              "value": "={{ $('normalized-tool-response').item.json.Source3?$('normalized-tool-response').item.json.Source3:\"\" }}"
            },
            {
              "id": "7b53cb12-1e02-4ce3-ad0a-6c4f930eeb6c",
              "name": "Source4",
              "type": "string",
              "value": "={{ $('normalized-tool-response').item.json.Source4?$('normalized-tool-response').item.json.Source4:\"\" }}"
            },
            {
              "id": "e3bf318d-5986-451c-9a5c-e4d46055951b",
              "name": "LLM",
              "type": "string",
              "value": "={{ $('normalized-tool-response').item.json.LLM }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "ad845eea-f2ae-48a2-ae5f-ddf050ee648a",
      "name": "normalized-tool-response",
      "type": "n8n-nodes-base.noOp",
      "position": [
        32,
        336
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "24cd700e-5ff1-4a5a-9564-0857046347d5",
      "name": "loop-input",
      "type": "n8n-nodes-base.noOp",
      "position": [
        -1296,
        320
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "67ab9566-baa4-4cc6-ba9f-598919abf806",
      "name": "If sucessfull",
      "type": "n8n-nodes-base.if",
      "position": [
        -656,
        736
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "221e7600-61b9-4f53-a904-a04bacc391f9",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.prompt }}",
              "rightValue": 0
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "f5329382-468c-4a50-ba99-c941693fcf54",
      "name": "loop-end",
      "type": "n8n-nodes-base.noOp",
      "position": [
        1136,
        704
      ],
      "parameters": {},
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "f43370b9-890c-4081-8787-39ac1033a57c",
  "connections": {
    "OpenAI": {
      "main": [
        [
          {
            "node": "normalized-tool-response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "loop-end": {
      "main": [
        [
          {
            "node": "Loop Over prompts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Response Sentiment Analyse1",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "loop-input": {
      "main": [
        [
          {
            "node": "OpenAI Anfrage",
            "type": "main",
            "index": 0
          },
          {
            "node": "Perplexity Request",
            "type": "main",
            "index": 0
          },
          {
            "node": "APIfy Call ChatGPT Scraper",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "LLM-Prompts": {
      "main": [
        [
          {
            "node": "Perplexity Request1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "manual input": {
      "main": [
        [
          {
            "node": "before-loop-input",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If sucessfull": {
      "main": [
        [
          {
            "node": "ChatGPT Mapper",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "loop-end",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "Response Sentiment Analyse1",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Read Prompts1": {
      "main": [
        [
          {
            "node": "Limit for testing",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "final mapping": {
      "main": [
        [
          {
            "node": "Sheet/Excel updaten",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ChatGPT Mapper": {
      "main": [
        [
          {
            "node": "normalized-tool-response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Manual Trigger": {
      "main": [
        [
          {
            "node": "Read Prompts1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Map LLM Output": {
      "main": [
        [
          {
            "node": "Response Sentiment Analyse1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Anfrage": {
      "main": [
        [
          {
            "node": "OpenAI",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Limit for testing": {
      "main": [
        [
          {
            "node": "before-loop-input",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over prompts": {
      "main": [
        [],
        [
          {
            "node": "loop-input",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Perplexity Mapper": {
      "main": [
        [
          {
            "node": "normalized-tool-response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "before-loop-input": {
      "main": [
        [
          {
            "node": "Loop Over prompts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "Response Sentiment Analyse3",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Perplexity Request": {
      "main": [
        [
          {
            "node": "Perplexity Mapper",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Append row in sheet": {
      "main": [
        [
          {
            "node": "loop-end",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Perplexity Request1": {
      "main": [
        [
          {
            "node": "Map LLM Output",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Sheet Columns": {
      "main": [
        [
          {
            "node": "Append row in sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "normalized-tool-response": {
      "main": [
        [
          {
            "node": "Response Sentiment Analyse3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model (GPT 5)": {
      "ai_languageModel": [
        [
          {
            "node": "OpenAI Anfrage",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser3": {
      "ai_outputParser": [
        [
          {
            "node": "Response Sentiment Analyse3",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "APIfy Call ChatGPT Scraper": {
      "main": [
        [
          {
            "node": "If sucessfull",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Response Sentiment Analyse1": {
      "main": [
        [
          {
            "node": "final mapping",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Response Sentiment Analyse3": {
      "main": [
        [
          {
            "node": "Prepare Sheet Columns",
            "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

This n8n template demonstrates how to audit your brand’s visibility across multiple AI systems and automatically log the results to Google Sheets. It sends the same prompt to OpenAI, Perplexity, and (optionally) a ChatGPT web actor, then runs sentiment and brand-hierarchy…

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

Transform a single quote into a fully-rendered cinematic short video — with voice-over, visuals, and music — then publish it directly to TikTok, Instagram Reels, and YouTube Shorts. This isn’t just au

Agent, HTTP Request, Jwt +7
AI & RAG

AI Blog Publisher – Automated Blog Content Workflow This workflow is designed for individuals and teams who regularly publish content on their blog and want to automate the entire process from start t

WordPress, HTTP Request, Memory Buffer Window +9
AI & RAG

The workflow runs every hour with a randomized delay of 5–20 minutes to help distribute load. It records the exact date and time a lead is emailed so you can track outreach. Follow-ups are automatical

Google Sheets, Agent, OpenAI Chat +5
AI & RAG

Turn a simple idea into a complete blog article with images, ready to publish — fully automated.

Agent, OpenAI Chat, HTTP Request +5
AI & RAG

This template is built for founders, SDR teams, and agencies who prospect on LinkedIn and want the entire cold-outreach pipeline automated. It turns a simple LinkedIn profile URL into a verified email

Chain Llm, Output Parser Structured, OpenAI Chat +3