Automation

The n8n workflow that replaced three manual store operations.

I used to spend about 3 hours a day doing things that software now does in under 30 seconds. I'm not exaggerating, and I'm not talking about edge cases. I'm talking about the core operational loop of a live e-commerce store: process the order, route it to fulfilment, update the stock count, flag anything that looks wrong, respond to the CS message about where the order is.

I still do all of those things. I just don't do them by hand anymore. This is a detailed look at the three n8n workflows that changed that — what they do, how they're connected, and what I learned when they broke.

What I was doing by hand

Before I built these workflows, my daily operations looked like this: check new orders in Shopify, copy the relevant fields (product SKU, quantity, destination, customer contact) into a spreadsheet, email that spreadsheet to the fulfilment agent, wait for a tracking number, copy the tracking number back into the Shopify order, update the stock count manually, check the incoming CS messages, respond individually.

For five orders a day, this is annoying. For 30 orders a day across three stores, it's a full-time job. I was doing it myself, and it was eating the hours that should have gone into building the next thing.

Every hour you spend processing orders is an hour you're not spending on making the store better. The goal is to build systems that process orders without you.

Workflow 1: Order-to-fulfilment sync

This workflow triggers on every new Shopify order (via webhook). It extracts the order data, checks whether the product is handled by a domestic or international fulfilment partner (via a Supabase lookup table I maintain), formats the fulfilment instruction accordingly, and sends it to the right partner via their preferred channel — either a REST API, an email template, or a Google Sheets append (for older partners still using spreadsheets).

When the fulfilment partner ships the order and returns a tracking number (via webhook, email parsing, or periodic polling depending on the partner), the workflow catches it, looks up the original order, and updates Shopify with the tracking information. A customer notification goes out automatically.

The whole thing runs in under 10 seconds per order. Error cases (partner not found, fulfilment rejected, tracking format invalid) write to an error log in Supabase and send me a notification via Telegram. I review exceptions; the workflow handles everything else.

Workflow 2: CS ticket routing and prioritisation

Customer messages arrive from multiple channels: email, Instagram DMs, the website contact form, and occasionally WhatsApp. Before this workflow, I was checking all of them manually and maintaining no visibility across the channels.

The routing workflow polls each channel on a schedule (or catches webhooks where they're available), extracts the message and sender details, and runs a simple classification using the Claude API: is this an order status enquiry, a return request, a product question, a complaint, or something else? Each category gets a priority score.

High-priority tickets (complaints, return requests with order reference, anything containing "refund") are written to a priority queue in Supabase and I get an immediate Telegram notification. Standard tickets go into the regular queue. For order status enquiries where the tracking information is available, the workflow generates and sends a canned reply automatically — no human needed.

I've measured this: roughly 40% of incoming CS messages are now resolved without any manual involvement. The ones that need a human get to me faster because I have context before I open the thread.

Workflow 3: Stock monitoring and reorder alerts

This is the simplest of the three but arguably the most valuable. The workflow runs every 4 hours, pulls current stock levels from all stores, and compares them against a minimum threshold I've set per SKU in Supabase. If anything is below threshold, it creates a draft reorder request (pre-filled with the supplier details and the quantity I've specified) and sends me a notification.

I approve the reorder with one tap. The workflow sends it. I'm not doing data entry.

It also runs a daily summary at 8am: total stock value across all stores, which SKUs sold out in the past 24 hours, which are approaching threshold. 90 seconds to read, compared to 30 minutes of manual checking.

The architecture overview

All three workflows share the same backbone:

  • n8n (self-hosted on a VPS) as the orchestration layer — all the workflow logic lives here.
  • Supabase as the operational database — order records, stock levels, CS ticket queue, error logs, reorder thresholds, all of it.
  • Claude API for the CS classification step — a simple prompt, a structured output, costs fractions of a cent per ticket.
  • Telegram bot for all notifications to me — I don't check dashboards unless I want to. The system tells me when something needs attention.

What broke first — and how I fixed it

The most common failure mode was the webhook reliability problem. Shopify webhooks don't come with guaranteed delivery — if my n8n instance was unreachable when an order came in, the webhook was missed and the order wasn't processed automatically.

The fix was a fallback polling mechanism: every 15 minutes, the workflow checks Shopify for any orders created in the last hour that don't appear in the Supabase order log. If it finds any, it processes them. This catches webhook misses without any manual intervention.

The second common failure: the CS classification sometimes puts a message in the wrong category. Instead of trying to make the classification perfect, I added a human-in-the-loop step for anything with a confidence score below 0.85. Those messages land in a "needs review" queue before any automated action is taken.

What it replaced in practice

Honest numbers, for one store doing roughly 30 orders a day:

  • Order routing: from ~45 min/day to ~3 min/day (reviewing exceptions only)
  • CS management: from ~60 min/day to ~20 min/day (complex tickets only)
  • Stock monitoring: from ~30 min/day to ~5 min/day (reviewing the morning summary)

That's roughly 1.7 hours per day, per store, recovered. Across the portfolio, the number gets uncomfortable to say out loud. But the real value isn't just the time — it's that these things happen reliably now, not when I remember to do them.

S

Shijil Kumar

CS engineer and operator running 14+ digital properties. Writes about the systems that make it work — and the ones that almost didn't.

Read more about me →

Get the next field note in your inbox.

Honest writing on e‑commerce operations, AI automation, and the solo operator economy. No filler, no frequency promises.