이번 글에서는 [리뷰 내용 크롤링► AI 리뷰 분석► 구글 스프레드시트 업데이트] N8N 워크플로우에 대해 이야기하려 한다.
📌이 글에 나오는 툴 정보📌
1️⃣ n8n
-url: https://n8n.io/
-여러 api를 한 번에 연동해 나만의 AI 에이전트 생성 가능 "구독 필요"
2️⃣ apify
-url: https://apify.com/
-유튜브 댓글 크롤링, 네이버 쇼핑 상품 크롤링 등 다양한 크롤러를 찾을 수 있다 "구독 필요"
[리뷰 크롤링] 방법은 크게 3가지가 있다.
①n8n에 api 연동하여 크롤링한다(n8n http request 혹은 firecrawl 이용)
②n8n에서 바로 크롤링한다(html extract 이용)
③웹 스크래퍼(apify, listly 등)를 활용한다
다만 네이버 쇼핑 및 쿠팡 리뷰 크롤링은 일반적인 방법으로는 어렵다. 봇 차단 시스템과 더불어 html을 추출해도 리뷰가 뜨지 않는다.(브라우저가 열리면 api를 호출해 리뷰 데이터를 로드하는 방식이기 때문) 그래서 ①번 ②번 모두 실패했다... 또한 웹 스크래퍼인 apify에도 네이버 쇼핑/쿠팡 상품 리스트를 추출하는 건 있으나 리뷰를 크롤링하는 건 없다. 따라서 만약 네이버 쇼핑/쿠팡 리뷰를 크롤링해 분석하고 싶다면 listly를 추천한다.
이번 글에서는 [apify를 활용해 구글 지도 검색 결과에서 리뷰 수 기준 상위 5개 업체를 추출► 각 업체 리뷰 내용 AI 분석► 구글 스프레드시트 업데이트 혹은 메일 전송]하는 n8n 워크플로우를 생성한다. 위 방법 중 ③번에 해당한다. (①번 방법인 n8n http request 로 유튜브 댓글을 추출해 AI에게 분석시키는 자동화 워크플로우는 다음 글에서 자세히 다룰 예정이다.)
예를 들어 네이버 지도에 "성수 카페"를 검색하면 업체와 리뷰 수, 리뷰들이 쭉 나오는데 이걸 추출해서 AI에게 분석을 시키는 내용이다.

✨오늘의 작업 요약✨

워크플로우가 다소 길고 복잡해 보일 수 있으나 단계별로 뜯어 보면 그리 복잡하지 않다. 워크플로우를 파일로 첨부해 두었으므로 글과 함께 확인하는 것을 추천한다. (파일 내용을 n8n에 복붙 하면 워크플로우가 그대로 나온다.)
1️⃣단계
apify의 [Naver Place Search] 를 n8n에 api로 연동하고 검색 결과를 리뷰 수 기준 상위 5개로 추려서 구글 스프레드시트에 1차 업데이트한다.
2️⃣단계
apify의 [Naver Place Reviews] 를 n8n에 api로 연동한다.
3️⃣단계
1단계에서 추려낸 상위 5개 업체의 리뷰 내용을 AI에게 전달해 아래 4개 내용으로 분석하도록 한다. 분석 내용은 구글 스프레드시트에 업데이트하도록 한다.
①긍정 리뷰 비율(%)
②부정 리뷰 비율(%)
③긍정 키워드 Top 10
④부정 키워드 Top 10
⭐️1단계 요약⭐️

우선 1단계 워크플로우에 대해 자세히 설명하겠다.
① on form submission 노드 추가
아래 형태의 팝업창이 뜨게끔 한다. 키워드를 입력하면 워크플로우가 실행된다. 세팅 상단 test url / production url 이 제공된다. 워크플로우를 최종 publish 시키면 production url을 공유해 주면 된다. 누구든 링크로 들어와 키워드를 입력하면 키워드 검색 결과 중 리뷰 수 기준 상위 5개 업체가 추려지고, 각 업체에 대한 리뷰 분석을 구글 스프레드시트로 확인할 수 있게 된다.


