This workflow corresponds to n8n.io template #14528 — we link there as the canonical source.
This workflow follows the Google Sheets → HTTP Request recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "5daFk7D6Dp3iqvhZ",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "(Retail) Social Review Monitoring",
"tags": [],
"nodes": [
{
"id": "00b1a071-21ec-4ad3-a97d-51cb5c164021",
"name": "Trigger on schedule time",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-1808,
-80
],
"parameters": {
"rule": {
"interval": [
{
"field": "hours",
"hoursInterval": 5
}
]
}
},
"typeVersion": 1.2
},
{
"id": "f2b2e630-9f9b-409b-9eb8-17c5da2943c1",
"name": "Fetch woocommerce reviews",
"type": "n8n-nodes-base.httpRequest",
"position": [
-1536,
-80
],
"parameters": {
"url": "",
"options": {},
"authentication": "genericCredentialType",
"genericAuthType": "httpBasicAuth"
},
"credentials": {
"httpBasicAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.3
},
{
"id": "b6d8f096-954b-495d-867f-0d429b4ac9a9",
"name": "Normalize review data",
"type": "n8n-nodes-base.set",
"position": [
-1328,
-80
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "cda2db58-d7a8-4efe-976d-1e1ce6365bba",
"name": "review_id",
"type": "number",
"value": "={{ $json.id }}"
},
{
"id": "b28802c9-83da-4080-b0db-c2e1e81facc9",
"name": "product_name",
"type": "string",
"value": "={{ $json.product_name }}"
},
{
"id": "be136152-9662-4ccb-8d33-efbf006d036f",
"name": "rating",
"type": "number",
"value": "={{ $json.rating }}"
},
{
"id": "1dc1dfd4-8e5c-474a-bda2-b71053fb160c",
"name": "reviewer",
"type": "string",
"value": "={{ $json.reviewer }}"
},
{
"id": "a887a8ec-ec29-4a15-992e-993c952c6868",
"name": "review_text",
"type": "string",
"value": "={{ $json.review }}"
},
{
"id": "508c49c7-e95d-4bb3-82bd-edf40b88eb3f",
"name": "created_at",
"type": "string",
"value": "={{ $json.date_created }}"
},
{
"id": "b6d21216-9775-4364-92f4-2a5abc9f9137",
"name": "product_permalink",
"type": "string",
"value": "={{ $json.product_permalink }}"
},
{
"id": "b3e49fa0-8719-41b4-9d66-4995bfe66551",
"name": "status",
"type": "string",
"value": "={{ $json.status }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "ca93fa10-e4f8-4ce7-8b64-b4b0e2965f8c",
"name": "Process reviews one by one",
"type": "n8n-nodes-base.splitInBatches",
"position": [
-1104,
-80
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "7b2d2c1b-0dc0-4601-ab6b-7ae1c55caf0a",
"name": "Check review approval",
"type": "n8n-nodes-base.if",
"position": [
-864,
-64
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "75691765-feb5-4b62-b7b4-69e7ac10ee31",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.status }}",
"rightValue": "approved"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "6ac24081-614f-4a3b-ad09-8103c88bedfb",
"name": "Check low rating",
"type": "n8n-nodes-base.if",
"position": [
-640,
-112
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "e4e12f4d-5680-4bc9-b706-ce0942aca09f",
"operator": {
"type": "number",
"operation": "lte"
},
"leftValue": "={{ $json.rating }}",
"rightValue": 2
}
]
}
},
"typeVersion": 2.2
},
{
"id": "12e8384e-fe08-4aae-8f20-aa84c26dee76",
"name": "Find review in sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
-432,
-128
],
"parameters": {
"options": {},
"filtersUI": {
"values": [
{
"lookupValue": "={{ $json.review_id }}",
"lookupColumn": "=review_id"
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 950689864,
"cachedResultUrl": "#",
"cachedResultName": "product_rating"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1TkODFnQS4sw8-ullt0U34aph2FMLteyUJvUYC6GarI0",
"cachedResultUrl": "#",
"cachedResultName": "New Order Track"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "45a3201e-4460-4cf5-b78a-6fc7d3661776",
"name": "Is new review?",
"type": "n8n-nodes-base.if",
"position": [
-272,
-128
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "5ce3a9f8-2931-493e-8275-92599c93c832",
"operator": {
"type": "number",
"operation": "equals"
},
"leftValue": "={{ $items().length }}",
"rightValue": 0
}
]
}
},
"typeVersion": 2.2
},
{
"id": "49fc0963-ef19-4445-ba29-a2507402fb01",
"name": "Genrate Alert message",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
-48,
-320
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4-turbo",
"cachedResultName": "GPT-4-TURBO"
},
"options": {},
"responses": {
"values": [
{
"content": "=You are a customer support assistant.\n\nCreate a short Slack alert message for a low-rated product review.\n\nRules:\n- Keep it under 4 lines\n- Professional and urgent tone\n- No emojis except \n- Remove HTML\n- Mention product name and issue clearly\n- Do NOT invent facts\n\nReview details:\nProduct: {{$json.product_name}}\nRating: {{$json.rating}} stars\nReviewer: {{$json.reviewer}}\nReview: {{ $json.review_text }}\n"
}
]
},
"builtInTools": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "77b56cfd-d260-438e-8013-38949c6503eb",
"name": "Send slack alert",
"type": "n8n-nodes-base.slack",
"position": [
288,
-320
],
"parameters": {
"text": "={{ $json.output[0].content[0].text }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "list",
"value": "C09S57E2JQ2",
"cachedResultName": "n8n"
},
"otherOptions": {
"includeLinkToWorkflow": false
}
},
"credentials": {
"slackApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.3
},
{
"id": "ce1fa2d0-0649-4dc4-ad45-e7329d967c80",
"name": "Log new review",
"type": "n8n-nodes-base.googleSheets",
"position": [
544,
-320
],
"parameters": {
"columns": {
"value": {
"rating": "={{ $('Check low rating').item.json.rating }}",
"review": "={{ $('Check low rating').item.json.review_text }}",
"reviewer": "={{ $('Check low rating').item.json.reviewer }}",
"review_id": "={{ $('Check low rating').item.json.review_id }}",
"created_at": "={{ $('Check low rating').item.json.created_at }}",
"Product_name": "={{ $('Check low rating').item.json.product_name }}",
"product_link": "={{ $('Check low rating').item.json.product_permalink }}"
},
"schema": [
{
"id": "Product_name",
"type": "string",
"display": true,
"required": false,
"displayName": "Product_name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "rating",
"type": "string",
"display": true,
"required": false,
"displayName": "rating",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "review_id",
"type": "string",
"display": true,
"required": false,
"displayName": "review_id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "reviewer",
"type": "string",
"display": true,
"required": false,
"displayName": "reviewer",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "review",
"type": "string",
"display": true,
"required": false,
"displayName": "review",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "created_at",
"type": "string",
"display": true,
"required": false,
"displayName": "created_at",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "product_link",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "product_link",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 950689864,
"cachedResultUrl": "#",
"cachedResultName": "product_rating"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1TkODFnQS4sw8-ullt0U34aph2FMLteyUJvUYC6GarI0",
"cachedResultUrl": "#",
"cachedResultName": "New Order Track"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "3f14e1b4-b4bc-44a1-923e-d99282a82d72",
"name": "Update existing review",
"type": "n8n-nodes-base.googleSheets",
"position": [
-32,
32
],
"parameters": {
"columns": {
"value": {
"rating": "={{ $json.rating }}",
"review": "={{ $json.review }}",
"reviewer": "={{ $json.reviewer }}",
"review_id": "={{ $json.review_id }}",
"created_at": "={{ $json.created_at }}",
"row_number": "={{ $json.row_number }}",
"Product_name": "={{ $json.Product_name }}",
"product_link": "={{ $json.product_link }}"
},
"schema": [
{
"id": "Product_name",
"type": "string",
"display": true,
"required": false,
"displayName": "Product_name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "rating",
"type": "string",
"display": true,
"required": false,
"displayName": "rating",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "review_id",
"type": "string",
"display": true,
"required": false,
"displayName": "review_id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "reviewer",
"type": "string",
"display": true,
"required": false,
"displayName": "reviewer",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "review",
"type": "string",
"display": true,
"required": false,
"displayName": "review",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "created_at",
"type": "string",
"display": true,
"required": false,
"displayName": "created_at",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "product_link",
"type": "string",
"display": true,
"required": false,
"displayName": "product_link",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "number",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"row_number"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 950689864,
"cachedResultUrl": "#",
"cachedResultName": "product_rating"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1TkODFnQS4sw8-ullt0U34aph2FMLteyUJvUYC6GarI0",
"cachedResultUrl": "#",
"cachedResultName": "New Order Track"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "40a67bb4-b21b-47dd-8696-266f0609eec2",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2384,
-816
],
"parameters": {
"width": 432,
"height": 784,
"content": "## How it works\n\n\nThis workflow runs on a schedule or webhook and processes reviews one by one to keep everything clean and controlled.\nFirst, it checks whether a review is approved and valid. Then it looks at the rating to find low-rated reviews (for example, 1 or 2 stars) that need attention.\n\nBefore taking any action, the workflow checks a Google Sheet to see if the review already exists using the review ID.\n\u2022 If the review already exists, the workflow updates the existing record.\n\u2022 If the review does not exist, it treats it as a new review and sends the data to the OpenAI node to create a clear alert message.\n\nFinally, alerts can be sent to Slack or email, and all reviews are logged in Google Sheets. This ensures no duplicate alerts and keeps a complete history of customer feedback.\n\n\n## Setup steps\n\n**1.** Set a **schedule trigger** or **webhook** to receive reviews.\n\n**2.** Use **Split in Batches** to process reviews one at a time.\n\n**3.** Add IF checks for **approval status** and **low rating.**\n\n**4.** Connect **Google Sheets \u2013 Get Rows** to search by review ID.\n\n**5.** Use an IF node to decide **new review vs existing review.**\n\n**6.** Send new reviews to **OpenAI** for alert message creation.\n\n**7.** Send alerts via **Slack or Email** and update Google Sheets.\n"
},
"typeVersion": 1
},
{
"id": "14d40fe8-01dd-427c-86f4-a51d28659afe",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1872,
-160
],
"parameters": {
"color": 7,
"height": 224,
"content": "Triggers the workflow automatically every 5 hours to check for new product reviews."
},
"typeVersion": 1
},
{
"id": "68d1dc58-4fdd-435b-895d-9f967cc99a84",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1616,
-272
],
"parameters": {
"color": 7,
"width": 432,
"height": 368,
"content": "## Fetch Reviews & Normalize reviews\n\n**Fetch woocommerce reviews :** Fetches all product reviews from WooCommerce using REST API authentication.\n\n**Normalize Review Data :** Cleans and maps required review fields into a consistent format for processing.\n"
},
"typeVersion": 1
},
{
"id": "dcf8d9a5-e655-439e-8f60-2a1f79fe6bbd",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-112,
-512
],
"parameters": {
"color": 7,
"width": 832,
"height": 448,
"content": "## Generate Message & Log Review\n\n**Generate Alert Message :** Creates a short, professional Slack alert message for a new low-rated review.\n**Send slack Alert :** Sends the generated alert message to the support Slack channel.\n**Log New Review :** Stores new low-rated review details in Google Sheets for tracking.\n"
},
"typeVersion": 1
},
{
"id": "052a4f8e-c5c6-4cae-a7f2-427e3a1acb50",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1168,
-416
],
"parameters": {
"color": 7,
"width": 1024,
"height": 544,
"content": "## Review Validation & Deduplication Process\n\n**Process Reviews One by One :** Processes each review individually to avoid duplicates and control execution flow.\n**Check Review Approval :** Allows only approved reviews to continue further in the workflow.\n**Check Low Rating :** Filters reviews to identify low-rated products that need attention.\n**Find Review in Sheet :** Checks Google Sheet to see if the review already exists using review ID.\n**Is New Review? :** Determines whether the review is new or already present in the sheet."
},
"typeVersion": 1
},
{
"id": "87f38e61-78ef-4a82-8bf7-20dfb31dfc2a",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-112,
-32
],
"parameters": {
"color": 7,
"width": 304,
"height": 272,
"content": "Updates the existing review record in Google Sheets if it already exists."
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "c713558d-4537-4c9b-8b36-ef73f19a4c68",
"connections": {
"Is new review?": {
"main": [
[
{
"node": "Genrate Alert message",
"type": "main",
"index": 0
}
],
[
{
"node": "Update existing review",
"type": "main",
"index": 0
}
]
]
},
"Log new review": {
"main": [
[
{
"node": "Process reviews one by one",
"type": "main",
"index": 0
}
]
]
},
"Check low rating": {
"main": [
[
{
"node": "Find review in sheet",
"type": "main",
"index": 0
}
],
[
{
"node": "Process reviews one by one",
"type": "main",
"index": 0
}
]
]
},
"Send slack alert": {
"main": [
[
{
"node": "Log new review",
"type": "main",
"index": 0
}
]
]
},
"Find review in sheet": {
"main": [
[
{
"node": "Is new review?",
"type": "main",
"index": 0
}
]
]
},
"Check review approval": {
"main": [
[
{
"node": "Check low rating",
"type": "main",
"index": 0
}
],
[]
]
},
"Genrate Alert message": {
"main": [
[
{
"node": "Send slack alert",
"type": "main",
"index": 0
}
]
]
},
"Normalize review data": {
"main": [
[
{
"node": "Process reviews one by one",
"type": "main",
"index": 0
}
]
]
},
"Update existing review": {
"main": [
[
{
"node": "Process reviews one by one",
"type": "main",
"index": 0
}
]
]
},
"Trigger on schedule time": {
"main": [
[
{
"node": "Fetch woocommerce reviews",
"type": "main",
"index": 0
}
]
]
},
"Fetch woocommerce reviews": {
"main": [
[
{
"node": "Normalize review data",
"type": "main",
"index": 0
}
]
]
},
"Process reviews one by one": {
"main": [
[],
[
{
"node": "Check review approval",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
googleSheetsOAuth2ApihttpBasicAuthopenAiApislackApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow automatically monitors WooCommerce product reviews, detects low-rated and approved reviews, checks whether the review already exists in Google Sheets, updates or inserts records accordingly, and sends a clear Slack alert generated using OpenAI for new low-rated…
Source: https://n8n.io/workflows/14528/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Imagine a dedicated financial expert tirelessly working behind the scenes, sifting through every transaction, every investment move, and every accounting entry. That's exactly what this automated syst
Automate your social media content pipeline from idea to scheduled post. This workflow reads content ideas from a Google Sheet, uses OpenAI to generate platform-optimized posts for LinkedIn, X (Twitte
This workflow acts as an automated personal productivity coach. It aggregates data from your daily tools (Google Calendar, Todoist, and Slack) to provide AI-driven insights into your work habits. It r
This workflow automatically creates a daily market intelligence brief for your stock portfolio. Instead of checking prices, news, and social media separately, it brings everything together into one cl
AI Institutional Stock Valuation Engine with Risk Scoring & Scenario Targets