{
  "id": "VbwgyOwe5ImcwQXu",
  "name": "Finding Customer Friction & Conversion Leaks with Bright Data & n8n",
  "tags": [],
  "nodes": [
    {
      "id": "78e45031-ebab-4b2d-a094-d841ddb58fb7",
      "name": "Run Friction Analysis",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -4432,
        1376
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "a061d9e9-f6bc-4510-b073-764140c5e1bb",
      "name": "Set Product URL",
      "type": "n8n-nodes-base.set",
      "position": [
        -4208,
        1376
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "4539b934-3e9f-4692-a398-0b1388476813",
              "name": "url",
              "type": "string",
              "value": "https://www.amazon.com/Amazon-Basics-Micro-Foam-Nitrile-Coated/dp/B08DDZ1BDV/ref=sr_1_1?adgrpid=87137420328&dib=eyJ2IjoiMSJ9.TSfdhc3EZnn9H2llyVoZXzn6Mt0g1fqCSJpTXab0SD8x6YU9WZ2p72KbpJyDfwxxh5BNCBzULjb_5y7zhoLRB_iVL8czclcKAA_7_xmKkXZ9gYpoNd2lwRSz0oagsf-VvAbQC1hlVJkMdhO9MmnLoKYXpB5A-OEOcAy7cWej-XGIQJaBZR49M28Z1zntbeitNxrDMQ4YGQ5rOKAS1XzrFBuX1C4SRQzU1ePB2ypceERh4jNmti_ZVbQaOv-EyHkYpJS2PgXMjhAfkiXEB9ZC_9qIi5J4YqlgRmMrZKVGvBg.ZMnwoBOKQaX36cEuy0iI6R6v_WszSLdW_zsQjRePkqg&dib_tag=se&hvadid=585479824073&hvdev=c&hvlocphy=9075163&hvnetw=g&hvqmt=b&hvrand=1405474185371293561&hvtargid=kwd-2971+1234567890&hydadcr=29108_14573980&keywords=gloves+amazon&mcid=b731b334a709335cb77408996e3e4244&qid=1771246359&sr=8-1"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "f7c6ee46-231c-4add-b43a-7d7fbd12d1f5",
      "name": "Start Review Scraping (Bright Data)",
      "type": "@brightdata/n8n-nodes-brightdata.brightData",
      "onError": "continueErrorOutput",
      "position": [
        -3600,
        1376
      ],
      "parameters": {
        "urls": "=[{\"url\":\"{{ $json.url }}\"}]",
        "resource": "webScrapper",
        "operation": "triggerCollectionByUrl",
        "dataset_id": {
          "__rl": true,
          "mode": "list",
          "value": "gd_le8e811kzy4ggddlq",
          "cachedResultName": "Amazon Reviews"
        },
        "requestOptions": {}
      },
      "retryOnFail": false,
      "typeVersion": 1
    },
    {
      "id": "fb1ce830-ceac-48f4-9870-8cb702c02bac",
      "name": "Wait Before Status Check",
      "type": "n8n-nodes-base.wait",
      "position": [
        -3248,
        1360
      ],
      "parameters": {
        "amount": 30
      },
      "typeVersion": 1.1
    },
    {
      "id": "dfba77a2-e913-4e80-9290-d1489bf42560",
      "name": "Check Scraping Status",
      "type": "@brightdata/n8n-nodes-brightdata.brightData",
      "position": [
        -3024,
        1360
      ],
      "parameters": {
        "resource": "webScrapper",
        "operation": "monitorProgressSnapshot",
        "snapshot_id": "={{ $json.snapshot_id }}",
        "requestOptions": {}
      },
      "typeVersion": 1
    },
    {
      "id": "ef1d50cf-04b8-4ea7-b3e5-4fe5147385bb",
      "name": "Is Snapshot Ready?",
      "type": "n8n-nodes-base.if",
      "position": [
        -2800,
        1360
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "53b0d323-2400-4f38-a810-dd8b2a66dacf",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.status }}",
              "rightValue": "ready"
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "7a7f7c2d-81f3-4dec-9145-5fc6b72784a1",
      "name": "Download Review Data",
      "type": "@brightdata/n8n-nodes-brightdata.brightData",
      "position": [
        -2240,
        1344
      ],
      "parameters": {
        "resource": "webScrapper",
        "operation": "downloadSnapshot",
        "snapshot_id": "={{ $json.snapshot_id }}",
        "requestOptions": {}
      },
      "typeVersion": 1
    },
    {
      "id": "28f4955b-81b1-4a60-bbe4-f9a904531641",
      "name": "Detect Friction Signals",
      "type": "n8n-nodes-base.code",
      "position": [
        -2016,
        1344
      ],
      "parameters": {
        "jsCode": "return items.map(item => {\n\n  let signals = [];\n  const review = (item.json.review_text || \"\").toLowerCase();\n\n  // Delivery Issues\n  if (\n    review.includes(\"late delivery\") ||\n    review.includes(\"arrived late\") ||\n    review.includes(\"shipping delay\") ||\n    review.includes(\"took too long\")\n  ) {\n    signals.push(\"delivery_delay\");\n  }\n\n  // Returns / Refund Issues\n  if (\n    review.includes(\"refund\") ||\n    review.includes(\"return\") ||\n    review.includes(\"money back\") ||\n    review.includes(\"refund denied\")\n  ) {\n    signals.push(\"returns_friction\");\n  }\n\n  // Quality / Durability Issues\n  if (\n    review.includes(\"fell apart\") ||\n    review.includes(\"doesn't last\") ||\n    review.includes(\"broke\") ||\n    review.includes(\"torn\") ||\n    review.includes(\"poor quality\")\n  ) {\n    signals.push(\"product_durability_issue\");\n  }\n\n  // Sizing Issues\n  if (\n    review.includes(\"run small\") ||\n    review.includes(\"too tight\") ||\n    review.includes(\"too loose\") ||\n    review.includes(\"size up\")\n  ) {\n    signals.push(\"sizing_issue\");\n  }\n\n  // Support Issues\n  if (\n    review.includes(\"no response\") ||\n    review.includes(\"customer service\") ||\n    review.includes(\"support didn't\")\n  ) {\n    signals.push(\"support_issue\");\n  }\n\n  return {\n    json: {\n      ...item.json,\n      frictionSignals: signals\n    }\n  };\n\n});\n"
      },
      "typeVersion": 2
    },
    {
      "id": "ee60903e-c78a-4dda-b32c-a2324adb8bd8",
      "name": "Any Friction Detected?",
      "type": "n8n-nodes-base.if",
      "position": [
        -1808,
        1344
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "020b1422-1d58-44f2-baad-d575310ac940",
              "operator": {
                "type": "array",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.frictionSignals }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "583e15c6-64bc-4412-a5f1-523e358099fc",
      "name": "Prepare Review for AI Analysis",
      "type": "n8n-nodes-base.set",
      "position": [
        -1168,
        1328
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "5300ca2a-5c4d-49b8-90f8-9fc4be2d4534",
              "name": "brand",
              "type": "string",
              "value": "={{$json.brand}}"
            },
            {
              "id": "2714bb1c-88e2-452d-af87-73400107bb5b",
              "name": "productName",
              "type": "string",
              "value": "={{ $json.product_name }}"
            },
            {
              "id": "0d610520-afcc-4c50-9e76-87828c662c99",
              "name": "asin",
              "type": "string",
              "value": "={{ $json.asin }}"
            },
            {
              "id": "930bd5fb-86cf-4a87-95f7-2d6877900af2",
              "name": "frictionSignals",
              "type": "array",
              "value": "={{ $json.frictionSignals }}"
            },
            {
              "id": "240c0a8f-36ff-4c53-8739-c494c67f4ca4",
              "name": "frictionType",
              "type": "string",
              "value": "={{$json.frictionSignals[0]}}\n"
            },
            {
              "id": "5af85e38-a897-4784-805e-c1ad2846610c",
              "name": "reviewText",
              "type": "string",
              "value": "={{$json.review_text}}"
            },
            {
              "id": "71447117-856e-44be-89dc-8b609f8dbd4a",
              "name": "reviewRating",
              "type": "number",
              "value": "={{ $json.rating }}"
            },
            {
              "id": "ca714089-aa7f-42c8-8929-6aea1606b1ef",
              "name": "review_header",
              "type": "string",
              "value": "={{ $json.review_header }}"
            },
            {
              "id": "c532cd60-cb84-4d60-a892-d4fb907c000c",
              "name": "revenueImpactScore",
              "type": "number",
              "value": 0
            },
            {
              "id": "b715444c-1df9-49b1-bb85-95a2d986d7e0",
              "name": "confidenceScore",
              "type": "number",
              "value": 0
            },
            {
              "id": "87d83964-433f-48a0-a483-e696cf52abe2",
              "name": "review_country",
              "type": "string",
              "value": "={{ $json.review_country }}"
            },
            {
              "id": "033ed87a-c755-4972-876c-26b597d44e5e",
              "name": "review_posted_date",
              "type": "string",
              "value": "={{ $json.review_posted_date }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "c99ba0f1-d9ad-4e3d-8db0-089be31de580",
      "name": "AI Friction Impact Analyzer",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -944,
        1328
      ],
      "parameters": {
        "text": "=Analyze the following ecommerce friction data:\n\nBrand: {{$json.brand}}\nProduct: {{$json.productName}}\nASIN: {{$json.asin}}\nFriction Signals: {{$json.frictionSignals}}\nReview Rating: {{$json.reviewRating}}\nReview Header: {{$json.review_header}}\nReview Text: {{$json.reviewText}}\n\n\nClassify:\n\n1. Friction category (Checkout / Delivery / Returns / Support / Product)\n2. Estimated revenue impact (Low / Medium / High)\n3. Numerical impact score (0-100)\n4. Confidence score (0-100)\n5. Short reasoning\n\nRespond strictly in this JSON format:\n\n{\n  \"brand\": \"\",\n  \"productName\": \"\",\n  \"asin\": \"\",\n  \"reviewHeader\": \"\",\n  \"reviewText\": \"\",\n  \"reviewRating\": 0,\n  \"frictionSignals\": [],\n  \"frictionCategory\": \"\",\n  \"estimatedImpact\": \"\",\n  \"impactScore\": 0,\n  \"confidenceScore\": 0,\n  \"reasoning\": \"\"\n}\n",
        "options": {
          "systemMessage": "You are an ecommerce conversion intelligence engine.\n\nYou analyze product friction signals extracted from customer reviews.\n\nAlways respond strictly in valid JSON.\nNo explanations outside JSON.\n"
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 3.1
    },
    {
      "id": "c140c590-19a8-4f6b-ae14-085e6156a03d",
      "name": "Validate AI Friction Output",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        -784,
        1600
      ],
      "parameters": {
        "schemaType": "manual",
        "inputSchema": "{\n  \"type\": \"object\",\n  \"properties\": {\n    \"brand\": {\n      \"type\": \"string\"\n    },\n    \"productName\": {\n      \"type\": \"string\"\n    },\n    \"asin\": {\n      \"type\": \"string\"\n    },\n    \"reviewHeader\": {\n      \"type\": \"string\"\n    },\n    \"reviewText\": {\n      \"type\": \"string\"\n    },\n    \"reviewRating\": {\n      \"type\": \"number\"\n    },\n    \"frictionSignals\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"frictionCategory\": {\n      \"type\": \"string\",\n      \"enum\": [\"Checkout\", \"Delivery\", \"Returns\", \"Support\", \"Product\"]\n    },\n    \"estimatedImpact\": {\n      \"type\": \"string\",\n      \"enum\": [\"Low\", \"Medium\", \"High\"]\n    },\n    \"impactScore\": {\n      \"type\": \"number\",\n      \"minimum\": 0,\n      \"maximum\": 100\n    },\n    \"confidenceScore\": {\n      \"type\": \"number\",\n      \"minimum\": 0,\n      \"maximum\": 100\n    },\n    \"reasoning\": {\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"brand\",\n    \"productName\",\n    \"asin\",\n    \"reviewHeader\",\n    \"reviewText\",\n    \"reviewRating\",\n    \"frictionSignals\",\n    \"frictionCategory\",\n    \"estimatedImpact\",\n    \"impactScore\",\n    \"confidenceScore\",\n    \"reasoning\"\n  ]\n}\n"
      },
      "typeVersion": 1.3
    },
    {
      "id": "e36ed31e-190b-4188-a0f0-e14067cf4d23",
      "name": "Calculate Correlated Friction Score",
      "type": "n8n-nodes-base.code",
      "position": [
        -576,
        1328
      ],
      "parameters": {
        "jsCode": "return items.map(item => {\n\n  const data = item.json.output;\n\n  let frictionWeight = 0;\n\n  if (data.frictionSignals?.includes(\"checkout_failure\")) frictionWeight += 40;\n  if (data.frictionSignals?.includes(\"delivery_delay\")) frictionWeight += 25;\n  if (data.frictionSignals?.includes(\"returns_friction\")) frictionWeight += 20;\n  if (data.frictionSignals?.includes(\"support_issue\")) frictionWeight += 15;\n  if (data.frictionSignals?.includes(\"sizing_issue\")) frictionWeight += 20;\n  if (data.frictionSignals?.includes(\"product_durability_issue\")) frictionWeight += 30;\n\n  const impactComponent = (data.impactScore || 0) * 0.7;\n\n  const finalScore = Math.round(frictionWeight + impactComponent);\n\n  return {\n    json: {\n      ...data,\n      correlatedScore: finalScore\n    }\n  };\n\n});\n"
      },
      "typeVersion": 2
    },
    {
      "id": "80332a79-1d65-4605-8edb-c5d66af75c19",
      "name": "Is High-Risk Revenue Friction?",
      "type": "n8n-nodes-base.if",
      "position": [
        -80,
        1328
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "62f3951b-dc89-453f-b1dc-03414a3ff7e6",
              "operator": {
                "type": "number",
                "operation": "gt"
              },
              "leftValue": "={{ $json.correlatedScore }}",
              "rightValue": 60
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "1210bb63-14e7-410f-a61d-fd33885e006f",
      "name": "Tag as High Priority",
      "type": "n8n-nodes-base.set",
      "position": [
        208,
        1168
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "010a0892-4d17-4ddc-9542-0fff0350ac5e",
              "name": "Priority",
              "type": "string",
              "value": "High"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "7e4bd3ef-1fb3-4589-a046-acb2d7ee56ec",
      "name": "Tag as Moderate / Low Priority",
      "type": "n8n-nodes-base.set",
      "position": [
        -16,
        1616
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "5a119cdc-8e45-47e8-bb0a-e48126699f43",
              "name": "Priority",
              "type": "string",
              "value": "Moderate/Low"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "8a26b86a-9c07-4a3d-8c62-5f5294f4eaac",
      "name": "Log Checkout Optimization Opportunity",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        432,
        1168
      ],
      "parameters": {
        "columns": {
          "value": {
            "ASIN": "={{ $json.asin }}",
            "Brand": "={{ $json.brand }}",
            "Priority": "={{ $json['Priority'] }}",
            "Timestamp": "={{ $now }}",
            "Impact Score": "={{ $json.impactScore }}",
            "Friction Type": "={{ $json.frictionSignals[0] }}",
            "Review Header": "={{ $json.reviewHeader }}",
            "Review Rating": "={{ $json.reviewRating }}",
            "Revenue Impact": "={{ $json.estimatedImpact }}",
            "Confidence Score": "={{ $json.confidenceScore }}"
          },
          "schema": [
            {
              "id": "Brand",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Brand",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Friction Type",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Friction Type",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Revenue Impact",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Revenue Impact",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Priority",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Priority",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Impact Score",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Impact Score",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Confidence Score",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Confidence Score",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "ASIN",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "ASIN",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Review Header",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Review Header",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Review Rating",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Review Rating",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Timestamp",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Timestamp",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1i10QicCLs7MCiGcEVui1lCGB9kffPsPlJ6iWtPGS_t0/edit#gid=0",
          "cachedResultName": "Checkout Optimisation List"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1i10QicCLs7MCiGcEVui1lCGB9kffPsPlJ6iWtPGS_t0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1i10QicCLs7MCiGcEVui1lCGB9kffPsPlJ6iWtPGS_t0/edit?usp=drivesdk",
          "cachedResultName": "3. Bright Data Customer Friction & Conversion\u2011Loss Intelligence Engine"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "136d7a80-420d-411b-a5cc-f9d284916250",
      "name": "Prepare Delivery & Returns Risk Flags",
      "type": "n8n-nodes-base.set",
      "position": [
        208,
        1440
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "9759c7b1-c129-4db9-b4c0-f13eb7a4b0cc",
              "name": "deliveryRisk",
              "type": "boolean",
              "value": "={{$json.frictionSignals.includes('delivery_delay')}}"
            },
            {
              "id": "3e681bfc-4454-44f2-9076-b191e4db53f4",
              "name": "returnsRisk",
              "type": "boolean",
              "value": "={{$json.frictionSignals.includes('returns_friction')}}"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "880be350-60ef-4fe9-81d4-98b0c3452bb1",
      "name": "Log Delivery & Returns Risk",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        448,
        1440
      ],
      "parameters": {
        "columns": {
          "value": {
            "asin": "={{ $json.asin }}",
            "brand": "={{ $json.brand }}",
            "reasoning": "={{ $json.reasoning }}",
            "reviewText": "={{ $json.reviewText }}",
            "impactScore": "={{ $json.impactScore }}",
            "productName": "={{ $json.productName }}",
            "returnsRisk": "={{ $json.returnsRisk }}",
            "deliveryRisk": "={{ $json.deliveryRisk }}",
            "reviewHeader": "={{ $json.reviewHeader }}",
            "reviewRating": "={{ $json.reviewRating }}",
            "confidenceScore": "={{ $json.confidenceScore }}",
            "correlatedScore": "={{ $json.correlatedScore }}",
            "estimatedImpact": "={{ $json.estimatedImpact }}",
            "frictionSignals": "={{ $json.frictionSignals[0] }}",
            "frictionCategory": "={{ $json.frictionCategory }}"
          },
          "schema": [
            {
              "id": "brand",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "brand",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "productName",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "productName",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "asin",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "asin",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "reviewHeader",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "reviewHeader",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "reviewText",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "reviewText",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "reviewRating",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "reviewRating",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "frictionSignals",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "frictionSignals",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "frictionCategory",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "frictionCategory",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "estimatedImpact",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "estimatedImpact",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "impactScore",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "impactScore",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "confidenceScore",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "confidenceScore",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "reasoning",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "reasoning",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "correlatedScore",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "correlatedScore",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "deliveryRisk",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "deliveryRisk",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "returnsRisk",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "returnsRisk",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 678578591,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1i10QicCLs7MCiGcEVui1lCGB9kffPsPlJ6iWtPGS_t0/edit#gid=678578591",
          "cachedResultName": "Delivery & Returns Risk Report"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1i10QicCLs7MCiGcEVui1lCGB9kffPsPlJ6iWtPGS_t0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1i10QicCLs7MCiGcEVui1lCGB9kffPsPlJ6iWtPGS_t0/edit?usp=drivesdk",
          "cachedResultName": "3. Bright Data Customer Friction & Conversion\u2011Loss Intelligence Engine"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "6e147816-bb0f-411e-8042-d71ace1ce40b",
      "name": "Format Bright Data Error",
      "type": "n8n-nodes-base.set",
      "position": [
        -3536,
        1616
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "548fe42c-b3b5-450d-a317-0a719eb9f941",
              "name": "errorSource",
              "type": "string",
              "value": "Bright Data Scraper"
            },
            {
              "id": "ef6c08bd-4e69-4a27-b116-658e76a1783f",
              "name": "errorMessage",
              "type": "string",
              "value": "={{$json.error?.message || $json.message || 'Unknown Bright Data Error'}}"
            },
            {
              "id": "3c3cea2d-4925-47d6-8083-977a559f575b",
              "name": "errorCode",
              "type": "string",
              "value": "={{$json.statusCode || $json.code || 'N/A'}}"
            },
            {
              "id": "614a2d0a-ecbc-43ac-889b-ea884a01489a",
              "name": "timestamp",
              "type": "string",
              "value": "={{new Date().toISOString()}}"
            },
            {
              "id": "7f2dc396-ddcd-4af7-8a38-9604a482b1b1",
              "name": "hasError",
              "type": "boolean",
              "value": true
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "c9c761cd-4fe6-4e0b-a974-f9b0669ddcc5",
      "name": "Log Scraping Error",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -3328,
        1616
      ],
      "parameters": {
        "columns": {
          "value": {
            "hasError": "={{ $json.hasError }}",
            "errorCode": "={{ $json.errorCode }}",
            "timestamp": "={{ $json.timestamp }}",
            "errorSource": "={{ $json.errorSource }}",
            "errorMessage": "={{ $json.errorMessage }}"
          },
          "schema": [
            {
              "id": "errorSource",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "errorSource",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "errorMessage",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "errorMessage",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "errorCode",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "errorCode",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "timestamp",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "timestamp",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "hasError",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "hasError",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 946155652,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1MkajrqjeeoOQqurtNmWnlUBQcUcDECoB7H5ZyUY6DtM/edit#gid=946155652",
          "cachedResultName": "log bright data error"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1i10QicCLs7MCiGcEVui1lCGB9kffPsPlJ6iWtPGS_t0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1i10QicCLs7MCiGcEVui1lCGB9kffPsPlJ6iWtPGS_t0/edit?usp=drivesdk",
          "cachedResultName": "3. Bright Data Customer Friction & Conversion\u2011Loss Intelligence Engine"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "86db919b-3a9e-4286-aecb-ea99da273c35",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -5136,
        624
      ],
      "parameters": {
        "color": 4,
        "width": 512,
        "height": 576,
        "content": "## Customer Friction & Conversion-Loss Intelligence Engine\n\nThis workflow extracts Amazon reviews and identifies hidden revenue friction.\n\nIt:\n\n- Scrapes and monitors review data\n- Detects delivery, returns, product & support issues\n- Uses AI to estimate revenue impact\n- Scores and prioritizes friction severity\n- Logs high-risk conversion leaks automatically\n\nOutput Delivers:\n- Optimization Opportunity\n- Delivery & Returns Risk\n\nWhat you need:\n- Bright Data account (for web scraping)\n- OpenRouter API key (for AI analysis)\n- Google Sheets (for output dashboards)\n\nThe result: structured friction intelligence that turns customer complaints into measurable revenue opportunities.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "48c90aeb-d535-4f0b-bf4f-5efe70184acf",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3680,
        1056
      ],
      "parameters": {
        "color": 7,
        "width": 1072,
        "height": 768,
        "content": "## Review Scraping Flow\n\nInitiates and manages the collection of customer review data from Amazon using Bright Data to enable friction and conversion analysis.\n\n- Starts automated review scraping process  \n- Monitors snapshot generation progress  \n- Waits until review dataset is fully ready  \n- Downloads structured review content  \n- Handles and logs scraping failures  \n\nProvides reliable and structured review input for downstream friction signal detection and impact analysis."
      },
      "typeVersion": 1
    },
    {
      "id": "8cd5f1a9-aab0-4883-bc22-09776bea562a",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2304,
        1008
      ],
      "parameters": {
        "color": 7,
        "width": 752,
        "height": 768,
        "content": "## Friction Signal Detection\n\nAnalyzes downloaded customer reviews to identify potential friction points impacting user experience and conversion.\n\n- Processes structured review data  \n- Detects delivery and fulfillment issues  \n- Identifies returns and refund-related concerns  \n- Flags product durability or quality complaints  \n- Filters reviews with no critical friction signals  \n\nPrepares validated friction signals for downstream AI impact analysis."
      },
      "typeVersion": 1
    },
    {
      "id": "58ca37d7-fc3e-45c6-9434-6201b3d145d2",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1232,
        992
      ],
      "parameters": {
        "color": 7,
        "width": 816,
        "height": 816,
        "content": "## AI Friction Impact Analysis\n\nProcesses validated friction signals using AI to estimate their impact on customer experience and conversions.\n\n- Prepares review data for AI analysis  \n- Classifies type of customer friction  \n- Estimates revenue impact level  \n- Assigns numerical impact score  \n- Validates structured AI output  \n\nEnables prioritization of conversion-impacting customer experience issues."
      },
      "typeVersion": 1
    },
    {
      "id": "7757d68f-e273-460e-b5d9-ec11b9bc3011",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -144,
        816
      ],
      "parameters": {
        "color": 7,
        "width": 784,
        "height": 1008,
        "content": "## Friction Prioritization & Opportunity Logging\n\nFilters high-risk friction signals and routes them into structured reporting dashboards.\n\n- Flags high-risk revenue-impacting friction  \n- Tags moderate or low-priority issues  \n- Prepares checkout optimization opportunities  \n- Logs delivery and returns-related risks  \n- Stores prioritized friction insights for reporting  \n\nSupports targeted conversion optimization and operational improvements."
      },
      "typeVersion": 1
    },
    {
      "id": "36a23fbf-d956-47c9-a5fc-d37991621fc3",
      "name": "Friction Impact Analyzer",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "position": [
        -960,
        1600
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "4cd0fb94-0ead-47aa-abb9-99489833212d",
      "name": "No Friction Detected",
      "type": "n8n-nodes-base.set",
      "position": [
        -1744,
        1584
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "31f389dc-a1f2-45f9-81b7-b37811d5c313",
              "name": "frictionSignals",
              "type": "string",
              "value": "There is no issue for the customer in review"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "04baa210-e459-4d50-944b-83ba8a766fac",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -5136,
        1232
      ],
      "parameters": {
        "color": 4,
        "width": 512,
        "height": 480,
        "content": "## Setup Instructions\n\nBefore running this workflow, configure the following credentials in n8n:\n\n**1. Bright Data API** \u2014 Required for web scraping\n- Sign up at brightdata.com\n- Create an API token\n- Add as \"BrightData account\" credential in n8n\n\n**2. OpenRouter API** \u2014 Required for AI classification\n- Sign up at openrouter.ai\n- Generate an API key\n- Add as \"OpenRouter account\" credential in n8n\n\n**3. Google Sheets OAuth** \u2014 Required for output logging\n- Connect your Google account in n8n\n- See the **Google Sheets Setup** sticky note for required tabs and columns\n- Update each Google Sheets node to point to your new spreadsheet\n\nAfter connecting credentials, edit the configuration node to set your target companies, URLs, or parameters."
      },
      "typeVersion": 1
    },
    {
      "id": "9018eebe-cf35-414e-a353-7aee195ed37c",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -4512,
        1056
      ],
      "parameters": {
        "color": 7,
        "width": 464,
        "height": 560,
        "content": "## Input & Configuration\n\nInitial configuration block where the target product URL is defined for friction analysis.\n\n- Sets the Amazon product page URL  \n- Initiates workflow execution manually  \n- Provides configurable entry point for review analysis  \n\nAllows flexible targeting of product-level customer friction signals."
      },
      "typeVersion": 1
    },
    {
      "id": "c96bf200-f6d3-490b-83e6-583389f5b6fb",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -5136,
        1744
      ],
      "parameters": {
        "color": 4,
        "width": 512,
        "height": 440,
        "content": "## Google Sheets Setup\n\nCreate a Google Spreadsheet with 3 tabs and add these column headers in row 1:\n\n**Tab: Checkout Optimisation List**\nBrand | Friction Type | Revenue Impact | Priority| Impact Score | Confidence Score | ASIN | Review Header | Review Rating | Timestamp\n\n**Tab: Delivery & Returns Risk Report**\nbrand | productName | asin | reviewHeader | reviewText | reviewRating | frictionSignals | frictionCategory | estimatedImpact | impactScore | confidenceScore | reasoning | correlatedScore | deliveryRisk | returnsRisk\n\n**Tab: log bright data error**\nerrorSource | errorMessage | errorCode | timestamp | hasError\n\nAfter creating the spreadsheet, update each Google Sheets node to point to your document and select the matching tab."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "availableInMCP": false,
    "executionOrder": "v1"
  },
  "versionId": "6da612ec-bcc3-47e2-b04c-d8cbe9f4c7eb",
  "connections": {
    "Set Product URL": {
      "main": [
        [
          {
            "node": "Start Review Scraping (Bright Data)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Is Snapshot Ready?": {
      "main": [
        [
          {
            "node": "Download Review Data",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait Before Status Check",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download Review Data": {
      "main": [
        [
          {
            "node": "Detect Friction Signals",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Tag as High Priority": {
      "main": [
        [
          {
            "node": "Log Checkout Optimization Opportunity",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Scraping Status": {
      "main": [
        [
          {
            "node": "Is Snapshot Ready?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Run Friction Analysis": {
      "main": [
        [
          {
            "node": "Set Product URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Any Friction Detected?": {
      "main": [
        [
          {
            "node": "Prepare Review for AI Analysis",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "No Friction Detected",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Detect Friction Signals": {
      "main": [
        [
          {
            "node": "Any Friction Detected?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format Bright Data Error": {
      "main": [
        [
          {
            "node": "Log Scraping Error",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Friction Impact Analyzer": {
      "ai_languageModel": [
        [
          {
            "node": "AI Friction Impact Analyzer",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Wait Before Status Check": {
      "main": [
        [
          {
            "node": "Check Scraping Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Friction Impact Analyzer": {
      "main": [
        [
          {
            "node": "Calculate Correlated Friction Score",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Validate AI Friction Output": {
      "ai_outputParser": [
        [
          {
            "node": "AI Friction Impact Analyzer",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Is High-Risk Revenue Friction?": {
      "main": [
        [
          {
            "node": "Tag as High Priority",
            "type": "main",
            "index": 0
          },
          {
            "node": "Prepare Delivery & Returns Risk Flags",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Tag as Moderate / Low Priority",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Review for AI Analysis": {
      "main": [
        [
          {
            "node": "AI Friction Impact Analyzer",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Calculate Correlated Friction Score": {
      "main": [
        [
          {
            "node": "Is High-Risk Revenue Friction?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Start Review Scraping (Bright Data)": {
      "main": [
        [
          {
            "node": "Wait Before Status Check",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Format Bright Data Error",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Delivery & Returns Risk Flags": {
      "main": [
        [
          {
            "node": "Log Delivery & Returns Risk",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}