Plantilla - Análisis de reseñas de Google

Intermedio

Este es unMarket Research, AI Summarizationflujo de automatización del dominio deautomatización que contiene 14 nodos.Utiliza principalmente nodos como If, Code, HttpRequest, GoogleSheets, ManualTrigger. Usar SerpAPI, GPT-4 y Google Sheets para analizar y resumir reseñas de Google

Requisitos previos
  • Pueden requerirse credenciales de autenticación para la API de destino
  • Credenciales de API de Google Sheets
  • Clave de API de OpenAI
Vista previa del flujo de trabajo
Visualización de las conexiones entre nodos, con soporte para zoom y panorámica
Exportar flujo de trabajo
Copie la siguiente configuración JSON en n8n para importar y usar este flujo de trabajo
{
  "id": "pRW5xgECkynFHaUx",
  "meta": {
    "instanceId": "a9966e7d53853abbaaeed78ba2b9971c959f5792b2cccdff75eb461951503a7f",
    "templateCredsSetupCompleted": true
  },
  "name": "template - gmbr google review",
  "tags": [],
  "nodes": [
    {
      "id": "29631d28-1dbb-419b-979e-afd26420e020",
      "name": "Al hacer clic en 'Probar flujo de trabajo'",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -960,
        -420
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "eeba4db4-59cf-4985-9331-67bfdef3b5cb",
      "name": "Si el texto del comentario NO está vacío",
      "type": "n8n-nodes-base.if",
      "position": [
        40,
        -420
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "2b60b7e3-29e9-48a3-8b97-badb7dd247c3",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.reviewText }}",
              "rightValue": "={{ $json.restaurant }}"
            }
          ]
        },
        "looseTypeValidation": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "633b7ddf-416d-40cb-b3ec-bf5dd4ec50de",
      "name": "Analizar Sentimiento del Comentario",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        460,
        -500
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4-turbo",
          "cachedResultName": "GPT-4-TURBO"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=Analyze the following restaurant review for the restaurant \"{{ $json.restaurant }}\".\n\n1. What is the sentiment (positive, neutral, or negative)?\n2. Extract 3–5 keywords or themes from the review.\n\nReview: {{ $json.reviewText }}\nInclude Restaraunt: {{ $json.restaurant }}\n\nRespond only in JSON format like:\n{\n  \"sentiment\": \"...\",\n  \"keywords\": [\"...\", \"...\", \"...\"]\n  \"restaraunt\": \"...\"\n}\n"
            }
          ]
        }
      },
      "credentials": {
        "openAiApi": {
          "id": "niPVUMBH1mYOAFdj",
          "name": "OpenAi account 3"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "cef1af19-e7d0-4c50-8afd-dcb41547e5df",
      "name": "Obtener Datos",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -460,
        -420
      ],
      "parameters": {
        "url": "https://serpapi.com/search.json",
        "options": {},
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "engine",
              "value": "google_maps"
            },
            {
              "name": "type",
              "value": "search"
            },
            {
              "name": "q",
              "value": "={{ $json['Restaraunt Name'] }}"
            },
            {
              "name": "api_key"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "7624572b-1abb-4dc9-958d-87648b09aead",
      "name": "Limpiar Datos",
      "type": "n8n-nodes-base.code",
      "position": [
        -220,
        -420
      ],
      "parameters": {
        "jsCode": "return $input.all().flatMap(item => {\n  // Check if 'place_results' exists on the item.json object\n  const placeResults = item.json.place_results;\n\n  if (!placeResults) {\n    console.log(\"No 'place_results' found for item.\");\n    return [];\n  }\n\n  const restaurant = placeResults.title || \"Unknown\";\n  const reviews = placeResults.user_reviews?.most_relevant; // Accessing the correct path for reviews\n\n  // Check if 'reviews' is an array\n  if (!Array.isArray(reviews)) {\n    console.log(\"No 'most_relevant' reviews array found for:\", restaurant);\n    return [];\n  }\n\n  return reviews.slice(0, 10).map(review => ({\n    json: {\n      restaurant,\n      reviewText: review.description || \"\", // Changed from review.snippet to review.description\n      stars: review.rating || null,\n      postedAt: review.date || \"\"\n    }\n  }));\n});"
      },
      "typeVersion": 2
    },
    {
      "id": "dedec6f9-535d-4832-81ea-de026d5b30d7",
      "name": "Extraer Restaurantes de Muestra",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -720,
        -420
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1mJRBu96urKkUAUMz1chcipgKlqw6UhKcSLzF0xp_D6w/edit#gid=0",
          "cachedResultName": "sample restaraunts"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1mJRBu96urKkUAUMz1chcipgKlqw6UhKcSLzF0xp_D6w",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1mJRBu96urKkUAUMz1chcipgKlqw6UhKcSLzF0xp_D6w/edit?usp=drivesdk",
          "cachedResultName": "GMBR: list of restaraunts "
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "646p89nKZeX7dMwz",
          "name": "Google Sheets account"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "b67023fc-f21c-4871-8a26-03a43fe4b35c",
      "name": "Exportar Datos",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        820,
        -500
      ],
      "parameters": {
        "columns": {
          "value": {
            "Stars": "={{ $('Cleans It Up').item.json.stars }}",
            "Analysis": "={{ $json.message.content }}",
            "Restaraunt": "={{ $('Cleans It Up').item.json.restaurant }}",
            "Review Text": "={{ $('Cleans It Up').item.json.reviewText }}"
          },
          "schema": [
            {
              "id": "Restaraunt",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Restaraunt",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Review Text",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Review Text",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Stars",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Stars",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Analysis",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Analysis",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1346480145,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1mJRBu96urKkUAUMz1chcipgKlqw6UhKcSLzF0xp_D6w/edit#gid=1346480145",
          "cachedResultName": "table"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1mJRBu96urKkUAUMz1chcipgKlqw6UhKcSLzF0xp_D6w",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1mJRBu96urKkUAUMz1chcipgKlqw6UhKcSLzF0xp_D6w/edit?usp=drivesdk",
          "cachedResultName": "GMBR: list of restaraunts "
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "646p89nKZeX7dMwz",
          "name": "Google Sheets account"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "f8ad050b-99f8-4d4d-b42a-4dd2a76aeb97",
      "name": "Comentarios Fallidos (ej. texto vacío)",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        480,
        -240
      ],
      "parameters": {
        "columns": {
          "value": {
            "Stars": "={{ $json.stars }}",
            "Keywords": "Skipped (no reviewText)",
            "Sentiment": "Skipped (no reviewText)",
            "Restaraunt": "={{ $json.restaurant }}",
            "Review Text": "={{ $json.reviewText }}"
          },
          "schema": [
            {
              "id": "Restaraunt",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Restaraunt",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Review Text",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Review Text",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Stars",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Stars",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Sentiment",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Sentiment",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Keywords",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Keywords",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1253412439,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1mJRBu96urKkUAUMz1chcipgKlqw6UhKcSLzF0xp_D6w/edit#gid=1253412439",
          "cachedResultName": "skipped reviews"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1mJRBu96urKkUAUMz1chcipgKlqw6UhKcSLzF0xp_D6w",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1mJRBu96urKkUAUMz1chcipgKlqw6UhKcSLzF0xp_D6w/edit?usp=drivesdk",
          "cachedResultName": "GMBR: list of restaraunts "
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "646p89nKZeX7dMwz",
          "name": "Google Sheets account"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "281659ab-03e9-4ada-8f23-d35389f5909e",
      "name": "Nota Adhesiva1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1560,
        -800
      ],
      "parameters": {
        "width": 460,
        "height": 980,
        "content": "## Try It Out!\nThis n8n template helps you analyze Google Maps reviews for a list of restaurants, summarize them with AI, and identify optimization opportunities—all in one automated workflow.\nWhether you're managing multiple locations, helping local restaurants improve their digital presence, or conducting a competitor analysis, this workflow helps you extract insights from dozens of reviews in minutes.\n\n  How It Works?\n- Start with a pre-filled list of restaurants in Google Sheets.\n- The workflow uses SerpAPI to scrape Google Maps reviews for each listing.\n- Reviews with content are passed to ChatGPT for summarization.\n- Empty or failed reviews are logged in a separate tab for easy follow-up.\n- Results are stored back in your Google Sheet for analysis or sharing\n\nHow To Use\n- Customize the input list in Google Sheets with your own restaurants.\n- Update the OpenAI prompt if you want a different style of summary.\n- You can trigger this manually or swap in a schedule, webhook, or other event.\n\nRequirements\n- A SerpAPI account to fetch reviews\n- An OpenAI account for ChatGPT summarization\n- Access to Google Sheets and n8n\n\nWho Is It For? \n- This is helpful for people looking to analyze a large batch of Google reviews in a short amount of time. Additionally, it can be used to compare restaurants and see where each can be optimized. \n\n\nHow To Set-Up? \n- Use a SerpAPI endpoint to include in the HTTP request node. Refer to this n8n documentation for more help! https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolserpapi/. \n\nHappy Automating! "
      },
      "typeVersion": 1
    },
    {
      "id": "e3c1e3a8-905c-4fae-8ea7-b02a306d7139",
      "name": "Nota Adhesiva",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -780,
        -700
      ],
      "parameters": {
        "width": 500,
        "height": 760,
        "content": "## 1. Scrape Google Maps Business Listings\n\nUsing the Google Sheets information gathered beforehand, the restaurant information (e.g. name, Google Maps URL) is passed into SerpAPI one by one.  "
      },
      "typeVersion": 1
    },
    {
      "id": "34ca561c-8b25-422c-bdca-c296ed1bdb30",
      "name": "Nota Adhesiva2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -240,
        -700
      ],
      "parameters": {
        "width": 500,
        "height": 760,
        "content": "## 2. Clean the Data and Identify Gaps \n\nThe data from SerpAPI is structured messily and hard to understand. So, we use a code node to clean up un-necessary information. Afterwards, we can more easily identify gaps in the review. For example, if there is no review text we cannot analyze the review sentiment or extract keywords. \n\nFor that reason, the if node is set to if reviewText = not empty (TRUE), it goes onto analysis by GPT-4. But, if reviewText = not empty (FALSE), it goes into a separate sheet called 'failed reviews'. "
      },
      "typeVersion": 1
    },
    {
      "id": "e10d0516-893e-48e5-a864-faba09ea2381",
      "name": "Nota Adhesiva3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        420,
        -700
      ],
      "parameters": {
        "width": 520,
        "height": 760,
        "content": "## 3. Analysis and Export\n\nThe GPT-4 summarizes the review, analyzes the sentiment, and extracts keywords from each. All of this information is exported into a Google Sheets. "
      },
      "typeVersion": 1
    },
    {
      "id": "17d4fe34-5930-4d5e-b7e0-0e57e86c8f82",
      "name": "Nota Adhesiva4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -780,
        -1100
      ],
      "parameters": {
        "width": 580,
        "height": 320,
        "content": "## Step 1 -> Sample Input\n\nHere’s what the Google Sheets input looks like:\n\n![Review Summary](https://i.imgur.com/nzu5N6k.png)\n"
      },
      "typeVersion": 1
    },
    {
      "id": "ccdc7228-ba6c-4194-90e4-93273c4d4e4f",
      "name": "Nota Adhesiva5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1060,
        -700
      ],
      "parameters": {
        "width": 660,
        "height": 360,
        "content": "## Step 3 -> Example Output\n\nThis screenshot shows the output as shown in Google Sheets\n\n![Google Sheets Output](https://i.imgur.com/Dtg5AFc.png)\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "1cb71d95-1b82-487d-97b5-12c38d4afb20",
  "connections": {
    "cef1af19-e7d0-4c50-8afd-dcb41547e5df": {
      "main": [
        [
          {
            "node": "7624572b-1abb-4dc9-958d-87648b09aead",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b67023fc-f21c-4871-8a26-03a43fe4b35c": {
      "main": [
        []
      ]
    },
    "7624572b-1abb-4dc9-958d-87648b09aead": {
      "main": [
        [
          {
            "node": "eeba4db4-59cf-4985-9331-67bfdef3b5cb",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "633b7ddf-416d-40cb-b3ec-bf5dd4ec50de": {
      "main": [
        [
          {
            "node": "b67023fc-f21c-4871-8a26-03a43fe4b35c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "dedec6f9-535d-4832-81ea-de026d5b30d7": {
      "main": [
        [
          {
            "node": "cef1af19-e7d0-4c50-8afd-dcb41547e5df",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "eeba4db4-59cf-4985-9331-67bfdef3b5cb": {
      "main": [
        [
          {
            "node": "633b7ddf-416d-40cb-b3ec-bf5dd4ec50de",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "f8ad050b-99f8-4d4d-b42a-4dd2a76aeb97",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "29631d28-1dbb-419b-979e-afd26420e020": {
      "main": [
        [
          {
            "node": "dedec6f9-535d-4832-81ea-de026d5b30d7",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Preguntas frecuentes

¿Cómo usar este flujo de trabajo?

Copie el código de configuración JSON de arriba, cree un nuevo flujo de trabajo en su instancia de n8n y seleccione "Importar desde JSON", pegue la configuración y luego modifique la configuración de credenciales según sea necesario.

¿En qué escenarios es adecuado este flujo de trabajo?

Intermedio - Investigación de mercado, Resumen de IA

¿Es de pago?

Este flujo de trabajo es completamente gratuito, puede importarlo y usarlo directamente. Sin embargo, tenga en cuenta que los servicios de terceros utilizados en el flujo de trabajo (como la API de OpenAI) pueden requerir un pago por su cuenta.

Información del flujo de trabajo
Nivel de dificultad
Intermedio
Número de nodos14
Categoría2
Tipos de nodos7
Descripción de la dificultad

Adecuado para usuarios con experiencia intermedia, flujos de trabajo de complejidad media con 6-15 nodos

Enlaces externos
Ver en n8n.io

Compartir este flujo de trabajo

Categorías

Categorías: 34