Shopify back in stock email notification with n8n (Gmail + Google Sheets)

TL;DR: This guide shows how to build a Shopify back in stock email notification with n8n using Google Sheets and Gmail. Shoppers join a waitlist when a product sells out, n8n checks Shopify inventory on a schedule, and the moment stock returns it emails everyone who asked, then marks them as notified so nobody gets a duplicate. No paid back-in-stock app, no monthly subscription, full control over the timing and the message.

What it does

When a popular product sells out, you lose the warmest buyers you will ever have: people who showed up ready to pay and found an empty button. Most stores hand that moment to a third-party app that charges per email or per subscriber. This workflow keeps the whole thing inside n8n.

A small form on your product page collects the shopper’s email and the variant they want. That row lands in a Google Sheet that acts as your waitlist. On a schedule you control, n8n asks the Shopify Admin API for the current inventory level of each waitlisted variant. As soon as a variant goes from zero to in stock, n8n sends a personal Gmail message to every shopper waiting on it, with a direct link back to the product. It then stamps that row as notified so the next run skips it.

The result is a back-in-stock flow that runs for the price of an n8n instance you already own, with messaging you write yourself rather than a template you rent.

Why it beats the default

The default answer for Shopify stores is a restock app from the App Store. Those apps work, but they price on volume. A store with a few thousand waitlist signups a month can pay 30 to 100 dollars monthly for something that sends a templated email. You also hand over your customer list to another vendor and accept whatever sending domain and design they allow.

Running it in n8n flips that. Gmail sends from your own address, so the email lands with your name on it and your reply-to. You decide the schedule, so a flash restock can trigger a check every fifteen minutes while a slow mover checks twice a day. You can branch the logic later, for example sending a different message to customers who waited more than a week, without asking an app vendor to add a feature. And because the waitlist sits in a Google Sheet, your team can read it, sort it, and export it whenever they want.

For a fuller picture of where this sits among store automations, the n8n Shopify automation hub maps out the other flows that pair well with a restock notifier.

What you need

You need a running n8n instance, either cloud or self-hosted. You need a Shopify store with Admin API access, which means a custom app with the read_products and read_inventory scopes. You need a Google account for the waitlist sheet and a Gmail account to send from. That is the entire stack, and every piece of it is on the free or near-free end.

On the Shopify side, create a custom app under Settings, then Apps and sales channels, then Develop apps. Give it the two read scopes above and install it to generate an Admin API access token. On the Google side, one sheet with a few columns is enough to start.

Node by node

The workflow uses eight nodes. The Webhook node receives signups from your product-page form and writes nothing on its own. The Google Sheets append node stores each signup as a new waitlist row. The Schedule Trigger fires the checking half of the workflow on your chosen interval. The Google Sheets read node pulls every row still marked as waiting. The Shopify node, or an HTTP Request node hitting the Admin API, returns the current inventory quantity for each variant. The IF node compares that quantity against zero and keeps only the variants that are back in stock. The Gmail node sends the notification to the matching shopper. The final Google Sheets update node writes the notified flag and a timestamp back to the row.

Step by step build

  1. Create a new workflow in n8n and add a Webhook node set to POST. Copy its production URL and point your product-page back-in-stock form at it. Pass three fields: email, variant ID, and product handle.
  2. Add a Google Sheets node in append mode. Map the incoming email, variant ID, and product handle into columns, add a status column with the value waiting, and a date column with the current timestamp. This branch is now your signup capture.
  3. Start the second branch with a Schedule Trigger. Set it to every fifteen minutes for fast-moving stock, or every few hours if your restocks are planned. Both branches live in the same workflow but run independently.
  4. Add a Google Sheets read node that returns only rows where status equals waiting. Use a filter so you never re-process a customer who was already emailed.
  5. Add a Shopify node, or an HTTP Request node calling GET /admin/api/2024-04/variants/{variant_id}.json with your Admin token. Read the inventory quantity for each waiting row.
  6. Add an IF node that checks whether inventory quantity is greater than zero. Send the true output onward and let the false output end quietly so out-of-stock items stay on the list.
  7. Add a Gmail node on the true branch. Write a short subject like “It is back: {{product name}}” and a body with a direct link to the product page so the shopper can buy in one tap.
  8. Finish with a Google Sheets update node that sets status to notified and records the send time on that row. Save, activate, and test with a real out-of-stock variant you can restock by hand.

Common mistakes

The most common mistake is forgetting to mark rows as notified, which sends the same shopper an email on every single run until they unsubscribe out of annoyance. The update node at the end is not optional. A second mistake is checking inventory too aggressively. Shopify rate-limits the Admin API, so a one-minute schedule across thousands of variants will start returning errors; fifteen minutes is plenty for almost every store.

People also forget that a variant can flicker between one and zero as orders come in. Adding a small threshold, for example only notifying when quantity is at least two, avoids waking your waitlist for a single unit that sells again before they click. Finally, watch your Gmail sending limits. A free Gmail account caps around 500 messages a day, so a large restock should batch across the day or move to a Google Workspace account.

Cost at realistic volume

Assume a store that collects 1,000 waitlist signups a month and restocks often enough to send most of them. Self-hosted n8n on a small VPS runs about 5 to 7 dollars a month and carries this workflow without noticing. Google Sheets is free at this scale. Gmail is free up to its daily limit, or 6 dollars a month on Workspace if you want a higher cap and your own domain. So the realistic monthly cost sits between roughly 5 and 13 dollars, flat, no matter how many signups you collect. A volume-priced restock app at the same 1,000 signups would commonly land in the 30 to 80 dollar range, and it climbs as you grow while this does not.

Ready to import template

You can build this from the steps above, or skip straight to a working version. The ready-to-import JSON template, plus a setup guide and a credentials guide, is available on the downloads page. Import it, paste in your Shopify token and Google credentials, and you are live in a few minutes.

If you would rather have it installed and tested for you on your own n8n instance, the done-for-you setup service handles the Shopify app, the credentials, and the go-live so you can stay focused on selling.

FAQ

Do I need a paid Shopify plan for this?

No. Custom apps with Admin API access are available on every standard Shopify plan, including the entry tier. You only need the read_products and read_inventory scopes, both of which are read-only and safe. The workflow never writes to your store, it only reads inventory and sends email.

Where does the customer’s email come from?

From a small form you place on the product page that appears when a variant is sold out. That form posts the email and variant to the n8n Webhook node. You can build it with a few lines of HTML, a theme app block, or any form tool that can send a POST request to a URL.

Will shoppers get duplicate emails?

Not if you keep the final update node. After a notification sends, that row is marked as notified and the next scheduled run filters it out. Duplicates only happen when the update step is removed or misconfigured, so test it once with a real restock before going live.

Can I use Outlook or SMTP instead of Gmail?

Yes. n8n has native nodes for Outlook and generic SMTP, so you can swap the Gmail node for either one and map the same fields. The rest of the workflow stays identical. Choose whichever sending account has the daily limit and deliverability that fit your store’s volume.

How fast will customers hear about a restock?

As fast as your schedule. A fifteen-minute trigger means the longest anyone waits after stock returns is fifteen minutes, which is quick enough to catch most flash restocks. Tighten it for hype drops or loosen it for planned restocks to stay well inside Shopify’s API limits.

Related guides

Pair this with the Shopify low stock alert so you get warned before products run out, and the Shopify new customer welcome email to greet the buyers this flow brings back. Browse the full Shopify automation category for more store-ready templates.

WooCommerce to n8n migration guide: move your store automations into one stack

TL;DR: This WooCommerce to n8n migration guide shows you how to move your store automations off a pile of plugins and paid Zapier zaps and into one self-hosted n8n instance. You will connect WooCommerce to n8n, rebuild the core flows (order alerts, low stock warnings, welcome emails, and an abandoned checkout nudge), and end up with a single dashboard that runs every automation for a flat hosting cost instead of per-task pricing.

Most WooCommerce stores do not start with an automation strategy. They start with a problem, install a plugin, and repeat. A year later the average store is running three review plugins, a couple of Zapier zaps, a Mailchimp connector, and a follow-up email tool, each billed separately and none of them talking to each other. Moving all of that into n8n gives you one place to see what runs, what failed, and what it costs. This guide walks through the migration without taking your store offline.

What this migration actually does

A migration to n8n is not a replatform. Your WooCommerce store stays exactly where it is. What changes is where the logic lives. Instead of a dozen plugins each reacting to an order in their own way, n8n becomes the central hub that listens to your store and fans actions out to Gmail, Google Sheets, Slack, Telegram, or any API you already pay for.

The pattern is simple. WooCommerce emits an event such as a new order, a status change, or a low stock signal. n8n catches that event through a webhook or a scheduled poll, runs whatever steps you define, and sends the result wherever it needs to go. Once that pipe is open, every automation you used to rent becomes a workflow you own.

Why it beats the default plugin stack

The default WooCommerce setup spreads your automation logic across tools that never share data. Your review plugin does not know the customer already got a welcome email. Your Zapier zap does not know stock is low. When something breaks, you check four dashboards to find out which one failed.

n8n collapses that into a single execution log. You see every run, the exact data that passed through each node, and the precise step that errored. Pricing also stops scaling against you. Zapier and most WooCommerce automation plugins charge per task or per contact, so your bill grows with your order volume. A self-hosted n8n instance runs on a small VPS for a fixed monthly cost no matter how many orders flow through it. For a store doing a few thousand orders a month, that difference adds up fast.

There is one honest trade-off. n8n asks more of you up front. You build the flows yourself instead of clicking a template, and you maintain the server. If you would rather skip that part, the migration still pays off because the running cost afterward is far lower, and you can have someone set it up once.

What you need before you start

You need a running WooCommerce store on WordPress with admin access, an n8n instance (self-hosted on a VPS or n8n Cloud), and admin rights to generate WooCommerce REST API keys. For the example flows you will also want a Gmail account for transactional email, a Google Sheets file for logging, and a Slack or Telegram channel for internal alerts. None of those are mandatory for the connection itself, but they cover the automations most stores want first.

If you are self-hosting, make sure your n8n instance is reachable over HTTPS. WooCommerce webhooks will not deliver to an insecure or unreachable URL, and a valid certificate saves you a long debugging session later.

Node-by-node overview

The starter migration workflow uses a short, readable chain of nodes. A WooCommerce Trigger node listens for the order.created event and fires the moment a customer checks out. A Set node trims the heavy WooCommerce payload down to the fields you actually use, such as order number, total, customer name, email, and line items. An IF node branches on order value so high tickets can take a different path. A Gmail node sends the customer a branded confirmation. A Google Sheets node appends the order to a running log. A Slack or Telegram node drops an internal heads-up to your team. Every node after the trigger is optional, so you migrate one automation at a time rather than all at once.

