This workflow corresponds to n8n.io template #12872 — we link there as the canonical source.
This workflow follows the Gmail → Google Sheets 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": "FLjJvDCXaYDzkmXk",
"name": "Retail \u2013 New Product Drop Notifications",
"tags": [],
"nodes": [
{
"id": "fd3f411c-f5b9-42ea-809b-9824ab16a07c",
"name": "WooCommerce \u2013 New Product Created",
"type": "n8n-nodes-base.wooCommerceTrigger",
"position": [
384,
352
],
"parameters": {
"event": "product.created"
},
"credentials": {
"wooCommerceApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "7f515193-cbd0-4a76-8a04-7f32f73610da",
"name": "Format Product Details",
"type": "n8n-nodes-base.set",
"position": [
592,
352
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "499d039d-9fad-4f59-8eb3-a0b3010f234d",
"name": "body.name",
"type": "string",
"value": "={{ $json.body.name }}"
},
{
"id": "1cca1c31-a42e-4e71-b9ef-a8e18d0ca763",
"name": "body.status",
"type": "string",
"value": "={{ $json.body.status }}"
},
{
"id": "f0b852e3-82cd-4495-9cb3-5884148c766e",
"name": "body.price",
"type": "string",
"value": "={{ $json.body.price }}"
},
{
"id": "e7b9c164-c89f-4e6e-bc6a-214d50ecf5d3",
"name": "body.permalink",
"type": "string",
"value": "={{ $json.body.permalink }}"
},
{
"id": "8f5c70bf-961c-4561-b3cd-73954a36fa6c",
"name": "body.images",
"type": "array",
"value": "={{ $json.body.images }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "67cb14fa-7f77-40d8-9c77-a9e0eae1a6ef",
"name": "Notify Team on Slack",
"type": "n8n-nodes-base.slack",
"position": [
832,
352
],
"parameters": {
"text": "=New Product Live!\nName: {{ $json.body.name }}\nPrice: {{ $json.body.price }}\nURL: {{ $json.body.permalink }}\nImages:\n{{ $json.body.images.map(i => i.src).join('\\n') }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": ""
},
"otherOptions": {}
},
"credentials": {
"slackApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.3
},
{
"id": "a4203358-3d38-4f86-b4d7-851310d74d73",
"name": "Send Product Launch Email",
"type": "n8n-nodes-base.gmail",
"position": [
1056,
352
],
"parameters": {
"message": "=<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"UTF-8\" />\n <title>New Product Arrival</title>\n</head>\n\n<body style=\"font-family: Arial, Helvetica, sans-serif; background-color:#f6f6f6; padding:20px;\">\n\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" style=\"max-width:600px; margin:auto; background:#ffffff; border-radius:6px;\">\n <tr>\n <td style=\"padding:20px;\">\n\n <h2 style=\"margin-top:0; color:#333;\">\n New Product Live!\n </h2>\n\n <p style=\"font-size:14px; color:#555;\">\n A new product has just been published and is now available.\n </p>\n\n <table width=\"100%\" cellpadding=\"8\" cellspacing=\"0\" style=\"border-collapse:collapse; margin-top:15px;\">\n <tr>\n <td style=\"font-weight:bold; width:140px;\">Product Name:</td>\n <td>{{ $('Format Product Details').item.json.body.name }}</td>\n </tr>\n\n <tr>\n <td style=\"font-weight:bold;\">Price:</td>\n <td>{{ $('Format Product Details').item.json.body.price }}</td>\n </tr>\n\n <tr>\n <td style=\"font-weight:bold;\">Status:</td>\n <td><{{ $('Format Product Details').item.json.body.status }}/td>\n </tr>\n\n <tr>\n <td style=\"font-weight:bold;\">Product URL:</td>\n <td>\n <a href=\"{{ $('Format Product Details').item.json.body.permalink }}\" target=\"_blank\">\n View Product\n </a>\n </td>\n </tr>\n </table>\n\n <h3 style=\"margin-top:25px; color:#333;\">Product Images</h3>\n\n <!-- Render ALL images -->\n {{ $('Format Product Details').item.json.body.images.map(img => `\n <div style=\"margin-bottom:15px;\">\n <img \n src=\"${img.src}\" \n alt=\"Product Image\" \n style=\"max-width:100%; border-radius:4px;\" />\n </div>\n `).join('') }}\n\n <hr style=\"margin:25px 0; border:none; border-top:1px solid #eee;\" />\n\n <p style=\"font-size:12px; color:#999;\">\n This is an automated notification from your product system.\n </p>\n\n </td>\n </tr>\n </table>\n\n</body>\n</html>",
"options": {},
"subject": "=New Arrival: {{ $('Format Product Details').item.json.body.name }}"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "b10d432d-b850-4540-a00f-878cfe102a3f",
"name": "Log Product in Google Sheets",
"type": "n8n-nodes-base.googleSheets",
"position": [
1312,
352
],
"parameters": {
"columns": {
"value": {
"Price": "={{ $('Format Product Details').item.json.body.price }}",
"Status": "={{ $('Format Product Details').item.json.body.status }}",
"Image URL": "={{ $('Format Product Details').item.json.body.images?.map(i => i.src).join('\\n') }}",
"Created At": "= {{ $now }}",
"Product URL": "={{ $('Format Product Details').item.json.body.permalink }}",
"Product Name": "={{ $('Format Product Details').item.json.body.name }}"
},
"schema": [
{
"id": "Product Name",
"type": "string",
"display": true,
"required": false,
"displayName": "Product Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Price",
"type": "string",
"display": true,
"required": false,
"displayName": "Price",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "string",
"display": true,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Product URL",
"type": "string",
"display": true,
"required": false,
"displayName": "Product URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Image URL",
"type": "string",
"display": true,
"required": false,
"displayName": "Image URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Created At",
"type": "string",
"display": true,
"required": false,
"displayName": "Created At",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/16f1RrNM-e_AEUGHApNXnUDxGb_xPSxxZlvtcLowbeg0/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "16f1RrNM-e_AEUGHApNXnUDxGb_xPSxxZlvtcLowbeg0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/16f1RrNM-e_AEUGHApNXnUDxGb_xPSxxZlvtcLowbeg0/edit?usp=drivesdk",
"cachedResultName": "(Retail) New Product Drop Notifications"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "335693ad-bc49-414f-9ed0-f762bd4cf6e5",
"name": "Workflow Overview",
"type": "n8n-nodes-base.stickyNote",
"position": [
-320,
160
],
"parameters": {
"color": null,
"width": 628,
"height": 436,
"content": "## Retail \u2013 New Product Drop Notifications\n\n### Purpose\nAutomatically notify teams and log records when a new product is created in WooCommerce, ensuring consistent communication without manual effort.\n\n### How It Works\nThe workflow uses the WooCommerce Trigger to detect newly created products. Product details such as name, price, status, permalink and images are prepared in a single Set node and reused to send Slack notifications, email alerts and log entries in Google Sheets.\n\n### Setup Steps\n1. Configure WooCommerce REST API credentials.\n2. Connect Slack, Gmail and Google Sheets in n8n.\n3. Review the **Format Product Details** node to adjust fields if needed.\n4. Activate the workflow to start processing new products.\n"
},
"typeVersion": 1
},
{
"id": "3759deb5-221f-4e00-bc91-0c206c1087a1",
"name": "Trigger & Data Prep",
"type": "n8n-nodes-base.stickyNote",
"position": [
336,
192
],
"parameters": {
"color": 7,
"width": 412,
"height": 356,
"content": "### Trigger & Data Preparation\nDetects newly created products in WooCommerce using the WooCommerce Trigger and prepares a standardized product data object in the Set node for reuse across the workflow.\n"
},
"typeVersion": 1
},
{
"id": "8537cb43-8556-44d9-8597-31594f28f74e",
"name": "Notifications",
"type": "n8n-nodes-base.stickyNote",
"position": [
784,
192
],
"parameters": {
"color": 7,
"width": 412,
"height": 356,
"content": "### Notifications\nSends Slack and email notifications to announce new product creations using the prepared product data.\n"
},
"typeVersion": 1
},
{
"id": "8e4eeab1-dc43-46a5-862f-fae7a0675ca6",
"name": "Logging",
"type": "n8n-nodes-base.stickyNote",
"position": [
1232,
192
],
"parameters": {
"color": 7,
"width": 348,
"height": 356,
"content": "### Logging\nStores product details and creation timestamps in Google Sheets for tracking and reference.\n"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "2816d66f-e018-4509-ade3-7955e70c182d",
"connections": {
"Notify Team on Slack": {
"main": [
[
{
"node": "Send Product Launch Email",
"type": "main",
"index": 0
}
]
]
},
"Format Product Details": {
"main": [
[
{
"node": "Notify Team on Slack",
"type": "main",
"index": 0
}
]
]
},
"Send Product Launch Email": {
"main": [
[
{
"node": "Log Product in Google Sheets",
"type": "main",
"index": 0
}
]
]
},
"WooCommerce \u2013 New Product Created": {
"main": [
[
{
"node": "Format Product Details",
"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.
gmailOAuth2googleSheetsOAuth2ApislackApiwooCommerceApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow automatically detects when a new product is created in WooCommerce and instantly notifies internal teams through Slack and email. At the same time, it logs all product details into Google Sheets for tracking and reporting. A centralized data formatting step ensures…
Source: https://n8n.io/workflows/12872/ — 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.
This workflow automatically detects bounced or invalid email addresses from your Gmail inbox and updates their status in Google Sheets. It fetches bounce notifications, extracts failed email addresses
📘 Description
This workflow automates the tracking and follow-up process for pending payments. It pulls lead payment data from Google Sheets, checks whether the status is “Open,” and then routes actions accordingly
How it works Receives form submissions via a webhook endpoint. Extracts the name, email, and message from each submission. Logs every submission to a Google Sheets spreadsheet with a timestamp. Sends
Transform your Google Form into an intelligent customer support system that automatically analyzes, prioritizes, and responds to every inquiry with AI-powered personalization.