② code ► code in javascript (선택 사항)
①번에서 입력한 키워드를 2개로 복사하는 코드다. ③번 switch 를 통해 1개는 ④-1번 apify [Naver Place Search]에 전달하고 다른 1개를 ④-2번 구글 스프레드시트에 아래와 같이 입력한다. 언제 어떤 키워드를 입력했는지 히스토리를 쌓아두기 위한 목적이므로 이 과정이 필요 없다면 ②번과 ③번은 삭제해도 된다.

④-1 http request 노드 추가
n8n http request 로 apify의 Naver Place Search API를 연동하는 작업이다. 링크로 들어가(가입 필요) 오른쪽 상단 API► API clients► cURL 을 확인하면 된다. 그대로 복붙 하는 형태가 아니므로 n8n 파일 내용을 참고해 개인 API 토큰을 추가하면 된다.
👉이걸 통해 "성수 카페"를 검색했을 때 나오는 업체들의 업체명, 리뷰수, 주소 등의 정보를 확인할 수 있다. (리뷰 내용은 다른 API를 연결해야 하며 이건 2단계 내용에 자세히 설명되어 있다.)


❗️한가지 주의할 것은 n8n에 cURL을 추가할 때 BODY에 JSON을 입력하는데, cURL에는 아래 내용으로 들어가 있다. 이걸 그대로 넣으면 SHADER~ 하는 오류가 뜰 수 있다. 이 경우 ##수정 부분의 JSON을 입력하면 해결된다.
##기존
{
"placeUrls": [
{
"url": "https://pcmap.place.naver.com/restaurant/1085956231/review/visitor"
}
],
"maxReviews": 100,
"sortBy": "recent",
"includeStats": true,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": [
"SHADER"
]
}
}
##수정
{
"queries": [
"={{$json.keyword}}"
],
"maxResults": 55,
"includePhotos": true,
"includeReviewSnippets": true
}
④-2 google sheet 노드 ► append a row in sheet
credential to connect with ► +create new credential 을 클릭해 구글 계정을 추가해 준다. document/sheet 항목에 연결하려는 파일과 시트를 선택하고(계정을 연결하면 자동으로 계정에 있는 파일들이 리스트업 된다.) 셀에 입력하려는 항목을 아래와 같이 끌어오면 된다. 만약 date 형식 변경 등으로 json을 수정해야 한다면 챗gpt한테 요청하면 복붙 할 json을 바로 만들어 준다.

⑤ wait 노드 추가 (선택 사항)
이 노드는 api 연동에 시간이 걸려 오류가 날 수 있어 추가해둔 것으로 필수적인 것은 아니다. wait amount에 기다리려는 초, 분, 시(wait unit 기준) 숫자를 넣으면 된다.

⭐️2단계 요약⭐️

⑥ http request 노드 추가
④-1에서 연동한 것은 Naver Place Search와 연결한 것이고 이번 API 연동은 [Naver Place Search 를 실행했을 때 결괏값]을 받기 위한 것이라 보면 된다.



⑦ code in javascript 노드 추가
리뷰 수 기준 상위 5개 업체만 리스트업하기 위한 코드다. 업체 수를 수정하고 싶다면 챗gpt에게 코드를 작성해 달라고 하면 된다.
const items = $input.all();
// visitorReviewCount 기준 내림차순 정렬
items.sort((a, b) => {
return (b.json.visitorReviewCount || 0) - (a.json.visitorReviewCount || 0);
});
// 상위 5개만 선택
const top5 = items.slice(0, 5);
// 필요한 필드 + rank 추가
return top5.map((item, index) => {
const j = item.json;
return {
json: {
rank: index + 1,
placeId: j.placeId,
name: j.name,
category: j.category,
businessCategory: j.businessCategory,
placeUrl: j.placeUrl,
fullAddress: j.fullAddress,
visitorReviewCount: j.visitorReviewCount,
blogCafeReviewCount: j.blogCafeReviewCount,
bookingReviewCount: j.bookingReviewCount,
totalReviewCount: j.totalReviewCount,
options: j.options,
searchQuery: j.searchQuery
}
};
});
⑧ code in javascript 노드 추가
⑦번에서 받은 데이터를 2개로 복제하는 코드다. 1개는 다음 단계(ai 리뷰 분석), 나머지는 구글 스프레드시트에 업데이트하기 위해 복제한 것이라 따로 필요 없다면 삭제하면 된다.
const items = $input.all();
const output = [];
for (const item of items) {
const data = item.json;
output.push({
json: {
...data,
route: "sheet"
}
});
output.push({
json: {
...data,
route: "review"
}
});
}
return output;
⭐️3단계 요약⭐️