Step-by-step build

  1. In WooCommerce, go to Settings, Advanced, REST API and create a new key with read and write permissions. Copy the consumer key and secret somewhere safe, because the secret is shown only once.
  2. In n8n, open Credentials, add a new WooCommerce API credential, and paste the consumer key, consumer secret, and your store URL. Save and run the built-in connection test to confirm n8n can reach the store.
  3. Create a new workflow and add a WooCommerce Trigger node. Select the order.created event. n8n will register a webhook inside WooCommerce automatically, so you do not have to configure one by hand.
  4. Place a test order on your store, or use an existing order in the trigger’s listen mode, so n8n captures a real payload. Working from real data beats guessing at field names.
  5. Add a Set node and map only the fields you need. Pull order number, total, currency, billing first name, billing email, and a joined list of product names. This keeps later nodes clean.
  6. Add an IF node that checks whether the order total is above your VIP threshold. The true branch can route to a priority alert, while the false branch follows the standard path.
  7. Add a Gmail node on the main path. Compose the confirmation email using expressions to insert the customer name, order number, and items. Send it from your store’s support address.
  8. Add a Google Sheets node set to append a row. Map each field to a column so you build a live order ledger you can sort and filter without opening WooCommerce.
  9. Add a Slack or Telegram node that posts a one-line summary to your team channel, for example the order number, total, and customer name.
  10. Activate the workflow. Place one more real order and confirm the email arrives, the row appears, and the alert fires. Once it does, retire the matching Zapier zap or plugin so you are not running two systems against the same event.

Repeat that last step for every automation you migrate. Move one flow, verify it, switch off the old version, then move the next. A staged migration like this never leaves a gap where orders go unnoticed.

Common mistakes to avoid

The first mistake is migrating everything in one weekend. Move flows one at a time and keep the old tool running until the n8n version proves itself on real orders. The second is leaving both systems active, which sends customers two welcome emails and doubles your alerts. Always switch off the old automation the moment the new one passes its test.

The third is forgetting that WooCommerce webhooks need a reachable HTTPS endpoint. If your trigger never fires, check the webhook status inside WooCommerce under Settings, Advanced, Webhooks before you touch anything in n8n. The fourth is passing the entire WooCommerce payload into every downstream node. It is large and slows reads, so trim it early with a Set node. The last is skipping error handling. Add an error workflow that pings your Telegram so a failed run tells you instead of going silent.

Cost at realistic volume

Take a store handling 3,000 orders a month with a welcome email, a review request, a low stock alert, and an order log. On Zapier those four automations across that volume push you into a paid tier well above 50 dollars a month, and the bill climbs as orders grow. A stack of premium WooCommerce plugins to cover the same ground often runs 15 to 30 dollars each per month.

A self-hosted n8n instance on a small VPS costs roughly 5 to 10 dollars a month and does not care whether you process 3,000 orders or 30,000. Gmail handles transactional volume on a standard Workspace plan, and Google Sheets is free. The migration usually pays for itself inside the first month, and the gap widens every time your order count goes up.

Ready-to-import template

You do not have to build the starter workflow from a blank canvas. Our ready-to-import migration template includes the WooCommerce trigger, the field-trimming Set node, the VIP branch, and the Gmail, Sheets, and Slack steps already wired together, plus a setup guide and a credentials guide that walks through every API key. Grab it from the downloads library and import the JSON straight into your n8n instance.

If you would rather have the whole migration handled for you, our team installs n8n on your server, moves your WooCommerce automations over, and hands you a documented stack. See the done-for-you setup service for what that covers.

Frequently asked questions

Will migrating to n8n take my WooCommerce store offline?

No. The migration only changes where your automation logic runs. WooCommerce stays exactly as it is, on the same hosting, with the same theme and checkout. n8n connects through the REST API and webhooks, so your storefront never goes down during the move.

Do I need to know how to code to migrate to n8n?

Not for the core flows. n8n is visual, and the WooCommerce, Gmail, and Sheets nodes are configured through forms. You will write small expressions to insert order details into emails, but those are short and well documented. Anything heavier can be handled by an imported template.

Can I keep some automations on Zapier during the migration?

Yes, and you should. The safest path is to run both systems in parallel for one automation at a time. Verify the n8n version on real orders, then switch the old zap off. Running them side by side briefly avoids any gap where an order slips through unhandled.

How do I stop customers getting duplicate emails?

Duplicates almost always come from leaving the old plugin or zap active after the n8n flow goes live. Migrate one automation, confirm it works, then immediately disable the matching old version. Keeping a short migration checklist of what you have switched off prevents overlap.

Does this work for a Shopify store too?

The same approach applies. n8n has a native Shopify trigger and Shopify nodes, so you swap the WooCommerce trigger for the Shopify one and keep the rest of the chain. The migration logic, staged cutover, and cost savings are identical for either platform.

Related guides

If you are building out your store automation stack, start with the n8n Shopify automation hub for the full set of store workflows. From there, the real-time order alert and low stock alert guides are the two most stores migrate first. Browse the rest under Shopify and e-commerce automation.







Shopify vs Zapier cost comparison: what store automation really costs in 2026

TL;DR: This Shopify vs Zapier cost comparison comes down to one thing: how each tool bills you. Zapier charges per task, so every action your store automation takes adds to the meter. n8n charges per execution, or nothing at all when you self-host. For a Shopify store running multi-step order automations, that difference can turn a $20 plan into a $300 invoice as your order count grows. Here are the real numbers at 150, 1,000 and 5,000 orders a month.

What this comparison actually measures

Most “Shopify vs Zapier” articles compare features. That misses the point for store owners, because both tools can fire on a new order, tag a customer, post to Slack, and add a row to Google Sheets. The features overlap. What does not overlap is the bill at the end of the month, and that bill is decided by your order volume and how many steps each automation runs.

So this is a cost comparison, not a feature beauty contest. We look at the two billing models side by side, run three realistic Shopify volume scenarios, and show where each tool stops making sense. If you run a store on Shopify (or WooCommerce) and you are deciding whether to automate with Zapier or with n8n, this is the math you need before you pick.

The billing models are not the same shape

Zapier counts tasks. A task is one successful action. Triggers are free, and helpers like Filter and Formatter are free, but every real action counts. So an order automation that posts a Telegram alert, writes to Google Sheets, sends a Gmail confirmation, and updates a HubSpot contact burns four tasks on a single order. Ten orders is forty tasks. A thousand orders is four thousand tasks.

n8n counts executions. One execution is a single run of your whole workflow, no matter how many steps it contains. That same four-step order automation costs exactly one execution per order. A thousand orders is a thousand executions. Add a fifth step, a sixth, a tenth, and the execution count does not move. Complexity is free.

And there is a third option that Zapier has no answer to. n8n is open source, so you can self-host the Community edition on your own server for the price of the server, with unlimited executions and no per-run charge at all. That is the real cost lever for a Shopify store, and it is why the gap widens as you grow.

What you get on each plan

Here is where the two tools sit in 2026. Zapier’s paid entry point is the Professional plan, billed at $19.99 a month on annual billing (or $29.99 month to month) for 750 tasks, with multi-step Zaps, webhooks, filters and paths unlocked. The Team plan is $103.50 a month for 2,000 tasks and multi-user access. The Free plan gives you 100 tasks and two-step Zaps only, which runs out almost immediately for a real store.

n8n Cloud starts at $24 a month for 2,500 executions on the Starter plan, and $60 a month for 10,000 executions on Pro. There is no free Cloud tier anymore. Self-hosting the Community edition is free of license cost and runs unlimited executions, so your only spend is the server, commonly $3 to $7 a month on a small VPS. The catch worth knowing on n8n Cloud: when you hit the execution cap, workflows stop until the next cycle, with no overage option.

Cost at realistic Shopify order volume

Pricing pages are abstract. Order counts are not. Below are three stores at different stages, each running automations a real Shopify operator would actually install. The Zapier figures assume the per-task model; the n8n figures assume per-execution on Cloud and a small server when self-hosted.

Monthly Shopify orders Automation stack Zapier (estimated) n8n Cloud n8n self-hosted
~150 One order workflow, 3 actions ~$20 (Professional) $24 (Starter) ~$5
~1,000 Order alert + daily sales report + low-stock check ~$100 to $150 $60 (Pro) ~$6
~5,000 Order alert + reporting + stock + customer sync ~$300 to $600+ $60 to $120 ~$12

Read the top row honestly: at 150 orders a month with a single simple automation, Zapier’s $20 Professional plan is actually a touch cheaper than n8n Cloud’s $24 Starter. If you only ever run one tiny automation, Zapier is fine and there is no reason to feel clever about avoiding it. Self-hosted n8n still wins on raw cost at $5, but you are taking on a server to save $15. For some people that trade is not worth it.

The picture flips fast in the second row. A growing store running a few automations blows past the 2,000-task Team plan, and Zapier pushes you into higher task tiers that commonly land between $100 and $150 a month at this volume. The same workload is roughly 1,750 executions on n8n, which sits comfortably on a $6 self-hosted server or a $60 Cloud plan. You are now paying somewhere between ten and twenty-five times more on Zapier for the same automations.

By the third row the comparison stops being close. Five thousand orders running a five-action automation is 25,000 tasks on Zapier, which lands in the several-hundred-dollars-a-month range. On a self-hosted n8n box the same volume is around 5,000 executions, unlimited and unmetered, for the cost of a slightly larger server. The store paying $12 and the store paying $400 are running the same automations.

The per-task trap that catches Shopify stores

The reason Zapier bills sneak up on store owners is that automation complexity and order volume multiply together. Every step you add to an order workflow does not cost you once, it costs you once per order, every month, forever. Add a step that tags VIP customers and you have added one task to every single order. At 3,000 orders a month that one helpful step is 3,000 extra tasks.

On n8n that same step is free, because the whole workflow is still one execution. This is the single biggest cost difference between the two tools for ecommerce, and it is invisible on the pricing page. You only feel it three months in, when your automations have grown and your task usage has quietly tripled.

A second trap is double counting across workflows. On Zapier, splitting one big automation into two cleaner Zaps can double your task usage for the same outcome. On n8n you can branch and split inside a single execution at no extra cost, so good workflow hygiene does not get punished.

When Zapier is still the right call

This is a cost comparison, not a campaign against Zapier, so here is the fair other side. Zapier is genuinely easier to start with. There is nothing to host, nothing to update, and its app directory is larger, so if you depend on a niche SaaS tool that n8n has no node for, Zapier may simply have the integration and n8n may not.

Zapier also makes sense when your volume is permanently low and your automations are permanently simple. A store doing 100 orders a month with one two-step Zap will never feel the per-task model bite. And if nobody on your team can manage a server or wants to, n8n Cloud removes that burden but gives up the self-hosted cost advantage that makes n8n compelling in the first place. Pick the tool that matches both your volume and your appetite for managing infrastructure, not the one with the lower sticker price on the landing page.

For most Shopify stores past the hobby stage, though, the math points one way. Once you are running more than one or two automations on more than a few hundred orders a month, self-hosted n8n is dramatically cheaper and the gap only grows. That is the whole case, and the pillar guide on n8n Shopify automation walks through the specific workflows worth running once you make the switch.

How to move a Shopify automation from Zapier to n8n

If the numbers above point you toward n8n, here is the migration path for a single order automation. You do not need to move everything at once. Start with your highest-volume Zap, because that is where the task savings are largest.

  1. List the steps in your existing Zap, in order. Note the trigger (usually “New Order in Shopify”) and each action it takes, such as posting to Slack or writing to Google Sheets.
  2. Install n8n. Self-host the Community edition on a small VPS for unlimited executions, or spin up an n8n Cloud trial if you would rather not manage a server yet.
  3. Add a Shopify Trigger node and connect it to your store using a private app access token. This replaces the Zapier trigger and costs nothing per run.
  4. Rebuild each Zapier action as an n8n node: a Slack or Telegram node for alerts, a Google Sheets node for logging, a Gmail node for confirmation emails. Map the order fields from the trigger output into each node.
  5. Run the workflow once with a test order and confirm every downstream node fires. Because failed and test runs do not count against your limit, you can iterate freely.
  6. Activate the workflow, then turn off the matching Zap. Watch it for a day, then move to your next highest-volume automation and repeat.

