5 n8n Automations Every WooCommerce Store Needs (Save 10+ Hours/Week) This article presents five n8n automation workflows designed to save WooCommerce store owners over 10 hours per week by eliminating repetitive administrative tasks. The first two detailed workflows include an automated low stock alert system that checks inventory hourly and sends Slack and email notifications, and an order logger that automatically records new orders to Google Sheets and posts real-time Slack notifications to the team. 5 n8n Automations Every WooCommerce Store Needs Save 10+ Hours/Week Running a WooCommerce store means drowning in repetitive tasks: checking inventory, logging orders to spreadsheets, chasing abandoned carts, sending follow-up emails, compiling daily sales reports. Most store owners spend hours each week on work that should be automatic. This guide shows you 5 n8n workflows that eliminate the most time-consuming WooCommerce admin tasks — with full workflow JSON you can import and use today. Setup: Connect WooCommerce to n8n 5 minutes - In your WordPress admin, go to WooCommerce → Settings → Advanced → REST API - Click Add key → set description "n8n", user admin , permissions Read/Write - Copy the Consumer Key and Consumer Secret - In n8n, create a WooCommerce credential : add your store URL + those keys That's it. All 5 workflows below use this credential. Workflow 1: Low Stock Alert → Slack + Email The problem: You run out of stock without knowing, losing sales. WooCommerce's built-in alerts are easy to miss. What this does: Every hour, checks all products with stock below your threshold and sends a Slack message + email listing which products need restocking — with current stock count and a direct admin link. Workflow 6 nodes : { "name": "WooCommerce Low Stock Alert", "nodes": { "name": "Every Hour", "type": "n8n-nodes-base.scheduleTrigger", "parameters": { "rule": { "interval": { "field": "hours", "hoursInterval": 1 } } }, "position": 250, 300 }, { "name": "Get Products", "type": "n8n-nodes-base.wooCommerce", "parameters": { "resource": "product", "operation": "getAll", "returnAll": true, "filters": { "stock status": "instock", "manage stock": true } }, "position": 450, 300 }, { "name": "Filter Low Stock", "type": "n8n-nodes-base.code", "parameters": { "jsCode": "const LOW STOCK THRESHOLD = 5;\nconst lowStock = items.filter item = {\n const stock = item.json.stock quantity;\n return stock == null && stock <= LOW STOCK THRESHOLD;\n} ;\nif lowStock.length === 0 return ;\nconst report = lowStock.map p = \n • ${p.json.name} — ${p.json.stock quantity} left ${process.env.WP URL}/wp-admin/post.php?post=${p.json.id}&action=edit \n .join '\\n' ;\nreturn { json: { report, count: lowStock.length } } ;" }, "position": 650, 300 }, { "name": "IF Has Low Stock", "type": "n8n-nodes-base.if", "parameters": { "conditions": { "number": { "value1": "={{$json.count}}", "operation": "larger", "value2": 0 } } }, "position": 850, 300 }, { "name": "Slack Alert", "type": "n8n-nodes-base.slack", "parameters": { "channel": " inventory-alerts", "text": "⚠️ Low stock alert {{$json.count}} products :\n\n{{$json.report}}" }, "position": 1050, 200 }, { "name": "Email Alert", "type": "n8n-nodes-base.gmail", "parameters": { "toEmail": "store@yourdomain.com", "subject": "⚠️ WooCommerce Low Stock Alert — {{$json.count}} products", "message": "The following products are running low:\n\n{{$json.report}}" }, "position": 1050, 400 } } Customise: Change LOW STOCK THRESHOLD to any number. Add a Google Sheets log node to track restock history. Workflow 2: New Order → Google Sheets Log + Slack Notification The problem: Your order data lives in WooCommerce only. You can't easily analyse trends, share data with your team, or build custom reports without exporting manually. What this does: Every new WooCommerce order automatically gets logged to a Google Sheets master order table AND posts a Slack notification — so your team knows about every sale in real time. Workflow 4 nodes : { "name": "WooCommerce Order Logger", "nodes": { "name": "WooCommerce Webhook", "type": "n8n-nodes-base.wooCommerceTrigger", "parameters": { "event": "order.created" }, "position": 250, 300 }, { "name": "Format Order", "type": "n8n-nodes-base.code", "parameters": { "jsCode": "const order = items 0 .json;\nconst customer = ${order.billing.first name} ${order.billing.last name} ;\nconst items list = order.line items.map i = ${i.name} x${i.quantity} .join ', ' ;\nreturn {\n json: {\n order id: order.id,\n date: order.date created,\n customer,\n email: order.billing.email,\n total: order.total,\n items: items list,\n status: order.status,\n payment: order.payment method title\n }\n} ;" }, "position": 450, 300 }, { "name": "Log to Sheets", "type": "n8n-nodes-base.googleSheets", "parameters": { "operation": "appendOrUpdate", "sheetId": "YOUR SHEET ID", "range": "Orders A:I", "values": { "Order ID": "={{$json.order id}}", "Date": "={{$json.date}}", "Customer": "={{$json.customer}}", "Email": "={{$json.email}}", "Total": "={{$json.total}}", "Items": "={{$json.items}}", "Status": "={{$json.status}}", "Payment": "={{$json.payment}}" } }, "position": 650, 200 }, { "name": "Slack Notification", "type": "n8n-nodes-base.slack", "parameters": { "channel": " sales", "text": "🛒 New order {{$json.order id}} — {{$json.customer}} — ${{$json.total}}\n{{$json.items}}" }, "position": 650, 400 } } Customise: Replace the WooCommerce Trigger with a Schedule Trigger that polls every 15 min if webhooks are hard to set up on your host. Add a Discord node instead of Slack. Workflow 3: Abandoned Cart Recovery Email The problem: 70%+ of WooCommerce carts are abandoned. The built-in recovery email only in WooCommerce Pro costs $199/year. n8n does the same thing free. What this does: Every 30 minutes, checks for carts abandoned in the last 1 hour and sends a personalised recovery email with the exact items left behind and a direct checkout link. Workflow 5 nodes : { "name": "Abandoned Cart Recovery", "nodes": { "name": "Every 30 Min", "type": "n8n-nodes-base.scheduleTrigger", "parameters": { "rule": { "interval": { "field": "minutes", "minutesInterval": 30 } } }, "position": 250, 300 }, { "name": "Get Pending Orders 1h ", "type": "n8n-nodes-base.wooCommerce", "parameters": { "resource": "order", "operation": "getAll", "returnAll": false, "limit": 50, "filters": { "status": "pending", "after": "={{ DateTime.now .minus {hours:2} .toISO }}", "before": "={{ DateTime.now .minus {hours:1} .toISO }}" } }, "position": 450, 300 }, { "name": "Build Recovery Email", "type": "n8n-nodes-base.code", "parameters": { "jsCode": "return items.map item = {\n const order = item.json;\n const cartItems = order.line items.map i = \n