템플릿 - 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\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\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)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
01 AI 미디어 바이어를 사용한 Facebook 광고 성과 분석 및 Google Sheets로 인사이트 전송
Gemini AI를 사용한 Facebook 광고 분석 및 Google Sheets로 인사이트 전송
If
Set
Code
+
If
Set
Code
34 노드JJ Tham
시장 조사
Facebook 페이지 댓글 관리 봇: 답글, 삭제, 차단 및 알림
AI 기반 Facebook 댓글 관리: 자동 답글, 삭제, 차단 및 알림
If
Set
Code
+
If
Set
Code
59 노드SpaGreen Creative
소셜 미디어
템플릿 v08/02 - Facebook 광고 라이브러리에서 Amazon 크롤러로
Apify 크롤러를 사용하여 Amazon에서 Facebook 광고 상품 자동 검색
If
Set
Code
+
If
Set
Code
24 노드Richard Besier
시장 조사
Cha GPT 기반의 브레이크스루 생성기
GPT-4와 구글 스프레드시트를 사용하여 웹에서 개인화된 콜드 이메일 오프닝을 생성
If
Set
Code
+
If
Set
Code
19 노드Mirai
리드 생성
SEO 블로그 분석
AI를 사용한 블로그 SEO 분석: GPT-4 및 규정 준수 크롤링 기반 완전 평가
If
Set
Code
+
If
Set
Code
20 노드inderjeet Bhambra
시장 조사
GPT-4o-mini와 Gmail을 사용한 YouTube 채널 분석 및 성과 보고서 전송
GPT-4o-mini 및 Gmail을 사용하여 YouTube 채널 분석 및 성능 보고서 전송
Code
Email Send
Http Request
+
Code
Email Send
Http Request
20 노드Rahul Joshi
시장 조사