The whole move for one workflow takes about an afternoon the first time, and far less once you know the nodes. The order alert is the best one to start with, and there is a full build guide for it linked in the related guides below.

Get the template, or have it installed for you

You do not have to build the n8n version from a blank canvas. The ready-to-import order automation template is available on the downloads page, so you can drop the JSON straight into your n8n instance, add your Shopify and Slack or Telegram credentials, and have it running in minutes.

If you would rather skip the setup entirely, the done-for-you installation service will install, test, and hand over your Shopify automations running on your own server, with a walkthrough call included. That is the fastest route from a Zapier bill you do not like to an n8n stack that costs a fraction of it.

Frequently asked questions

Is n8n actually cheaper than Zapier for Shopify?

At low volume with a single simple automation, the two are close, and Zapier’s $20 plan can even edge out n8n Cloud. Past a few hundred orders a month with multi-step automations, self-hosted n8n is far cheaper because it bills per execution or not at all, while Zapier bills per action.

What is the difference between a task and an execution?

A Zapier task is one successful action, so a five-step automation uses five tasks per run. An n8n execution is one full run of the whole workflow regardless of how many steps it has. This is why adding steps raises your Zapier cost but not your n8n cost.

Do I have to self-host n8n to save money?

No, but it is where the biggest savings are. n8n Cloud at $24 to $60 a month already beats Zapier at higher volumes. Self-hosting the free Community edition on a small server drops your cost to a few dollars a month with unlimited executions, which is the cheapest option of all.

Can n8n connect to Shopify the same way Zapier does?

Yes. n8n has a native Shopify trigger and Shopify nodes that fire on new orders, fulfillments, and customer events, connected through a private app access token. For anything without a dedicated node, the HTTP Request node can call the Shopify Admin API directly.

Will I lose reliability by leaving Zapier?

Not inherently. n8n Cloud is managed and highly reliable. Self-hosted n8n is as reliable as the server you run it on, which is fine on a reputable VPS with backups. The trade is that you own the uptime, which is also why you own the savings.

Related guides

For the full set of store automations worth running on n8n, browse the Shopify automation category. Useful next reads include the Shopify order alert workflow, the daily sales report to Telegram, and the low-stock inventory alert, each with an importable template.

Shopify Flow vs n8n: Which Automation Tool Should Your Store Use?

You have an order coming in every few minutes, a spreadsheet you update by hand at the end of the day, and a Slack channel that stays quiet until someone remembers to post the numbers. Two tools promise to fix this: Shopify Flow, the free automation app built into your admin, and n8n, the open workflow engine that connects to almost anything. The shopify flow vs n8n question is not about which one is better in the abstract. It is about which one fits the job in front of you.

TL;DR: In the shopify flow vs n8n decision, Flow wins for native store tasks like tagging orders, hiding products, and emailing staff, and it costs nothing on the Basic plan or higher. n8n wins the moment a workflow needs outside tools such as Google Sheets, Gmail, Telegram, Slack, or a custom API, or logic Flow cannot express. Most serious stores run both, with Flow inside Shopify and n8n handling everything beyond it.

Prefer to skip the setup? Grab the ready-made n8n template → and have the order workflow below running in under ten minutes.

What each tool actually does

Shopify Flow is a visual automation builder that lives inside your Shopify admin. You pick a trigger such as “order created,” add conditions, and chain actions like adding a tag, sending an internal email, or hiding a sold-out product. The v4 release in early 2026 added native multi-branch logic and time delays of up to thirty days, so Flow now covers a large share of routine store tasks without any outside help. It is free on the Basic plan and above, and there are no execution limits to watch.

n8n is a standalone workflow tool that you run on n8n Cloud or on your own server. It has a native Shopify Trigger and Shopify node, so it can listen for the same events Flow listens for, but it also speaks to roughly 500 other services and any REST API through a generic HTTP node. Where Flow ends at the edge of Shopify, n8n keeps going into Google Sheets, Gmail, Slack, Telegram, Airtable, Notion, and AI models. You can read more about that range on our n8n Shopify automation hub.

Where n8n beats the Shopify Flow default

Flow is excellent at acting on Shopify objects. The trouble starts when the job points outward. Flow has a small set of connector actions and cannot freely transform data, call an arbitrary API, or fan a single order out to three different tools at once with custom formatting in each. n8n treats every order as plain JSON you can reshape, filter, enrich, and route however you like.

A few concrete jobs where n8n is the better tool:

  • Logging every order to a Google Sheet so your team can pivot, filter, and forecast without touching the Shopify admin.
  • Sending a formatted daily or weekly sales digest to Telegram or Slack, pulled from the raw order data rather than a fixed template.
  • Calling an AI model to write a product description, summarize a support email, or flag a risky order, then writing the result back to Shopify.
  • Syncing orders across two Shopify stores, or between Shopify and an external ERP, inventory feed, or accounting tool.
  • Building any branching logic that depends on outside data, such as a customer’s lifetime value stored in Airtable.

Flow still wins on its home turf. If the task starts and ends inside Shopify, Flow is faster to build, free, and needs no server or credential setup. Honesty matters here: do not move a working Flow automation to n8n just to feel clever. Move it when the job grows past what Flow can reach.

Side-by-side comparison

Factor Shopify Flow n8n
Cost Free on Basic plan and above Free self-hosted, or about 24 euros a month on Cloud
Setup None, built into the admin Server or Cloud account plus credentials
Shopify actions Deep and native Native via the Shopify node
Outside services Limited connector list About 500 apps plus any REST API
Data transformation Basic conditions and variables Full code, expressions, and JSON reshaping
AI steps Sidekick-assisted, narrow OpenAI, Claude, Gemini, and self-hosted models
Multi-store One store per Flow instance Many stores in one workflow
Learning curve Gentle Steeper at first

What you need to run n8n alongside Flow

To follow the worked example below, you need an n8n instance, which is either a Cloud account or a self-hosted install on a small VPS, a Shopify store with admin access to create a custom app, a Google account for Sheets, and a Slack workspace where you can add an app. Building the workflow from scratch takes about 35 minutes. Importing the ready-made template takes under ten.

The worked example: an order workflow Flow cannot fully build

Here is a job that exposes the gap. On every new order, you want to clean up the data, flag high-value orders, log the order to a Google Sheet, and post a tidy summary to Slack. Flow can tag the order, but it cannot append a custom row to your Sheet and post a formatted Slack message from the same trigger with full control over both. n8n does all of it in one flow.

  Shopify Trigger (orders/create)
        |
   Set (flatten order fields)
        |
   IF (total above your average order value?)
     /            \
   true           false
     |              |
  (priority tag)    |
     \____________ /
        |
   Google Sheets (append row)
        |
   Slack (post order summary)
  

Node-by-node list

  • Shopify Trigger — fires on the orders/create event.
  • Set — flattens the raw payload into clean named fields.
  • IF — routes high-value orders onto a priority branch.
  • Google Sheets — appends each order as a row in a running ledger.
  • Slack — posts a formatted summary to your sales channel.

1 Shopify Trigger

Add the Shopify Trigger node and connect it with a custom app credential from your Shopify admin. Subscribe to the orders/create topic. From now on, every new order pushes its full payload into the workflow.

{
  "id": 5123987654321,
  "name": "#1042",
  "total_price": "184.00",
  "customer": { "first_name": "Emily", "last_name": "Rodriguez", "email": "emily.rodriguez@gmail.com" },
  "line_items": [ { "title": "Trail Runner Jacket", "quantity": 2 } ]
}
💡

Tip: Create the credential under Settings, Apps and sales channels, Develop apps in your Shopify admin. Give it read access to orders and customers only, nothing more.

2 Set node

The raw payload is deep and nested. Use a Set node to pull out just the fields you care about so the rest of the workflow stays readable. Map order number, customer name, email, total, and item count into flat values.

{
  "order_number": "#1042",
  "customer_name": "Emily Rodriguez",
  "email": "emily.rodriguez@gmail.com",
  "total": 184.00,
  "items": 2
}

3 IF node

Add an IF node that checks whether total is greater than your average order value, say 120 dollars. The true branch is your priority path, where you might add a VIP tag back in Shopify or ping a manager. The false branch flows straight through to logging.

📌

Set the comparison type to number, not string. Comparing "184.00" as text is a common reason this branch never fires.

4 Google Sheets node

Use the Google Sheets node in append mode to add one row per order. Point it at a sheet with columns that match your Set fields. This becomes the running ledger your team filters and pivots without ever opening the Shopify admin.

Column Type Example Description
order_number Text #1042 Shopify order name
customer_name Text Emily Rodriguez Buyer full name
total Number 184.00 Order value in USD
items Number 2 Count of line items
logged_at Date June 11, 2026 When the row was written

5 Slack node

Finish with the Slack node set to send a message to your sales channel. Build the text from the fields you flattened in step 2 so the team gets a clean, scannable summary the moment a sale lands.

New order #1042
Emily Rodriguez spent $184.00 on 2 items.
💡

Tip: Prefer Telegram or Gmail over Slack? Swap the last node. n8n keeps the rest of the flow identical, which is the whole point of building outside Shopify.

Common mistakes

The first mistake is moving every Flow automation into n8n. If a task lives entirely inside Shopify, leave it in Flow. The second is comparing values as text in the IF node, which silently breaks the high-value branch. The third is over-scoping the Shopify custom app credential. Grant only the read and write access the workflow uses. The fourth is forgetting that n8n Cloud bills by execution, so a trigger that fires on every order can add up. Self-hosting on your own server removes that worry entirely.

Cost at realistic volume

Say your store does 1,500 orders a month and you want each order logged and announced. In Flow, the native parts cost nothing. In n8n, that order workflow runs 1,500 executions a month, which sits well inside the Cloud Starter plan of 2,500 executions for about 24 euros. Self-host on the VPS you may already run and the same 1,500 runs cost only your server bill, often 3 to 7 dollars a month, with unlimited executions. The practical takeaway: keep free native jobs in Flow, and let n8n earn its small cost on the cross-tool jobs Flow cannot do.

🚀 Get the Shopify Order to Sheets and Slack Template

Skip the wiring. The template imports in one click and includes the Shopify Trigger, Set, IF, Google Sheets, and Slack nodes already mapped, plus a setup guide for every credential.

Get the Template →

Instant download · Works on n8n Cloud and self-hosted

Want it built and hosted for you? See our done-for-you n8n setup service →

Frequently asked questions

Is Shopify Flow free?

Yes. Shopify Flow is a free app on the Basic plan and every higher plan, with no usage caps. It is not available on the Starter plan. You only pay for your Shopify subscription, so for native store tasks Flow carries no extra cost at all.

Can n8n connect to Shopify directly?

Yes. n8n has a native Shopify Trigger and Shopify node that use the Admin API. The trigger fires on events like new orders, new customers, or product updates, and the action node can read and write orders, customers, products, and inventory levels.

Do I need to replace Shopify Flow with n8n?

No, and most stores should not. Keep Flow for native tasks like tagging orders and emailing staff, then add n8n only when a job needs outside tools such as Google Sheets, Gmail, Telegram, or a custom API that Flow cannot reach on its own.

How much does n8n cost for a Shopify store?

The self-hosted Community Edition is free software with unlimited executions, so you pay only for a small server, roughly 3 to 7 dollars a month. n8n Cloud starts at about 24 euros a month for 2,500 executions if you would rather not host it yourself.

