Back to Portfolio

Decodo Review Aggregation with Gemini Analysis & Telegram Alerts

Decodo Review Aggregation with Gemini Analysis & Telegram Alerts

Image
Summary
This workflow turns product review tracking into a scheduled AI-powered monitoring system. It pulls product URLs from Google Sheets, scrapes reviews with Decodo, formats the review data, analyzes the feedback with Gemini, logs the results, and notifies the team when new review insights are available.
7.6k
Overview

This automation is designed for e-commerce owners, marketplace sellers, product teams, and CX or reputation managers who need a faster way to monitor product reviews. Instead of manually checking Amazon listings or product pages, the workflow collects review data, analyzes customer sentiment with Gemini, saves the results in Google Sheets, and sends real-time Telegram alerts.


{
  "nodes": [
    {
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "id": "877584c6-ca5f-418e-bfa3-4dbf9eba9ea7",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        656,
        880
      ],
      "typeVersion": 1.3
    },
    {
      "parameters": {
        "url": "={{ $json.url }}",
        "operation": "amazon"
      },
      "id": "7bf5bbc7-65cd-445e-9075-457945ec5bfd",
      "name": "Decodo",
      "type": "@decodo/n8n-nodes-decodo.decodo",
      "position": [
        1360,
        896
      ],
      "typeVersion": 1,
      "credentials": {}
    },
    {
      "parameters": {
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "",
          "cachedResultName": "decodo"
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "",
          "cachedResultName": "list urls"
        },
        "options": {}
      },
      "id": "00a28249-c90d-4532-866c-0e1eaf23784f",
      "name": "Get row(s) in sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        896,
        880
      ],
      "typeVersion": 4.7
    },
    {
      "parameters": {
        "options": {}
      },
      "id": "9e5e3fdd-0e01-43ce-a576-9ad31f817355",
      "name": "Google Gemini Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        1696,
        1152
      ],
      "typeVersion": 1
    },
    {
      "parameters": {
        "jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nconst reviews = $input.first().json.results[0].content.results.reviews.map(el => (\n `${el.review_from} - ${el.rating} - ${el.content}`\n))\n\nreturn {\n  reviews: reviews.join(\"\\n\\n\"),\n  url: $('Get row(s) in sheet').first().json.url\n}"
      },
      "id": "93845a3b-96ef-4f77-8456-1ef88d868fb8",
      "name": "Code in JavaScript",
      "type": "n8n-nodes-base.code",
      "position": [
        1568,
        896
      ],
      "typeVersion": 2
    },
    {
      "parameters": {
        "options": {}
      },
      "id": "3ad0d98e-1e81-410c-a821-448bd4ecac45",
      "name": "Summarize Reviews",
      "type": "@n8n/n8n-nodes-langchain.chainSummarization",
      "position": [
        2144,
        960
      ],
      "typeVersion": 2.1
    },
    {
      "parameters": {
        "chatId": "123456789",
        "text": "=🚨ALERT WARNING🚨\nDate: {{ DateTime.now().format('yyyy-MM-dd') }}\nSentiment: {{ $('Sentiment Analyzer').item.json.sentimentAnalysis.category }}\n\nUrl: {{ $('Code in JavaScript').item.json.url }}\n\nSummary: {{ $json.output.text }}\n\n",
        "additionalFields": {}
      },
      "id": "07a0197d-94e2-4016-ab72-d51b9e15414f",
      "name": "Alert Group",
      "type": "n8n-nodes-base.telegram",
      "position": [
        2480,
        976
      ],
      "webhookId": "6e4c1f35-6293-440b-afdd-b8b7c310d7b6",
      "typeVersion": 1.2
    },
    {
      "parameters": {
        "batchSize": 5,
        "options": {}
      },
      "id": "f027e9fa-8bf9-4f4a-a702-abecf6f472f2",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        1120,
        880
      ],
      "typeVersion": 3
    },
    {
      "parameters": {
        "operation": "append",
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1uvnAqq36EoJqdTN01oHCsQs7eqP0zVP3BM_ZJ7avepQ",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1uvnAqq36EoJqdTN01oHCsQs7eqP0zVP3BM_ZJ7avepQ/edit?usp=drivesdk",
          "cachedResultName": "decodo"
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1499922583,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1uvnAqq36EoJqdTN01oHCsQs7eqP0zVP3BM_ZJ7avepQ/edit#gid=1499922583",
          "cachedResultName": "user review aggregations"
        },
        "columns": {
          "value": {
            "Url": "={{ $('Code in JavaScript').item.json.url }}",
            "Sentiment": "={{ $json.sentimentAnalysis.category }}",
            "List Review": "={{ $json.reviews }}"
          },
          "schema": [
            {
              "id": "Url",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Url",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "List Review",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "List Review",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Sentiment",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Sentiment",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "id": "802c3000-3e37-40a5-b7a6-cffefaa4600c",
      "name": "Store to Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2432,
        608
      ],
      "typeVersion": 4.7
    },
    {
      "parameters": {
        "inputText": "={{ $json.reviews }}",
        "options": {}
      },
      "id": "5742938e-b6ad-4d65-8d4d-4bacfb144be7",
      "name": "Sentiment Analyzer",
      "type": "@n8n/n8n-nodes-langchain.sentimentAnalysis",
      "position": [
        1776,
        864
      ],
      "typeVersion": 1.1
    }
  ],
  "connections": {
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Get row(s) in sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Decodo": {
      "main": [
        [
          {
            "node": "Code in JavaScript",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get row(s) in sheet": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Sentiment Analyzer",
            "type": "ai_languageModel",
            "index": 0
          },
          {
            "node": "Summarize Reviews",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Code in JavaScript": {
      "main": [
        [
          {
            "node": "Sentiment Analyzer",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Summarize Reviews": {
      "main": [
        [
          {
            "node": "Alert Group",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Alert Group": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [],
        [
          {
            "node": "Decodo",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Store to Sheet": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Sentiment Analyzer": {
      "main": [
        [
          {
            "node": "Store to Sheet",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Summarize Reviews",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Summarize Reviews",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "pinData": {},
  "meta": {
    "templateId": "11632",
    "instanceId": "cd5a51fdc3664ef7f0b4ef975a1d9b4e58ef62bdee8199cf9c2ee6f98a1cca79"
  }
}

  
Overview
MetricDetails
Difficulty LevelIntermediate
Estimated Build Time2 to 3 hours
Monthly Operating CostDepends on Decodo usage, Gemini usage, and review volume
Premium PotentialCan be sold to e-commerce brands and CX teams as a $750 to $2,500 reputation monitoring automation

Core Benefits
  • Automated Review Collection: Pulls product URLs from Google Sheets and retrieves review data without manual checking.
  • AI Sentiment Analysis: Uses Gemini to classify review sentiment and summarize customer feedback.
  • Centralized Review Log: Saves processed review insights directly into Google Sheets.
  • Real-Time Alerts: Sends Telegram notifications whenever new reviews are processed.
  • Scheduled Monitoring: Runs on a recurring schedule so product feedback stays up to date.

How the Engine Works

1. Scheduled Trigger

The workflow starts automatically based on the schedule you set in n8n.

2. Google Sheets URL Input

Google Sheets provides the list of product URLs or marketplace listings that need to be monitored.

3. Decodo Review Extraction

Each product URL is processed through the Decodo community node to extract customer reviews from the target page.

4. Review Formatting

A Code node cleans and structures the raw review data so it can be analyzed and logged consistently.

5. Gemini Review Analysis

Gemini analyzes the formatted review data, classifies sentiment, and generates a concise summary of the main customer themes.

6. Google Sheets Logging

The final sentiment, summary, review content, and related product data are appended to a Google Sheets review log.

7. Telegram Alert

A Telegram message is sent with a real-time summary and sentiment snapshot when new reviews are processed.


Database / Output Structure
Column NameData Stored
Product URLSource product or listing URL
Product NameProduct title or identifier
Review TextExtracted customer review
RatingStar rating, if available
SentimentPositive, neutral, or negative classification
SummaryGemini-generated review summary
Key ThemesMain topics or recurring issues
Date ProcessedTimestamp when the review was analyzed
Alert StatusWhether a Telegram alert was sent
Setup & Configuration Guide

Decodo Setup

Install and configure the Decodo community node in your self-hosted n8n instance. Add your Decodo API credentials to the Decodo node before running the workflow.

Google Sheets Setup

Create a Google Sheet with one tab for product URLs and another tab for the review log. Update both Google Sheets nodes with the correct document ID and sheet names.

Gemini Configuration

Add your Gemini API credentials and adjust the prompt if you want deeper review analysis, such as keywords, product issues, toxicity, categories, or buyer intent.

Telegram Setup

Create a Telegram bot, add the bot token and Chat ID to the workflow, and test the alert message before turning on the schedule.

Schedule Setup

Adjust the schedule interval based on how often you want to check for new reviews. Run the workflow once manually to confirm mappings and output fields.


Business Use Cases
  • E-commerce Brands: Track product reviews and identify customer pain points faster.
  • Amazon Sellers: Monitor listing feedback without manually checking each product page.
  • Product Teams: Find recurring feature requests, defects, and satisfaction signals.
  • CX Teams: Detect negative feedback early and respond before issues grow.
  • Reputation Managers: Maintain a centralized view of customer sentiment across listings.
Advanced Features & Considerations

This workflow can be expanded with negative-sentiment-only alerts, product-level reporting, keyword detection, review categorization, and additional notification channels such as Slack or email. You can also append metadata such as product IDs, timestamps, marketplace, region, and review source for cleaner reporting.

Disclaimer

This workflow uses the Decodo community node, so it requires a self-hosted n8n instance. Install the community package only if you trust the source and understand how community nodes work in your n8n environment.

Strategy Branding Interfaces Motion Typography Systems Identity UI / UX DESIGN Direction Experience Digital Strategy Branding Interfaces Motion Typography Systems Identity UI / UX DESIGN Direction Experience Digital
Valuable Feedback

Trusted By the World's Fastest Growing Companies

Digital product design and scalable web platforms

[2022-2025]

0 % Growth
Knowledge-driven systems and content architecture

[2023-2024]

0 % Growth
Lightweight development for high-performance products

[2020-2026]

0 % Growth