This workflow corresponds to n8n.io template #6590 — 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": "TFA52QNAEro3v0Y2",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Monitor Google Business Reviews with AI Response Generation",
"tags": [],
"nodes": [
{
"id": "bfad3de2-aca1-4691-841f-488fe9a57c09",
"name": "Monitor Google Reviews",
"type": "n8n-nodes-base.googleBusinessProfileTrigger",
"position": [
784,
256
],
"parameters": {
"account": {
"mode": "id",
"value": "={{ $env.GOOGLE_BUSINESS_ACCOUNT_ID }}"
},
"location": {
"mode": "id",
"value": "={{ $env.GOOGLE_BUSINESS_LOCATION_ID }}"
},
"pollTimes": {
"item": [
{
"mode": "everyMinute"
}
]
}
},
"typeVersion": 1
},
{
"id": "7a35316d-b32c-4601-991b-55ef94451883",
"name": "Business Configuration",
"type": "n8n-nodes-base.set",
"position": [
1008,
0
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d",
"name": "businessName",
"type": "string",
"value": "Your Business Name"
},
{
"id": "9b0c8d7e-6f5a-4b3c-2d1e-0f9a8b7c6d5e",
"name": "responseTone",
"type": "string",
"value": "professional and friendly"
},
{
"id": "2e3f1a0b-9c8d-7e6f-5a4b-3c2d1e0f9a8b",
"name": "slackWebhookUrl",
"type": "string",
"value": "={{ $env.SLACK_WEBHOOK_URL }}"
},
{
"id": "3f4a2b1c-0d9e-8f7a-6b5c-4d3e2f1a0b9c",
"name": "notificationEmail",
"type": "string",
"value": "={{ $env.NOTIFICATION_EMAIL }}"
}
]
}
},
"typeVersion": 3.4,
"continueOnFail": true
},
{
"id": "1522ed76-eda8-4ea2-a889-54c3fe3cf8e0",
"name": "Format Google Reviews",
"type": "n8n-nodes-base.set",
"position": [
1232,
256
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "a1b2c3d4-e5f6-7a8b-9c0d-1e2f3a4b5c6d",
"name": "source",
"type": "string",
"value": "Google Business Profile"
},
{
"id": "b2c3d4e5-f6a7-8b9c-0d1e-2f3a4b5c6d7e",
"name": "rating",
"type": "number",
"value": "={{ $json.starRating }}"
},
{
"id": "c3d4e5f6-a7b8-9c0d-1e2f3a4b5c6d7e8f",
"name": "reviewText",
"type": "string",
"value": "={{ $json.comment }}"
},
{
"id": "d4e5f6a7-b8c9-0d1e-2f3a4b5c6d7e8f9a",
"name": "reviewerName",
"type": "string",
"value": "={{ $json.reviewer.displayName }}"
},
{
"id": "e5f6a7b8-c9d0-1e2f-3a4b5c6d7e8f9a0b",
"name": "reviewDate",
"type": "string",
"value": "={{ $json.createTime }}"
},
{
"id": "f6a7b8c9-d0e1-2f3a-4b5c6d7e8f9a0b1c",
"name": "reviewId",
"type": "string",
"value": "={{ $json.reviewId }}"
}
]
}
},
"typeVersion": 3.4,
"continueOnFail": true
},
{
"id": "7d3e47c7-bd46-472b-b616-09b05b5c8c6c",
"name": "Generate AI Response",
"type": "n8n-nodes-base.aiTransform",
"position": [
1456,
256
],
"parameters": {
"instructions": "Analyze the review and generate a professional response. The review is:\n\nSource: {{ $json.source }}\nRating: {{ $json.rating }}/5\nReviewer: {{ $json.reviewerName }}\nReview: {{ $json.reviewText }}\n\nGenerate a response that is {{ $('Business Configuration').item.json.responseTone }}. If the rating is 3 or below, acknowledge their concerns and offer to make things right. If 4-5 stars, thank them warmly. Keep responses under 150 words."
},
"typeVersion": 1,
"continueOnFail": true
},
{
"id": "1f5d176c-0fed-4690-8df2-ab217b4accd5",
"name": "Negative Review?",
"type": "n8n-nodes-base.if",
"position": [
1680,
256
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "a9b0c1d2-e3f4-5a6b-7c8d-9e0f1a2b3c4d",
"operator": {
"type": "number",
"operation": "lte"
},
"leftValue": "={{ $json.rating }}",
"rightValue": 3
}
]
}
},
"typeVersion": 2.2
},
{
"id": "88e13071-e269-4028-bec5-1ca479e2e76b",
"name": "Alert Team - Negative",
"type": "n8n-nodes-base.httpRequest",
"position": [
1904,
160
],
"parameters": {
"url": "={{ $('Business Configuration').item.json.slackWebhookUrl }}",
"method": "POST",
"options": {},
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "text",
"value": "\ud83d\udea8 *Urgent: Negative Review Alert* \ud83d\udea8\n\n*Source:* {{ $json.source }}\n*Rating:* {{ $json.rating }}/5 \u2b50\n*Reviewer:* {{ $json.reviewerName }}\n*Review:* {{ $json.reviewText }}\n\n*Suggested Response:*\n{{ $json.output }}"
}
]
}
},
"typeVersion": 4.2,
"continueOnFail": true
},
{
"id": "ba523e1d-a9d6-482a-880f-65d8eb6514c2",
"name": "Notify Team - Positive",
"type": "n8n-nodes-base.httpRequest",
"position": [
1904,
352
],
"parameters": {
"url": "={{ $('Business Configuration').item.json.slackWebhookUrl }}",
"method": "POST",
"options": {},
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "text",
"value": "\u2728 *New Positive Review* \u2728\n\n*Source:* {{ $json.source }}\n*Rating:* {{ $json.rating }}/5 \u2b50\n*Reviewer:* {{ $json.reviewerName }}\n*Review:* {{ $json.reviewText }}\n\n*Suggested Response:*\n{{ $json.output }}"
}
]
}
},
"typeVersion": 4.2,
"continueOnFail": true
},
{
"id": "51678bc3-3bb1-42b9-87d1-ec2e81c0f233",
"name": "Log to Google Sheets",
"type": "n8n-nodes-base.googleSheets",
"position": [
2224,
272
],
"parameters": {
"columns": {
"value": {
"Date": "={{ new Date().toISOString() }}",
"Rating": "={{ $json.rating }}",
"Review": "={{ $json.reviewText }}",
"Source": "={{ $json.source }}",
"Reviewer": "={{ $json.reviewerName }}",
"Review ID": "={{ $json.reviewId }}",
"AI Response": "={{ $json.output }}"
},
"mappingMode": "defineBelow"
},
"options": {},
"operation": "append",
"sheetName": {
"mode": "name",
"value": "Reviews"
},
"documentId": {
"mode": "id",
"value": "={{ $env.GOOGLE_SHEET_ID }}"
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.6,
"continueOnFail": true
},
{
"id": "cb74c403-ffdb-4ff8-8d45-3afcfa38e70a",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
848,
-288
],
"parameters": {
"color": 4,
"width": 432,
"height": 432,
"content": "## Update these values in the Business Configuration node:\n\n- **businessName**: Your business name for personalized responses\n- **responseTone**: Customize AI response style (e.g., \"professional and friendly\", \"casual and warm\")\n- **slackWebhookUrl**: Your Slack webhook for notifications\n- **notificationEmail**: Email for urgent alerts\n\nAll sensitive data uses environment variables for security."
},
"typeVersion": 1
},
{
"id": "4a19971e-72ee-4e95-90de-457f12b3eb95",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
2064,
-96
],
"parameters": {
"color": 6,
"width": 464,
"height": 528,
"content": "### \ud83d\udcca Google Sheets Configuration\n\n**Required Sheet Name:** \"Reviews\"\n\n**Required Headers (Row 1):**\n- **Date** - Timestamp of review processing\n- **Source** - Always \"Google Business Profile\" \n- **Rating** - Star rating (1-5)\n- **Reviewer** - Customer display name\n- **Review** - Full review text\n- **AI Response** - Generated response suggestion\n- **Review ID** - Unique Google review identifier\n\n**\ud83d\udd17 Service Account Permissions:**\n\nGrant \"Editor\" access to your Google Sheets service account"
},
"typeVersion": 1
},
{
"id": "650e2141-568a-46ba-9653-cce123d8eac5",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
176,
-416
],
"parameters": {
"width": 448,
"height": 736,
"content": "**\ud83d\udee0\ufe0f Google Business Review Monitor Setup Guide**\n\nThis workflow automatically monitors your Google Business Profile for new reviews and generates AI-powered response suggestions.\n\n\u2705 **Step 1: Connect Google Business Profile API**\n- Create Google Cloud project and enable Business Profile API\n- Set up service account credentials \n- Note your Business Account ID and Location ID\n- Set environment variables: GOOGLE_BUSINESS_ACCOUNT_ID, GOOGLE_BUSINESS_LOCATION_ID\n\n\u2705 **Step 2: Setup Google Sheets Integration**\n- Create Google Sheet with \"Reviews\" sheet\n- Add headers: Date, Source, Rating, Reviewer, Review, AI Response, Review ID\n- Set environment variable: GOOGLE_SHEET_ID\n- Ensure service account has edit access to the sheet\n\n\u2705 **Step 3: Configure Slack Notifications**\n- Create Slack webhook in your workspace\n- Set environment variable: SLACK_WEBHOOK_URL \n- Configure notification email: NOTIFICATION_EMAIL\n\n\u2705 **Step 4: Customize Business Settings**\n- Update Business Configuration node with your business name\n- Adjust response tone (professional, friendly, casual, etc.)\n- Test the AI response generation with sample review data\n\n**\ud83e\uddeaFinal Step: Test with Sample Data**\nTrigger manually to verify all integrations work properly"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "f2d68f67-a2df-4e49-9dc3-3e1a47394575",
"connections": {
"Negative Review?": {
"main": [
[
{
"node": "Alert Team - Negative",
"type": "main",
"index": 0
}
],
[
{
"node": "Notify Team - Positive",
"type": "main",
"index": 0
}
]
]
},
"Generate AI Response": {
"main": [
[
{
"node": "Negative Review?",
"type": "main",
"index": 0
}
]
]
},
"Alert Team - Negative": {
"main": [
[
{
"node": "Log to Google Sheets",
"type": "main",
"index": 0
}
]
]
},
"Format Google Reviews": {
"main": [
[
{
"node": "Generate AI Response",
"type": "main",
"index": 0
}
]
]
},
"Business Configuration": {
"main": [
[
{
"node": "Format Google Reviews",
"type": "main",
"index": 0
}
]
]
},
"Monitor Google Reviews": {
"main": [
[
{
"node": "Business Configuration",
"type": "main",
"index": 0
}
]
]
},
"Notify Team - Positive": {
"main": [
[
{
"node": "Log to Google Sheets",
"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.
googleApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow automatically monitors your Google Business Profile for new reviews and uses AI to generate personalized response suggestions. When a review is detected, the system formats the review data, generates an appropriate AI response based on the rating and content, sends…
Source: https://n8n.io/workflows/6590/ — 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.
Splitout Code. Uses manualTrigger, httpRequest, stickyNote, splitOut. Event-driven trigger; 46 nodes.
Automate CSV imports into HubSpot without the mess. Powered by n8n. Supercharged by Pollup AI.
Get notified if the actual data release is positive or negative for the relevant currency. Use the Telegram chat message about the news release as a trigger to open a trading position in MetaTrader 4.
Automatically processes new orders added to Google Sheets. Small orders are approved instantly; large orders trigger an HTML email with one-click Approve / Reject links — each handled by an independen
Submit any YouTube, Vimeo, or Zoom webinar URL using a simple form and the workflow handles everything from there. It runs a two-phase pipeline: first identifying the top viral moments in your video w