Is n8n harder to use than Shopify Flow?

Flow is easier for native Shopify actions because everything lives inside your admin. n8n has a steeper start since you connect credentials and map data yourself, but it pays off the moment a workflow needs services and logic that Flow simply cannot handle.

Related guides

n8n
Shopify
Shopify Flow
Google Sheets
Slack
automation

Shopify weekly sales PDF report with n8n (emailed every Monday)

New to n8n? Start with our step-by-step setup guide, then come back to build this workflow.

TL;DR: A Shopify weekly sales PDF report n8n workflow pulls the last seven days of orders from your Shopify Admin API, totals revenue, order count, AOV, refunds, and your top products, renders a clean one-page PDF, and emails it to you (and your team) every Monday morning. Setup takes about thirty minutes, runs free on self-hosted n8n, and replaces the manual export-and-format routine most store owners do before their weekly review.

What this workflow does

Every Monday at the hour you choose, the workflow asks the Shopify Admin API for all orders created in the previous seven days. It rolls that raw data into the figures a store owner actually reviews at the start of the week: gross revenue, net revenue after refunds, order count, average order value, refund total, new versus returning customers, and the top five products by revenue. Those numbers are placed into an HTML template, converted to a PDF, and sent to your inbox as an attachment with a short summary in the email body.

The output is a single A4 page you can forward to a partner, drop into a shared Google Drive folder, or print for a Monday meeting. Because it lives in your own n8n instance, the report shows exactly the metrics you care about, on a schedule you control, and it costs nothing per send.

Why it beats the default Shopify report

Shopify Admin gives you analytics inside the dashboard and an optional email summary. Both are fine for a quick glance, but neither hands you a portable weekly document. The dashboard is a live view that you have to log in to read, and the native email is a plain text recap with no branding, no PDF, and a fixed set of metrics you cannot rearrange.

A weekly PDF solves three real problems. It is forwardable, so a bookkeeper or business partner who has no Shopify login still gets the numbers. It is archivable, so twelve PDFs in a Drive folder become a record of the year without exporting anything. And it is yours to shape: add a profit estimate, a refund-rate flag, or a per-collection breakdown by editing one node. Paid reporting apps such as Lifetimely or Better Reports charge anywhere from $30 to $150 a month for what is, underneath, a date-range query and a formatted document.

Running this on n8n for Shopify automation gives you that document on the channel you already check, at the hour you pick, for zero recurring cost. Adding a second store means duplicating two nodes, not paying for a second app seat.

What you need before you start

You need a running n8n instance, a Shopify store where you are the owner or have a staff account with read access to orders, products, and customers, and a Gmail account for sending. You also need a way to turn HTML into a PDF. The cleanest option is Gotenberg, a free open-source PDF engine you run as a Docker container next to n8n, so nothing leaves your server. If you prefer a hosted route, APITemplate.io has a free tier that works with the same HTTP Request node.

For the Shopify side you create a custom app inside Shopify Admin and grant it read_orders, read_products, and read_customers scopes. Shopify issues an Admin API access token that n8n uses as a header credential. For Gmail you connect the Gmail node with OAuth2, which takes a few minutes the first time. Budget about thirty minutes total if you are comfortable copying tokens between browser tabs.

Node-by-node list

The finished workflow has eight nodes. Here is what each one does and why it exists.

Schedule Trigger: fires once a week, Monday at 07:00 in your store timezone. You set the timezone in n8n settings, not in the node, so every scheduled workflow agrees on the time.

Set, Date Window: computes the ISO strings for “seven days ago 00:00” and “today 00:00” in your timezone. Keeping the date math in one node means a single edit when daylight saving shifts or when you move to a new server.

HTTP Request, Shopify Orders: calls GET /admin/api/2024-10/orders.json with status=any, created_at_min, created_at_max, and limit=250. Using HTTP Request rather than the Shopify node gives you control over pagination and the exact fields returned, which matters once a store passes a few hundred orders a week.

Code, Aggregate Metrics: JavaScript that reduces the orders array into report figures. It sums total_price, counts orders, divides for AOV, walks line_items to rank the top five products by revenue, separates refunded amounts from refunds[].transactions[].amount, and splits new versus returning buyers using the customer orders_count field.

Set, Build HTML: injects those values into an HTML template with inline CSS. Inline styles are important because most PDF engines ignore external stylesheets. This node holds the layout: header with store name and week range, a metrics row, and a small product table.

HTTP Request, Render PDF: posts the HTML to Gotenberg’s /forms/chromium/convert/html endpoint and receives the PDF binary back. If you use APITemplate.io instead, this node calls their render endpoint with the same HTML payload.

Gmail, Send Report: attaches the returned PDF binary and sends it to your list of recipients. The email body carries a two-line summary so readers see the headline numbers without opening the file.

Google Drive, Archive (optional): uploads the same PDF to a dated folder so you build a searchable archive without any extra effort.

Step-by-step build

1. In Shopify Admin, go to Settings, Apps and sales channels, Develop apps, Create an app. Name it “n8n Weekly Report”. Under Configuration grant read_orders, read_products, and read_customers. Install the app, then copy the Admin API access token that starts with shpat_.

2. In n8n, create a new credential of type “Header Auth”. Set the header name to X-Shopify-Access-Token and the value to the token from step 1. Save it.

3. Stand up the PDF engine. If you run n8n with Docker Compose, add a Gotenberg service (gotenberg/gotenberg:8) to the same compose file so n8n can reach it at http://gotenberg:3000. Skip this step if you are using APITemplate.io.

4. Create a new n8n workflow. Add a Schedule Trigger node set to a weekly cron, Monday at 07:00.

5. Add a Set node with two string fields: fromISO set to ={{ DateTime.now().setZone('Africa/Casablanca').minus({days: 7}).startOf('day').toISO() }} and toISO set to ={{ DateTime.now().setZone('Africa/Casablanca').startOf('day').toISO() }}. Replace the zone with your own.

6. Add an HTTP Request node. Method GET. URL https://YOUR-STORE.myshopify.com/admin/api/2024-10/orders.json. Authentication: Generic, Header Auth, the credential from step 2. Query parameters: status=any, created_at_min={{$json.fromISO}}, created_at_max={{$json.toISO}}, limit=250, fields=id,total_price,subtotal_price,currency,line_items,customer,refunds,created_at.

7. Add a Code node and paste the aggregation script (included in the downloadable JSON template). It returns one item with fields revenue, orders, aov, refunded, net, newCustomers, returningCustomers, and a topProducts array.

8. Add a Set node that builds the HTML. Use inline CSS only, reference the values with expressions like {{$json.revenue}}, and loop the topProducts array into table rows. The full template ships in the download.

9. Add an HTTP Request node pointed at Gotenberg. Method POST, URL http://gotenberg:3000/forms/chromium/convert/html, body type “n8n Binary File” with the HTML field named index.html. The response is the PDF binary; set “Response Format” to File.

10. Add a Gmail node. Operation Send. Fill the recipients, a subject like Weekly sales report, week of {{$json.weekStart}}, a short body, and attach the binary from the previous node.

11. Run the workflow once manually with “Execute Workflow”, confirm the PDF arrives, then activate it so the schedule takes over.

Common mistakes

The most frequent error is a blank or broken PDF caused by external CSS. PDF engines render the HTML in isolation, so any <link> to a stylesheet is dropped. Keep every style inline on the element or inside a single <style> block in the document head.

The second is missing orders on busy stores. The Admin API returns 250 orders per page, so a store doing more than 250 orders a week needs pagination through the Link response header. The download template includes a loop that follows the next-page cursor until the data runs out.

The third is a timezone mismatch. If n8n runs in UTC but your store reports in another zone, your week boundaries drift by a few hours and Monday’s report can clip Sunday evening sales. Set the timezone once in n8n settings and reference it in the date expressions, as shown in step 5.

Cost at realistic volume

On self-hosted n8n the workflow is free to run. One execution per week is nothing for even the smallest VPS, and Gotenberg adds a lightweight container that idles at near-zero CPU between runs. Gmail sends sit well inside the free sending limits at one report a week, even with several recipients.

If you choose APITemplate.io instead of self-hosting Gotenberg, the free tier covers dozens of renders a month, which is far more than a weekly report needs. On n8n Cloud the only cost is the one workflow execution against your monthly quota. For a store paying $30 to $150 a month for a reporting app, replacing it with this workflow recovers the full subscription while giving you a document you fully control.

Ready-to-import template

You can build this from the steps above, or skip straight to the finished version. The downloadable package includes the complete workflow JSON with the pagination loop, the aggregation script, and a styled HTML template ready for Gotenberg or APITemplate.io. Grab it from our downloads library, import it into n8n, plug in your three credentials, and you have a weekly PDF in under ten minutes.

Want it installed and tested on your store without touching a node? Our n8n setup service configures the workflow, connects your Shopify and Gmail credentials, and hands you a working report on your own server.

FAQ

Can I send the report to more than one person? Yes. The Gmail node accepts a comma-separated list of recipients, or you can add CC and BCC fields. A common setup sends the PDF to the owner, the bookkeeper, and a shared archive address, all from the single send node without duplicating anything.

Do I have to use Gotenberg for the PDF? No. Gotenberg is the free self-hosted choice, but the HTTP Request node works with any HTML-to-PDF service that accepts a POST. APITemplate.io has a free tier, and the workflow swaps between them by changing one node’s URL and credential.

Will this work on a high-volume store? Yes, with pagination enabled. The Admin API caps each page at 250 orders, so a busy store needs the loop that follows the next-page cursor. The download template already includes that loop, so it handles thousands of weekly orders without changes.

Can I change the metrics in the report? Absolutely. The figures are produced in the Code node, so adding a refund rate, a profit estimate, or a per-collection breakdown is a small edit to the JavaScript and one extra row in the HTML template. Nothing else in the workflow needs to change.

Does this work with WooCommerce too? Yes. Swap the Shopify HTTP Request for the WooCommerce node or a call to the WooCommerce REST API, keep the same aggregation, HTML, and PDF nodes, and the rest of the workflow runs identically for a WooCommerce store.

Related guides

Pair this with the Shopify daily sales report to Telegram for a quick morning glance, or browse every store automation in our Shopify guides. If you are still setting things up, the n8n setup guide covers installation on cloud and self-hosted.

Shopify dispute and chargeback alert with n8n (instant Slack notifications)

TL;DR: This Shopify dispute chargeback alert n8n workflow watches your Shopify Payments disputes and pings Slack the second a chargeback opens. It pulls the order, customer, amount, reason code, and the evidence-due date, logs everything to Google Sheets, and optionally drafts a rebuttal with OpenAI. You stop discovering disputes after the response window closes, and you win more cases by acting within hours instead of days.

What it does

A chargeback is a race against a clock you usually cannot see. When a buyer disputes a charge, Shopify Payments gives you a fixed window to submit evidence, often around seven to ten days depending on the card network and reason. Miss it and the dispute resolves against you automatically, which means lost revenue plus the disputed amount and, in many cases, a fee on top. Most store owners only find out when they happen to open the Shopify admin or read a digest email days later.

This workflow closes that gap. It connects to your Shopify store, listens for new and updated disputes, and the moment one appears it sends a structured alert to a Slack channel your team actually watches. The message includes the order number, the customer name and email, the disputed amount, the network reason code, the dispute status, and the exact date your evidence is due. It also appends a row to a Google Sheets log so you have a running record of every dispute, its outcome, and how fast you responded. If you turn on the optional OpenAI step, it drafts a first-pass rebuttal summary using the order details so your team starts from a draft instead of a blank page.