① switch 노드 추가
2단계 마지막에서 5개 업체 데이터를 2개로 복사했다. 하나는 AI 분석, 다른 하나는 구글 스프레드시트에 내용을 업데이트하기 위한 목적이다. sheet 와 review로 마킹되어 있으므로 routing rules에 넣고자 하는 변수를 끌어놓는다.
② loop over items 노드 추가
5개 업체 하나하나의 데이터 분석을 위해 추가한다. (replace me는 삭제하고 다음 노드를 추가하면 된다.)
③ http request 노드 추가
이전글 ⑦-1에서 연동한 것은 Naver Place Search API이고 [이번에 연동하는 것은 Naver Place Reviews API] 다.
👉Naver Place Search : 업체명, 주소, 링크, 리뷰 수 확인 가능
👉Naver Place Reviews : 업체명, 리뷰 내용, 작성자 등 확인 가능
아래와 같이 업체 링크를 넣고 최대로 받을 리뷰 수를 넣고 start를 넣으면 업체명, 리뷰 내용 등을 받을 수 있다.


‼️그러나 Naver Place Search API 연동방법과 조금 다르다. Naver Place Search API의 경우 2번 연동했다. Naver Place Search API와 이를 돌렸을 때 결과값을 받을 수 있는 API 였다. 그러나 loop over items를 연결한 상황에서 이렇게 2번 연동하면 오류가 생긴다. 1~2단계에서 받은 url을 Naver Place Reviews에 넣어 결과를 받아야 하는데 이 데이터가 사라져 버리는 것. 그래서 엉뚱한 데이터가 나온다.
따라서 한 번에 연동해야 한다. 자세한 세팅 내용은 첨부된 파일을 참고하면 된다.
④ code in javascript 노드 추가
데이터를 받게 되면 placeID부터 테마, 리뷰 수 등 여러 항목을 받게 된다. 리뷰 분석을 위해 업체명과 리뷰 내용만 필요하고, 여러 리뷰는 하나의 텍스트로 합쳐야 분석이 가능하다. 이 코드는 원하는 항목과 리뷰 텍스트를 정리해 준다고 보면 된다.
⑤ AI 노드 추가
챗gpt, 클로드, 제미나이 등 원하는 AI 모델을 연결하면 된다. 받은 데이터를 토대로 AI에게 아래 4가지 분석 결과를 내도록 프롬프트로 지시한다. (프롬프트에 어떤 내용을 넣어야 할지 모르겠다면 챗gpt 도움을 받으면 된다.)
❗️이걸 사용하려면 챗gpt API 가입 ► 계정 금액 충전이 필요하다. 챗gpt API 계정에서 API 토큰을 확인하고 n8n AI 노드 [Credential to connect with] 에 api 토큰을 등록해서 연결하면 된다.
[요청 내용]
①긍정 리뷰 비율(%)
②부정 리뷰 비율(%)
③긍정 키워드 Top 10
④부정 키워드 Top 10
##프롬프트
아래는 네이버 플레이스의 특정 장소 리뷰 데이터이다.
장소명:
{{ $json.businessName }}
리뷰 데이터:
{{ $json.reviewsText }}
위 리뷰를 분석해서 아래 4가지를 JSON 형식으로만 반환하라.
조건:
- 반드시 JSON만 반환할 것
- 코드블록(```)은 절대 사용하지 말 것
- 설명 문장 없이 결과만 반환할 것
- 비율은 숫자만 반환할 것
- 키워드는 배열 형태로 반환할 것
- 리뷰 내용 기준으로 긍정/부정을 판단할 것
- 애매한 리뷰는 전체 맥락을 보고 가장 가까운 쪽으로 분류할 것
반환 형식:
{
"장소 이름(Business Name)": "{{ $json.businessName }}",
"긍정 리뷰 비율 (%)": 0,
"부정 리뷰 비율 (%)": 0,
"긍정 키워드 Top 10": [],
"부정 키워드 Top 10": []
}
⑥ code in javascript 노드 추가
챗gpt에게 받은 내용(왼쪽 input)을 가공하는 코드다. (결과: 오른쪽 output)
const rawText = $json.output?.[0]?.content?.[0]?.text || "";
// 코드블록 제거
const cleanedText = rawText
.replace(/^```json\s*/i, "")
.replace(/^```\s*/i, "")
.replace(/\s*```$/i, "")
.trim();
// JSON 파싱
const result = JSON.parse(cleanedText);
return [
{
json: {
"장소 이름(Business Name)": result["장소 이름(Business Name)"] || "",
"긍정 리뷰 비율 (%)": result["긍정 리뷰 비율 (%)"],
"부정 리뷰 비율 (%)": result["부정 리뷰 비율 (%)"],
"긍정 키워드 Top 10": Array.isArray(result["긍정 키워드 Top 10"])
? result["긍정 키워드 Top 10"].join(", ")
: result["긍정 키워드 Top 10"] || "",
"부정 키워드 Top 10": Array.isArray(result["부정 키워드 Top 10"])
? result["부정 키워드 Top 10"].join(", ")
: result["부정 키워드 Top 10"] || ""
}
}
];
⑦ google spreadsheet ► append or update row in sheet 노드 추가
챗gpt에서 받은 분석 자료를 구글 스프레드시트에 업데이트하도록 세팅하면?
👏👏👏구글 스프레드시트에 업체별 리뷰 분석 데이터 내용이 그대로 들어온다.

