8
n8n 한국어amn8n.com

템플릿 - Google 리뷰 분석

중급

이것은Market Research, AI Summarization분야의자동화 워크플로우로, 14개의 노드를 포함합니다.주로 If, Code, HttpRequest, GoogleSheets, ManualTrigger 등의 노드를 사용하며. SerpAPI, GPT-4 및 Google Sheets를 사용하여 Google 리뷰 분석 및 요약

사전 요구사항
  • 대상 API의 인증 정보가 필요할 수 있음
  • Google Sheets API 인증 정보
  • OpenAI API Key
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
  "id": "pRW5xgECkynFHaUx",
  "meta": {
    "instanceId": "a9966e7d53853abbaaeed78ba2b9971c959f5792b2cccdff75eb461951503a7f",
    "templateCredsSetupCompleted": true
  },
  "name": "template - gmbr google review",
  "tags": [],
  "nodes": [
    {
      "id": "29631d28-1dbb-419b-979e-afd26420e020",
      "name": "'워크플로우 테스트' 클릭 시",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -960,
        -420
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "eeba4db4-59cf-4985-9331-67bfdef3b5cb",
      "name": "리뷰 텍스트가 비어 있지 않은 경우",
      "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": "리뷰 감정 분석",
      "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": "데이터 가져오기",
      "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": "데이터 정리",
      "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": "샘플 레스토랑 추출",
      "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": "데이터 내보내기",
      "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": "실패한 리뷰 (예: 리뷰 텍스트 = 비어 있음)",
      "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": "스티커 노트1",
      "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": "스티커 노트",
      "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": "스티커 노트2",
      "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": "스티커 노트3",
      "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": "스티커 노트4",
      "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": "스티커 노트5",
      "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
          }
        ]
      ]
    }
  }
}
자주 묻는 질문

이 워크플로우를 어떻게 사용하나요?

위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.

이 워크플로우는 어떤 시나리오에 적합한가요?

중급 - 시장 조사, AI 요약

유료인가요?

이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.

워크플로우 정보
난이도
중급
노드 수14
카테고리2
노드 유형7
난이도 설명

일정 경험을 가진 사용자를 위한 6-15개 노드의 중간 복잡도 워크플로우

외부 링크
n8n.io에서 보기

이 워크플로우 공유

카테고리

카테고리: 34