Why it beats the default

Shopify does email you about disputes, but those emails land in the same inbox as every order confirmation, payout notice, and app notification. They are easy to miss and easy to misjudge, because the subject line rarely makes the deadline obvious. By the time someone notices, half the response window can be gone.

Routing disputes into Slack changes the behavior. A dispute alert in a dedicated channel is visible to the whole team, it is timestamped, and it carries the due date right in the message so nobody has to dig for it. You can assign it with a thread reply, react with an emoji to claim it, and keep the whole conversation attached to the event. Pair that with a Google Sheets log and you get something Shopify does not give you out of the box: a clear view of how many disputes you get per month, which products or reason codes drive them, and your win rate over time. That history is what lets you fix the root cause instead of fighting the same fight every week.

Compared with paid chargeback apps that charge a percentage of recovered funds or a monthly fee per store, an n8n workflow runs on infrastructure you already own and costs effectively nothing per dispute. You also keep full control of the logic, so you can route high-value disputes differently, escalate to a manager above a threshold, or branch by reason code.

What you need

Before you build this, make sure you have a few things ready. You need a Shopify store on a plan that uses Shopify Payments, since the dispute resource lives there. You need admin access to create a custom app or private credentials so n8n can read disputes. You need a running n8n instance, either self-hosted or cloud. You need a Slack workspace where you can add an incoming app and a channel such as #chargebacks. You need a Google account for the Sheets log. The OpenAI step is optional and only needed if you want auto-drafted rebuttal notes.

Node-by-node list

Here is every node in the workflow and what each one is responsible for:

  1. Schedule Trigger that runs the check on a fixed interval, for example every 30 minutes.
  2. Shopify node (or HTTP Request node) that fetches disputes from the Shopify Payments dispute endpoint.
  3. Code node that filters out disputes already seen and keeps only new or newly updated ones.
  4. Shopify node that looks up the full order behind each dispute to enrich the alert.
  5. Set node that builds a clean payload with order number, customer, amount, reason, status, and the evidence due date.
  6. OpenAI node (optional) that drafts a short rebuttal summary from the order details.
  7. Slack node that posts the formatted alert to your chargebacks channel.
  8. Google Sheets node that appends the dispute as a new row in your log.
  9. NoOp or Set node at the end that records the processed dispute IDs so they are not alerted twice.

Step-by-step build

  1. Create a Shopify custom app in your admin under Settings, then Apps and sales channels, then Develop apps. Give it read access to orders and to Shopify Payments disputes, install it, and copy the Admin API access token.
  2. In n8n, add a Schedule Trigger and set it to run every 30 minutes. Chargebacks are not second-by-second events, so a short poll is plenty and keeps you well inside any response window.
  3. Add an HTTP Request node pointed at your store dispute endpoint, for example https://your-store.myshopify.com/admin/api/2024-10/shopify_payments/disputes.json. Authenticate with a header named X-Shopify-Access-Token set to your token. If your n8n version has the dispute resource in the native Shopify node, you can use that instead.
  4. Add a Code node that compares the returned dispute IDs against the IDs you stored on the last run. Keep only disputes that are new, or whose status changed, so you alert once per meaningful event rather than every poll.
  5. Add a Shopify node set to get a single order, using the order_id field from each dispute. This pulls the customer name, email, and line items so the alert is useful on its own.
  6. Add a Set node that assembles the final fields you care about: order number, customer, amount and currency, the network reason, the dispute status, and the evidence_due_by date. Format the date so a human can read it at a glance.
  7. Optional: add an OpenAI node with a prompt that takes the order summary and the dispute reason and returns a three sentence draft of the evidence you would submit. Keep it short so your team edits rather than rewrites.
  8. Add a Slack node, connect your Slack credential, choose your #chargebacks channel, and build a message that leads with the amount and the due date. Put the order link and customer details below so the urgent facts are first.
  9. Add a Google Sheets node set to append a row. Map each field to a column: date detected, order number, customer, amount, reason, status, due date, and a blank outcome column you fill in later.
  10. Finish with a node that writes the processed dispute IDs back to your store of choice, such as a static data field, a database, or a dedicated sheet, so the next run knows what it has already handled. Activate the workflow and run it once manually to confirm the first alert lands.

Common mistakes

The most frequent error is alerting on every poll instead of every new event. If you skip the dedup step, your team gets the same chargeback ping every 30 minutes and quickly mutes the channel, which defeats the purpose. Store the processed IDs and compare against them.

The second mistake is forgetting to surface the evidence due date. An alert that says only “you have a dispute” is barely better than the default email. The due date is the single most important field, so lead with it. The third is requesting too little API scope, which makes the order lookup fail silently and leaves your alerts missing customer details. Grant read access to both orders and disputes when you create the app. Finally, do not hardcode a single currency in the amount field. Pull the currency from the dispute so a multi-currency store shows the right symbol.

Cost at realistic volume

For a store doing a few hundred orders a month, disputes usually land somewhere between two and fifteen per month. At that volume the workflow is essentially free to run. n8n on a small self-hosted instance handles a 30 minute poll without noticeable load, Slack alerts cost nothing, and Google Sheets is free. If you enable the optional OpenAI draft step, a short rebuttal summary on a current model costs a fraction of a cent per dispute, so even at fifteen disputes a month you are looking at pennies. Compare that with dispute-management apps that take a percentage of every recovered charge, and the workflow pays for itself the first time it helps you respond on time.

Ready-to-import template

You do not have to wire all of this by hand. The ready-to-import JSON template for this Shopify dispute chargeback alert n8n workflow, along with a setup guide and a credentials guide, is available on our downloads page. Import it, paste in your Shopify token, connect Slack and Google Sheets, and you are alerting on disputes in minutes. If you would rather have it installed, configured, and tested on your own n8n instance, our team does that for you through our n8n setup service. For the bigger picture on automating your store end to end, start with our n8n Shopify automation hub.

FAQ

Does this work without Shopify Payments?

The dispute resource used here is specific to Shopify Payments. If you process card payments through a third-party gateway, disputes live in that provider instead, so you would point the workflow at that gateway’s dispute API. The Slack alert, Google Sheets log, and OpenAI draft steps stay the same regardless of where the dispute data comes from.

How fast will I get the alert after a dispute opens?

With a 30 minute schedule, you learn about a new dispute within half an hour at most. You can shorten the interval to every 10 or 15 minutes if you want faster alerts, though disputes are not high-frequency events and a sub-hour poll is already well inside any evidence deadline you need to meet.

Can I send the alert to Telegram instead of Slack?

Yes. Swap the Slack node for a Telegram node and point it at your chat or group. The rest of the workflow is unchanged, since the fields you assemble in the Set node are channel-agnostic. Many store owners run both, sending a Slack message to the team and a Telegram message to the owner.

Will it tell me the deadline to submit evidence?

Yes, and that is the point. The dispute object returned by Shopify includes an evidence due date, which the workflow maps into the alert and the log. Leading the Slack message with that date is what turns a passive notification into something your team acts on before the window closes.

Is the OpenAI rebuttal step required?

No, it is optional. The core workflow alerts and logs without any AI. The OpenAI node simply drafts a short starting point for your evidence response using the order details, which saves time on the writing. You can leave it out entirely and the alerts still arrive with everything your team needs to act.

Related guides

For more store automations, browse the full Shopify automation category. You might also like our guides on the Shopify order AI risk alert and the Shopify refund tracker in Google Sheets, both of which pair naturally with dispute monitoring to give you a complete view of risky orders and lost revenue.

Shopify high-value customer Slack alert with n8n (VIP order detection)










TL;DR: This guide builds a Shopify high-value customer Slack alert with n8n. A Shopify trigger watches every new order, a Code node checks the order total and the customer’s history, and Slack gets a clean message the moment a VIP or big spender checks out. Your team sees the order in seconds and can add a handwritten note, upgrade the shipping, or follow up before the box ever ships.

Most stores treat a $40 order and a $900 order exactly the same. Both drop into the same admin list, both get the same packing slip, and nobody on the team notices the difference until the day is over. That is a missed chance. A repeat buyer who just spent more than usual, or a brand new customer placing a large first order, is the exact person worth a personal touch. The trouble is that nobody can sit and refresh the Shopify orders page all day.

Prefer to skip the setup? Grab the ready-made template and be running in under 10 minutes.

What it does

The workflow listens to your store through Shopify’s order webhook. Every time a customer completes checkout, Shopify sends the full order to n8n. A short script then scores the order against rules you choose, such as a high order total, a high lifetime spend, or a loyal repeat buyer. If the order clears any of those rules, n8n posts a tidy alert into a Slack channel like #vip-orders. Ordinary orders are ignored, so the channel stays quiet and useful.

Here is what a finished alert looks like in Slack:

🟢 High-value order: #1042
Emily Rodriguez (emily.rodriguez@gmail.com)
Order total: $640.00 USD
Why it qualified: Large order ($640.00), Loyal customer (7 orders)
Lifetime spend: $3,180.00

Why it beats the default

Shopify can email you on every new order, but that is the wrong tool for this job. An inbox flooded with one message per sale trains you to ignore all of them, and email gives you no way to say “only ping me when the order matters.” Shopify Flow can tag orders, yet on most plans it cannot reason about a customer’s full history the way a few lines of code can, and it keeps you inside Shopify instead of where your team already talks.

Running this in n8n hands you the logic. You set the dollar thresholds, you decide whether a repeat buyer counts, and you choose the channel. Because the alert lands in Slack, the person who packs orders, the founder, and the support lead all see it at once and can act before the order leaves the warehouse. This guide is one piece of our wider n8n Shopify automation playbook, which covers order alerts, reviews, inventory, and more.

What you need

  • An n8n instance, either n8n Cloud or a self-hosted setup on your own server.
  • A Shopify store with admin access so you can create a custom app and grant API scopes.
  • A Slack workspace where you can install an app and pick a channel for alerts.
  • About 30 to 45 minutes if you build from scratch, or under 10 minutes with the template.

How it works, the big picture

┌───────────────────────────────────────────────────────────────┐
│  SHOPIFY HIGH-VALUE CUSTOMER SLACK ALERT                       │
│                                                               │
│  [Shopify Trigger] → [Code: score order] → [IF: high value?]  │
│                                                  │            │
│                                         true ────┘  └──── false│
│                                          ↓               ↓     │
│                                    [Slack: post]      (ignore) │
└───────────────────────────────────────────────────────────────┘
  

Node-by-node list

Node Type Job
Shopify Trigger shopifyTrigger Fires on every new order via the orders/create webhook
Score order code Checks total, lifetime spend, and order count, then flags high value
High value? if Stops ordinary orders and lets VIP orders pass through
Post to Slack slack Sends the formatted alert to your chosen channel

Step-by-step build

1 Add the Shopify trigger

Create a new workflow and add a Shopify Trigger node. Set the event to Order created (the underlying webhook topic is orders/create). To connect it, create a custom app in your Shopify admin under Settings → Apps and sales channels → Develop apps, give it the read_orders and read_customers scopes, install it, and paste the admin API access token into the Shopify credential in n8n. Once the node is active, every checkout sends a full order object to your workflow.

A trimmed version of what arrives looks like this:

{
  "name": "#1042",
  "total_price": "640.00",
  "currency": "USD",
  "email": "emily.rodriguez@gmail.com",
  "customer": {
    "first_name": "Emily",
    "last_name": "Rodriguez",
    "orders_count": 7,
    "total_spent": "3180.00"
  }
}
💡