⑧ google spreadsheet ► update row in sheet 노드 추가 (선택 사항)
2단계에서 받은 5개 업체 내용을 리뷰 결과 시트에 함께 업데이트하고 싶다면 이 노드를 추가하면 된다. 순서상 loop over items 노드 앞에 있지만 제일 마지막에 실행된다. 그래서 작성 순서도 마지막으로 두었다.


각 항목에 들어가길 원하는 데이터를 끌어서 세팅하면 된다.

이렇게 하면 워크플로우가 모두 완성된다! 🙌
다음 글에서는 리뷰 분석 결과를 [HTML로 변환하여 시각화(cursur AI로 1분 만에 뚝딱) ► 메일 자동 발송]하는 워크플로우에 대해 이야기한다.
▼다음 글▼
https://ironyoo.tistory.com/44
[AI마케팅자동화] 리뷰 크롤링 후 AI 분석 자동 메일 발송(cursurAI, 바이브 코딩, 워드클라우드)
이전 글에서 apify로 리뷰를 크롤링하고 분석 내용을 구글 스프레드시트에 자동 업데이트하는 n8n 워크플로우를 설명했다.https://ironyoo.tistory.com/42 [AI마케팅자동화] 리뷰 크롤링 후 AI 분석 구글 스
ironyoo.tistory.com
'AI > [AI_Marketing] trial and error' 카테고리의 다른 글
| n8n 유튜브 노드 개인 유튜브 계정 연결하기 (0) | 2026.03.23 |
|---|---|
| [AI마케팅자동화] 리뷰 크롤링 AI 분석 워드클라우드 시각화 자동 메일 발송(cursurAI, 바이브 코딩) (0) | 2026.03.18 |
| [AI마케팅자동화] 데일리 리포트 AI 성과 분석 코멘트 메일 자동 발송(n8n) (0) | 2026.03.09 |
| 코드 참고 (0) | 2026.03.05 |
| [ai 마케팅] 미드저니 마케팅 활용하기(배너, 상세페이지 등) (1) | 2024.06.21 |