Tip: Use the “Listen for test event” button in the node, then place a real test order in your store. n8n captures the live payload so you can map fields against your own data instead of guessing.

2 Score the order with a Code node

Add a Code node named Score order. This is where you turn raw order data into a yes or no decision. The script below flags an order if it crosses any of three rules, then builds a clean reason string you can drop straight into Slack. Adjust the numbers to fit your store’s average order value.

const o = $json;
const total = parseFloat(o.total_price || 0);
const cust = o.customer || {};
const ordersCount = cust.orders_count || 0;
const lifetime = parseFloat(cust.total_spent || 0);

const reasons = [];
if (total >= 250) reasons.push(`Large order ($${total.toFixed(2)})`);
if (lifetime >= 1000) reasons.push(`High lifetime spend ($${lifetime.toFixed(2)})`);
if (ordersCount >= 5) reasons.push(`Loyal customer (${ordersCount} orders)`);

return [{
  json: {
    isHighValue: reasons.length > 0,
    reasons: reasons.join(', '),
    orderName: o.name,
    total: total.toFixed(2),
    currency: o.currency,
    customerName: `${cust.first_name || ''} ${cust.last_name || ''}`.trim(),
    email: cust.email || o.email,
    lifetime: lifetime.toFixed(2)
  }
}];

After this node the data is small and ready to use:

{
  "isHighValue": true,
  "reasons": "Large order ($640.00), Loyal customer (7 orders)",
  "orderName": "#1042",
  "total": "640.00",
  "currency": "USD",
  "customerName": "Emily Rodriguez",
  "email": "emily.rodriguez@gmail.com",
  "lifetime": "3180.00"
}
📌

Pick thresholds that match your store, not round numbers from a blog. If your average order is $80, a $250 trigger makes sense. If you sell furniture with a $600 average, set the bar higher so the channel only lights up for orders that truly stand out.

3 Filter with an IF node

Add an IF node named High value?. Set one condition: the boolean value {{ $json.isHighValue }} equals true. Connect the Code node into it. Wire the true output to the Slack node you build next, and leave the false output empty so ordinary orders quietly stop here. This single gate is what keeps your channel signal-rich instead of noisy.

4 Post the alert to Slack

Add a Slack node, set the operation to Send a message, and connect it to the true branch of the IF node. To authorize it, create a Slack app at api.slack.com, give it the chat:write scope, install it to your workspace, and use the OAuth token in the n8n Slack credential. Choose your channel, such as #vip-orders, and paste this into the message text field:

🟢 High-value order: {{ $json.orderName }}
{{ $json.customerName }} ({{ $json.email }})
Order total: ${{ $json.total }} {{ $json.currency }}
Why it qualified: {{ $json.reasons }}
Lifetime spend: ${{ $json.lifetime }}

Save the workflow and switch it on. From now on, the only orders that reach Slack are the ones worth your attention.

💡

Tip: Add the order’s admin link so a teammate can open it in one tap. Drop https://admin.shopify.com/store/YOUR-STORE/orders into the message, or extend the Code node to build a direct order URL from the order id.

Common mistakes

The first trap is setting the threshold too low. If your bar sits under the average order value, every sale qualifies and the channel becomes the same noise you were trying to escape. Start a little high and lower it once you see the volume.

The second is forgetting the read_customers scope. Without it, Shopify still sends the order, but the customer object can come through thin, so lifetime spend and order count read as zero and your loyalty rule never fires. Grant both scopes when you create the custom app.

The third is testing with a brand new customer and expecting the loyalty rule to trigger. A first-time buyer has an order count of one and no spend history, which is correct behavior. Test the loyalty path with an account that already has past orders, or temporarily lower the order count rule to confirm the logic.

Cost at realistic volume

This workflow is light. A store doing 1,000 orders a month fires 1,000 executions, and only the high-value share ever reaches the Slack step. Shopify charges nothing for webhooks. Slack is free for the message volume any single store will produce. The only line item is n8n itself.

Setup Monthly cost Notes
Self-hosted n8n $0 plus server Runs on a small VPS you may already own; executions are unlimited
n8n Cloud starter From about $20 Covers thousands of executions, well above a typical store’s order count
Shopify webhook $0 Included on every Shopify plan
Slack $0 Free tier handles the alert volume comfortably

🚀 Get the high-value customer Slack alert template

Download the ready-to-import n8n workflow with the scoring Code node, the IF gate, and the Slack message already wired. Import it, add your credentials, set your thresholds, and go live in minutes.

Get the template →

Instant download · Works on n8n Cloud and self-hosted · Want it built for you? See our done-for-you n8n setup service.

Frequently asked questions

What counts as a high-value Shopify customer?

You decide. This workflow flags an order when it crosses any rule you set: a single order above a dollar threshold, a customer whose lifetime spend is high, or a shopper with several past orders. You can use one rule or combine all three.

Do I need a paid Shopify plan to use the order trigger?

No. The orders/create webhook is available on every Shopify plan, including Basic. You only need an admin account that can create a custom app, which gives n8n the API access it needs to subscribe to the event and read order data.

Will this slow down my checkout?

No. Shopify sends the webhook after the order is created, so the shopper never waits on n8n. The whole flow runs in the background and the alert usually lands in Slack a few seconds after the checkout completes successfully.

Can I send the alert to Telegram instead of Slack?

Yes. Swap the Slack node for a Telegram node and point it at your chat or group. The Code node and IF logic stay the same, so only the final delivery step changes. Plenty of stores run both Slack and Telegram at once.

What happens during a flash sale with hundreds of orders?

Each order fires its own webhook, so n8n handles them one by one. If you worry about noise, raise your thresholds before a big sale, or route alerts to a dedicated channel so the team can scan them after the rush settles.

Related guides

n8n
Shopify
Slack
automation

Shopify refund tracker in Google Sheets with n8n

Shopify refund tracker in Google Sheets with n8n

New to n8n? Start with our step-by-step setup guide, then come back to build this workflow.










TL;DR: This guide builds a Shopify refund tracker in Google Sheets with n8n. Every time a refund is issued, a Shopify trigger sends it to n8n, a Code node flattens the data, and a Google Sheets node appends one row with the order, customer, amount and reason. An IF node pings Slack when a refund crosses your high-value threshold, so finance sees big hits in real time without watching the admin all day.

Refunds are the part of a Shopify store nobody likes to look at, which is exactly why they pile up unnoticed. The admin shows you each refund on its own order page, but it never gives you a single running list you can sort, total, or hand to your accountant. By the end of the month you are clicking through orders one at a time trying to reconstruct what went out the door. If you have ever wondered why your payout was lighter than expected, an unlogged refund is usually hiding in there somewhere.

A refund tracker fixes that quietly in the background. This is one of the most useful entries in our n8n Shopify automation collection because it costs almost nothing to run and pays for itself the first time it catches a refund you would have missed. You keep one Google Sheet that fills itself, and you get a Slack ping the moment a large refund goes through.

Prefer to skip the setup? Grab the ready-made template and have your refund log filling itself in under ten minutes.

What it does

The workflow listens for one Shopify event: a refund being created. The moment a refund is issued from the Shopify admin, from a customer self-service return, or through an app, Shopify sends the full refund record to n8n. n8n reads the parts that matter, writes a row to your Google Sheet, and decides whether the refund is big enough to need a human looking at it right away.

Here is what you end up with running quietly behind your store:

  1. A refund is issued in Shopify for any reason, full or partial.
  2. Within a second or two, a new row appears in your Google Sheet with the order number, customer, amount, reason and date.
  3. If the refund is at or above your threshold, say one hundred dollars, a message lands in your Slack channel naming the order and the amount.
  4. At month end you sort the sheet, total the refund column, and reconcile against your payouts in minutes instead of an afternoon.

Why it beats the default Shopify export

Shopify does let you export orders to CSV, and the export does include refund columns. So why build anything? Three reasons.

The export is a manual pull. You have to remember to run it, choose a date range, download the file, and open it. A tracker that writes itself never gets forgotten on a busy week. The export is also order-shaped, not refund-shaped. One order can carry several refunds over time, and the flat CSV makes those awkward to read. A purpose-built refund row gives you one line per refund event with only the fields you care about.

The export tells you nothing in the moment. A two hundred dollar refund and a five dollar refund look the same in a file you open next week. With a live tracker, the big ones interrupt you on purpose while the small ones log themselves silently. That separation is the whole point. You stop watching refunds you do not need to watch and you never miss the ones you do.

What you need

  • A running n8n instance, either n8n Cloud or self-hosted. Any recent version works.
  • A Shopify store with admin access so you can create an app token with read access to orders.
  • A Google account with one Sheet ready to receive the refund rows.
  • A Slack workspace and a channel for the alerts. You can use Telegram instead if you prefer, the swap is a single node.

Build time is around thirty to forty minutes from scratch the first time, mostly spent connecting credentials. With the ready template it drops to under ten minutes because the nodes and field mappings are already wired.

The nodes at a glance

Five nodes carry the whole job. Read them top to bottom and you have the full mental model before touching n8n.

Order Node Type Job
1 Refund Created Shopify Trigger Receives every refund the moment it happens
2 Flatten Refund Code Pulls clean fields out of the nested payload
3 Append To Sheet Google Sheets Writes one row per refund to the log
4 Is High Value IF Checks the amount against your threshold
5 Alert Slack Slack Posts large refunds for a human to review
┌───────────────────────────────────────────────────────────────┐
│  SHOPIFY REFUND TRACKER                                         │
│                                                                │
│  [Refund Created] → [Flatten Refund] → [Append To Sheet]       │
│                                              ↓                  │
│                                        [Is High Value?]        │
│                                          ↓ yes    ↓ no         │
│                                     [Alert Slack]  (stop)      │
└───────────────────────────────────────────────────────────────┘
  

Step-by-step build

1 Refund Created (Shopify Trigger)

This node is the front door. It subscribes to a single Shopify webhook topic and wakes the workflow only when that event fires.

  1. Add a Shopify Trigger node and open it.
  2. Connect your Shopify credential. If you have not made one yet, create a custom app in the Shopify admin under Settings, then Apps and sales channels, then Develop apps, and give it read access to orders.
  3. Set the topic to Refund Created. Save the node so n8n registers the webhook with Shopify.

When a refund fires, the node outputs the raw Shopify refund object. It is deeply nested, which is why the next node exists.

💡

Tip: While building, use the Listen for test event button and issue a one dollar test refund on a draft order. You get real payload shape to map against instead of guessing field names.

2 Flatten Refund (Code)

The raw refund payload buries the useful numbers inside arrays. A short Code node reads them once and hands forward a clean, flat object that every later node can reference without digging.

const r = $json;

// Refund line items hold the actual money returned
const lines = r.refund_line_items || [];
const refundedItems = lines.reduce((sum, li) => sum + Number(li.subtotal || 0), 0);

// Transactions hold the cash actually moved back to the customer
const tx = r.transactions || [];
const refundedCash = tx.reduce((sum, t) => sum + Number(t.amount || 0), 0);

const amount = refundedCash || refundedItems;

return [{
  json: {
    refund_id: r.id,
    order_id: r.order_id,
    order_number: r.order_number || '',
    customer: r.note_customer_name || 'Unknown',
    amount: Number(amount.toFixed(2)),
    currency: (tx[0] && tx[0].currency) || 'USD',
    reason: r.note || 'No reason given',
    created_at: r.created_at
  }
}];

After this node, the data is simple and predictable:

{
  "refund_id": 99887766,
  "order_number": "1042",
  "customer": "Emily Rodriguez",
  "amount": 129.00,
  "currency": "USD",
  "reason": "Item arrived damaged",
  "created_at": "2026-06-06 14:30"
}
📌

Field names in the real Shopify payload can vary slightly by app and store setup. Run one test refund and confirm the keys match before you trust the mapping in production.

3 Append To Sheet (Google Sheets)

Now the clean record gets written to your log. One refund in, one row out.

  1. Add a Google Sheets node and connect your Google credential.
  2. Set the operation to Append.
  3. Pick your spreadsheet and the tab, for example a tab named Refunds.
  4. Map each column to a field from the Code node, for instance the Amount column to {{ $json.amount }} and the Customer column to {{ $json.customer }}.

That is the core tracker done. Refunds now log themselves. The last two nodes add the part that saves you from surprises.

4 Is High Value (IF)

Most refunds are small and routine, and you do not want a ping for every five dollar return. The IF node splits the flow so only the refunds worth your attention go further.

  1. Add an IF node after the Sheets node.
  2. Set the condition to Number, value one {{ $json.amount }}, operation is greater than or equal, value two 100.
  3. The true output carries large refunds onward. The false output ends quietly, the row is already saved.
💡

Tip: Set the threshold to whatever a meaningful refund is for your store. A jewelry shop might use three hundred dollars, a low-ticket store might use forty. You can change it any time without touching another node.

5 Alert Slack (Slack)

The final node turns a big refund into a message a person actually sees.

  1. Add a Slack node on the true branch and connect your Slack credential.
  2. Set the operation to send a message and choose your channel, for example #refunds.
  3. Write a message that pulls the key fields, such as: Refund alert: {{ $json.currency }} {{ $json.amount }} on order {{ $json.order_number }} for {{ $json.customer }}. Reason: {{ $json.reason }}

To use Telegram instead, drop in a Telegram node here, set your chat ID, and map the same text. Nothing else in the workflow changes.

The Google Sheet structure

Keep the sheet simple. These columns match the Code node output one to one, which makes the mapping in step three painless.

Column Type Example Description
Date Date 2026-06-06 14:30 When the refund was created
Order Text 1042 The Shopify order number
Customer Text Emily Rodriguez Who the refund went to
Amount Number 129.00 The refunded value
Currency Text USD Currency of the refund
Reason Text Item arrived damaged Why the refund was issued

Two sample rows show how the log reads day to day:

Date Order Customer Amount Currency Reason
2026-06-06 14:30 1042 Emily Rodriguez 129.00 USD Item arrived damaged
2026-06-06 16:12 1045 Michael Chen 18.50 USD Wrong size
📌

Put the column headers in row one exactly as named, then point the Sheets node at that header row. n8n matches on header text, so a typo in the sheet is the most common reason a column comes up blank.

Common mistakes

A handful of small things trip people up the first time. Knowing them in advance saves a frustrating half hour.

The first is mapping the wrong amount field. The Shopify refund payload contains several money figures, and grabbing the order total instead of the refunded total gives you numbers that look right but are not. The Code node above reads the transaction amount on purpose, so trust it and verify with one real refund.

The second is forgetting to set the app token scope. If your Shopify custom app only has read access to products, the refund webhook will not deliver order data. Give it read access to orders and reinstall the app if you changed scopes after the first install.

The third is a threshold set in the wrong place. Some people put the high-value check before the Sheets node, which means small refunds never get logged. Always append to the sheet first, then branch. Every refund belongs in the log, the IF node only decides who gets a ping.

The last is leaving the workflow inactive. Building and testing happens in the editor, but a saved workflow does nothing until you flip the Active switch in the top corner. Test, save, then activate, in that order.

What it costs at realistic volume

This is one of the cheapest automations you can run, which is part of why it is worth doing. There are no paid AI calls and no per-message fees in the core build.

Say your store does eight hundred orders a month with a healthy five percent refund rate. That is roughly forty refunds a month, or forty workflow executions. On n8n Cloud the entry plan covers thousands of executions, so forty barely registers. On a self-hosted n8n on a small VPS, the cost is effectively zero beyond the server you already run. Google Sheets and Slack both handle this volume on their free tiers without trouble.

Even a high-volume store doing ten thousand orders a month with the same refund rate lands around five hundred executions, still comfortably inside normal n8n limits. The economics do not change as you grow, which is the opposite of paying per refund inside a third-party app.

Get the Shopify refund tracker template

You now know exactly how the tracker works. If you would rather not wire five nodes by hand, the ready-made template imports in minutes with every field already mapped, plus a setup guide and a credentials guide so the connections take seconds.

Get the template
Have us set it up for you

Instant download · Works on n8n Cloud and self-hosted

Frequently asked questions

Does this work on the Shopify Basic plan?

Yes. The Refund Created webhook is available on every Shopify plan, including Basic. You only need a custom app token with read access to orders, which any plan can create from the admin under Settings and Develop apps.

Will it capture partial refunds?

Yes. Shopify fires the Refund Created event for both full and partial refunds. The Code node reads the actual refunded amount from the transactions, so a partial refund logs the partial value rather than the full order total.

Can I send the alert to Telegram instead of Slack?

Yes. Swap the Slack node for a Telegram node on the true branch of the IF. Map the same message text to the Telegram Text field and set your chat ID. Everything else in the workflow stays exactly the same.

What happens if Google Sheets is down when a refund fires?

n8n marks that execution as failed and keeps it in the execution log. Turn on retries on the Sheets node and add an error workflow so nothing slips through. You can also re-run any failed execution by hand from the editor.

Does it handle multiple currencies?

The payload includes the currency code, so log it in its own column. If you sell in several currencies, convert to a base currency inside the Code node before the high-value check so your alert threshold stays consistent across stores.

Related guides

n8n
Shopify
Google Sheets
Slack
automation

Shopify order alert with n8n: real-time new order notifications

Shopify order alert with n8n: real-time new order notifications

New to n8n? Start with our step-by-step setup guide, then come back to build this workflow.

TL;DR: A Shopify order alert in n8n pushes every new sale straight to Telegram, Slack, or Gmail the moment it happens, so you stop refreshing the admin app all day. This guide shows the exact nodes, a step-by-step build, realistic monthly cost, and the common mistakes that cause duplicate or missing alerts. Import the ready template, connect your store, and you get instant order notifications in under ten minutes.

Why a Shopify store wants real-time order alerts

When you run a store, the gap between an order landing and you finding out about it is money sitting still. The default Shopify email notification is slow, lands in a crowded inbox, and gives you almost no room to customize what you see. If you sell high-ticket items, ship same-day, or hand fulfillment to a small team, that delay turns into late shipments and support tickets.

A Shopify order alert built in n8n fixes that. Instead of waiting on Shopify’s built-in email, you fire a clean, formatted message to the channel your team already watches. For most stores that is a Telegram group on everyone’s phone, a Slack channel the warehouse keeps open, or a labeled Gmail thread. You control the format, the timing, and the routing, and you pay nothing per message.

What this workflow does

The workflow listens for new orders on your Shopify store. The second a customer checks out, Shopify sends the order data to n8n, which formats the important details and posts an alert to your chosen channel. No polling, no cron delay, no manual checking.

A typical alert shows the order number, the customer name, the line items, the total, and the shipping country. You decide what goes in. Want only orders above a certain value flagged with a siren emoji? Add one filter. Want VIP repeat buyers routed to a separate channel? Add a branch. The base build takes minutes and the logic scales with your store.

Why it beats the default Shopify email

Shopify’s order email is fine for a hobby store. Once you are doing real volume, it falls short in three ways. It is slow and inconsistent, often arriving minutes after the sale. It is hard to read at a glance because the layout is fixed and verbose. And it cannot route anywhere useful, so the whole team ends up forwarding emails to each other.

The n8n version sends in seconds, shows exactly the fields you care about, and drops into a shared channel where the right person sees it immediately. You also get a single place to add business logic later, such as fraud flags, fulfillment routing, or a running sales tally, without touching Shopify settings.

What you need before you start

You need a running n8n instance, either self-hosted or n8n Cloud, and admin access to your Shopify store so you can create a custom app for API access. You also need one notification channel ready: a Telegram bot token and chat ID, a Slack workspace where you can add an incoming webhook or app, or a Gmail account connected through OAuth. Pick one to start. You can add the others later by duplicating the final node.

Node-by-node list

The base workflow uses four nodes. The Shopify Trigger node fires when a new order is created and brings the full order payload into n8n. The Set node (or an Edit Fields node) pulls out only the fields you want and builds a clean message string. An optional IF node filters orders, for example only alerting on totals above a threshold. The final node is your sender: Telegram, Slack, or Gmail, which delivers the formatted alert.

That is the whole graph for a working alert. Everything beyond it, such as high-value routing or a Google Sheets log, is an add-on you bolt onto the same trigger.

Step-by-step build

  1. In your Shopify admin, go to Settings, then Apps and sales channels, then Develop apps. Create a new custom app, give it Admin API access to orders (read), and install it to generate the Admin API access token.
  2. In n8n, add a Shopify Trigger node. Create new Shopify credentials using your store subdomain and the access token from step one. Set the trigger event to “Order created” and activate it so Shopify registers the webhook.
  3. Add a Set node after the trigger. Create a single field called message and build your text using expressions, for example a line for the order name, the customer first name, the total price, and the currency pulled from the trigger output.
  4. If you only want alerts above a value, add an IF node. Set the condition to the order total greater than your threshold, and wire the true branch into the sender node.
  5. Add your sender node. For Telegram, paste your bot token, set the chat ID of your group, and map the message field into the text. For Slack, choose the channel and map the message. For Gmail, set the recipient, a subject like New order, and the message as the body.
  6. Click execute once to test with the last order, confirm the alert lands correctly, then save and activate the workflow so it runs on every future order.

Common mistakes

The most frequent issue is duplicate alerts. This usually happens when the workflow is left in test mode and also activated, so two webhooks fire. Keep one active production version and deactivate test runs. The second is missing orders right after setup because the Shopify webhook was never registered. Always toggle the workflow active so n8n tells Shopify where to send data, then place a real test order to confirm.

A third mistake is dumping the entire order object into the message, which makes the alert unreadable. Map only the fields you need in the Set node. Finally, watch your access scopes. If the custom app lacks read access to orders, the trigger silently returns nothing, so double-check the API permissions before blaming the workflow.

Cost at realistic volume

For a self-hosted n8n instance, the cost of order alerts is effectively zero on top of your existing server, since executions run on hardware you already pay for. A small VPS that runs n8n comfortably handles thousands of orders a month. Telegram and Slack messages are free at any volume a store will hit, and Gmail sending is free within normal account limits.

On n8n Cloud, alerts count against your monthly execution quota. At one execution per order, a store doing 1,000 orders a month uses 1,000 executions, which sits inside the lower paid tiers. Compare that to per-task automation tools that bill for every step, where a four-node alert can cost four task credits per order and add up fast. For order volume that grows, self-hosting n8n keeps the marginal cost flat.

Get the ready-to-import template

You can build this from scratch in a few minutes, or skip straight to a tested version. The ready-to-import Shopify order alert template is available in our downloads library, complete with the trigger, message formatting, and sender nodes pre-wired for Telegram, Slack, and Gmail. If you would rather have it installed and connected to your store for you, our team does done-for-you n8n setup through our automation services. This workflow is part of our wider n8n Shopify automation collection, so you can stack it with low-stock alerts and daily sales reports on the same instance.

Frequently asked questions

How fast does the order alert arrive?

Because the workflow uses a Shopify webhook trigger rather than scheduled polling, the alert fires the moment the order is created. In practice you see the notification in your Telegram, Slack, or Gmail within a few seconds of the customer completing checkout, far faster than the default store email.

Can I send alerts to more than one channel at once?

Yes. After the Set node, branch the connection into multiple sender nodes, for example Telegram for the owner and Slack for the warehouse. Each node receives the same formatted message, so the order alert lands everywhere your team needs it without running the workflow twice.

Will this work with WooCommerce too?

It will. Swap the Shopify Trigger for the WooCommerce Trigger node and keep the rest of the workflow identical. The message formatting and sender nodes do not care where the order came from, so the same alert pattern works for WooCommerce stores running on the same n8n instance.

How do I only get alerts for high-value orders?

Add an IF node between the Set node and the sender. Set the condition to compare the order total against your threshold, then connect only the true output to the sender. Orders below the value pass through silently, so you get a quiet channel that flags the sales that matter most.

Do I need to keep n8n running all the time?

Yes, the workflow must be active for Shopify to deliver the webhook. On a self-hosted instance that means keeping the n8n service running, which a small always-on VPS handles easily. On n8n Cloud the platform stays up for you, so active workflows receive orders around the clock.

Related guides

Keep building out your store automation with more workflows from the Shopify category. Pair this order alert with a low-stock alert so you never oversell, or add a daily sales report so the team gets a clean end-of-day summary alongside the real-time pings.

Checking Shopify orders on Telegram

How do I get Shopify order alerts on Telegram?

Add the Telegram node to this n8n workflow and connect it to the Shopify order trigger. Each time a new order comes in, n8n formats the details and sends them to your Telegram chat within seconds. You only need a free Telegram bot, no Shopify app or paid plan.

Can I check Shopify orders on Telegram?

Yes. Add a Telegram command trigger so typing /orders returns your latest Shopify orders on demand. The workflow queries the Shopify Admin API and replies in the chat, so you check recent sales from your phone without logging into the admin.

Will I get a Telegram alert for every new Shopify order?

Yes, as long as n8n is running. The Shopify trigger fires on each order and passes it to the Telegram node, so you get one message per sale. You can filter to high-value or specific orders if you would rather not hear about every single one.

Shopify review automation with n8n: auto-request product reviews

Shopify review automation with n8n: auto-request product reviews

New to n8n? Start with our step-by-step setup guide, then come back to build this workflow.









TL;DR: This Shopify review automation n8n build watches for fulfilled orders, waits one week so the product actually arrives, then sends a short personalized review request by Gmail and logs it to Google Sheets. It runs on autopilot, costs almost nothing at real volume, and turns happy buyers into the social proof that sells your next visitor. Grab the ready-made template below and have it live in under ten minutes.

Prefer to skip the setup? Grab the ready-made template → and be running in under 10 minutes.

What it does

Reviews are the cheapest conversion lever a Shopify store has. A product page with a dozen honest reviews converts far better than the same page with none, yet most stores never ask for them in a consistent way. You remember to email a few customers, then a busy week hits and the habit dies.

This workflow removes the habit problem. Every time an order is marked fulfilled in Shopify, n8n quietly starts a timer. Seven days later, when the package has had time to land on the doorstep, it sends one friendly email that names the exact product the customer bought and asks them to leave a quick review. Every request is recorded in a Google Sheet, so you always know who was contacted and when. No reminders for you, no spreadsheet wrangling, no missed customers.

Why it beats the default

Shopify review apps from the app store do this too, but they charge a monthly fee that climbs with your order volume, and they lock the logic inside their dashboard. You cannot change the timing rule, the wording, or where the data goes without paying for a higher tier.

Running it in n8n flips that. You own the timing, the copy, and the data. Want to wait ten days for international orders and four for domestic? That is one extra branch. Want to skip customers who bought a gift card, or only ask buyers who spent over fifty dollars? Add a filter. Because the whole thing lives on your own n8n instance, the marginal cost of each email is effectively zero, and your customer list never leaves your control. For a deeper map of what else you can wire up around your store, see our n8n Shopify automation hub.

What you need

  • A running n8n instance, either n8n Cloud or self-hosted (version 1.0 or newer).
  • A Shopify store on any paid plan, with a custom app that has read access to orders.
  • A Gmail account for sending, connected through the Gmail OAuth2 credential.
  • A Google Sheet to log requests, connected through Google Sheets OAuth2.
  • Optional: an OpenAI API key if you want each email written fresh instead of using a fixed template.

Estimated build time: 30 to 45 minutes from scratch, or under 10 minutes with the template.

How it works at a glance

Six nodes carry an order from the moment it ships to the moment the review request lands in the inbox.

┌───────────────────────────────────────────────────────────────┐
│  SHOPIFY REVIEW REQUEST                                        │
│                                                               │
│  [Shopify Trigger] → [Set fields] → [Wait 7 days]             │
│                                          ↓                    │
│                  [OpenAI: write email] → [Gmail: send]        │
│                                          ↓                    │
│                              [Google Sheets: log row]         │
└───────────────────────────────────────────────────────────────┘
  

Node-by-node list

Here is every node in the workflow and the job it does, top to bottom.

Node Type Job
Shopify Trigger shopifyTrigger Fires when an order is fulfilled
Set fields set Pulls name, email, order number, product title
Wait 7 days wait Pauses until the product has arrived
Write email openAi Drafts a personalized review request
Send email gmail Delivers the message to the customer
Log row googleSheets Records who was contacted and when

Step-by-step build

1 Add the Shopify trigger

Add a Shopify Trigger node and set the topic to orders/fulfilled. Connect your Shopify credential, which you create from a custom app in your Shopify admin under Settings, Apps and sales channels, Develop apps. Give that app read access to orders. n8n registers the webhook automatically, so the moment you mark an order shipped, this node fires with the full order payload.

{
  "order_number": 1043,
  "customer": { "first_name": "Emily", "email": "emily.rodriguez@gmail.com" },
  "line_items": [{ "title": "Cedar & Sage Soy Candle", "quantity": 2 }],
  "fulfillment_status": "fulfilled"
}
💡

Tip: Test with the orders/fulfilled topic, not orders/create. Asking for a review before the box ships is the fastest way to earn a one-star reply.

2 Shape the customer data

Add a Set node to pull the fields you actually need into clean names. This keeps the later nodes readable and protects you from orders that arrive with missing data.

{
  "customer_name": "={{ $json.customer.first_name }}",
  "customer_email": "={{ $json.customer.email }}",
  "order_number": "={{ $json.order_number }}",
  "product_title": "={{ $json.line_items[0].title }}"
}

3 Wait for the product to arrive

Add a Wait node and set it to resume after 7 days. n8n pauses the execution and stores it in the database, then wakes it back up a week later. This is the node that makes the whole thing feel human: the email shows up after the candle is already burning, not while it is still in a truck.

📌

For a store that ships internationally, duplicate this node behind an IF branch and set a longer wait for non-domestic addresses.

4 Write the email with OpenAI

Add an OpenAI node with a chat completion. Feed it the customer name and product title and ask for a short, warm review request, two sentences plus a closing line. Naming the exact product is what lifts reply rates over a generic blast.

Write a friendly two-sentence email asking {{ $json.customer_name }}
to leave a review for the "{{ $json.product_title }}" they bought.
Keep it warm, no hard sell, and end with a thank you.
💡

Tip: Want zero AI cost? Delete this node and write the same two sentences directly in the Gmail body using the customer_name and product_title fields. The workflow runs exactly the same.

5 Send through Gmail

Add a Gmail node set to send a message. Map the To field to customer_email, write a subject like How are you liking your {{ $json.product_title }}?, and drop the OpenAI output into the body. Connect your Gmail OAuth2 credential and the email goes out from your own address.

6 Log it to Google Sheets

Add a Google Sheets node set to append a row. Write the order number, customer email, product title, and the send date. This log is your record of who was asked, and it is the table a dedupe lookup reads from so nobody gets emailed twice.

The data structure

The Google Sheet has one row per review request. Keep the column names exactly as below so the append step maps cleanly.

Column Type Example Description
OrderNumber Number 1043 Shopify order the request belongs to
Email Text emily.rodriguez@gmail.com Recipient of the review request
Product Text Cedar & Sage Soy Candle Product named in the email
SentDate Date June 12, 2026 When the request was sent
Status Text Sent Sent, or Skipped if already contacted

Common mistakes

A few things trip people up the first time they wire this together. The most frequent is mapping the email to the wrong topic, so requests fire on every new order instead of fulfilled ones, and customers get asked to review a product they have not received. Always confirm the trigger reads orders/fulfilled.

The second is forgetting the dedupe lookup. Without it, a customer who orders three times in a month gets three emails, which reads as spam. Add the Google Sheets lookup before the Gmail node and stop the run if a matching email already exists. The third is sending from a brand new Gmail address with no sending history, which can land requests in spam. Use an established account, and keep the copy plain with no heavy images.

Cost at realistic volume

Say your store fulfills 500 orders a month. Self-hosted n8n on a small VPS handles that load without breaking a sweat, and Gmail sends are free within normal account limits. The only metered cost is the OpenAI call, and a two-sentence email runs a tiny fraction of a cent on a current low-cost model.

Component At 500 orders / month
n8n (self-hosted) Fixed VPS cost, no per-run fee
Gmail sending Free within account limits
Google Sheets logging Free
OpenAI email writing Roughly $0.10 to $0.30 total

Drop the OpenAI node for a fixed template and the running cost rounds to zero. Compare that with a review app charging twenty to forty dollars a month that scales up with your order count.

🚀 Get the Shopify review automation template

You now know how every node fits together. Skip the wiring and import a tested workflow that ships with the Google Sheets log, the dedupe branch, and a ready email prompt, plus a setup guide and a credentials walkthrough.

Get the template →
Have us install it →

Instant download · Works on n8n Cloud and self-hosted

Frequently asked questions

Does this work with the Shopify free trial or any plan?

Yes. The Shopify Trigger uses standard Admin API webhooks available on every paid plan, including Basic. You only need a custom app with read access to orders, which any store owner can create from the Shopify admin in a couple of minutes.

Will the Wait node keep an execution running for seven full days?

It pauses the execution and stores its state in the n8n database, then resumes on schedule. It does not hold a live connection or burn CPU while waiting, so thousands of orders can sit in the queue at once without slowing your instance down.

How do I stop the same customer getting two review emails?

The Google Sheets log is your guard. Add a lookup before the Gmail node that searches the sheet for the order number or email, and route the workflow to stop if a matching row exists. The template ships with this dedupe branch ready to switch on.

Can I send through Outlook or plain SMTP instead of Gmail?

Yes. Swap the Gmail node for the Microsoft Outlook node or the Send Email node and reconnect your credential. Everything upstream stays identical, since only the final delivery step changes. The generated email body passes through unchanged.

Do I have to use OpenAI to personalize the email?

No. The AI step is optional polish. Delete the OpenAI node and write a fixed template in the Gmail node that drops in the customer name and product title with n8n expressions. The workflow still runs the same, just with a static message instead of a generated one.

Related guides

n8n
Shopify
Gmail
Google Sheets
OpenAI
automation