HomeShopify & E-commerceShopify auto-email to supplier on low…

Shopify auto-email to supplier on low stock with n8n

Shopify auto-email to supplier on low stock with n8n









Want Shopify to auto-email your supplier the moment stock runs low? This n8n workflow does exactly that: a scheduled job checks your Shopify inventory once a day, finds every variant at or below its reorder point, and emails the right supplier a ready-to-send purchase order through Gmail. A Google Sheet holds your reorder rules and a sent log, so no supplier ever receives the same request twice. No add-on apps, no Shopify Plus, and nothing to remember.

Prefer to skip the build? Jump to the done-for-you setup → and we will wire it to your store and suppliers for you.

What it does

Running out of a best seller is one of the quietest ways a Shopify store loses money. The product page still ranks, the ads still spend, but the buy button is gone and the order goes to a competitor. Most owners only notice when a customer complains or when they happen to scroll the inventory tab. This workflow closes that gap by turning your reorder process into a daily, automatic email to the supplier.

Here is the job in one sentence: every morning, n8n reads your Shopify inventory, compares each variant against a reorder threshold you set, and emails the matching supplier a purchase order for anything that is too low. It is part of the wider family of n8n Shopify automations that replace manual store admin, and it pairs naturally with an owner-facing low-stock alert if you also want a heads-up in your own inbox.

What the supplier receives is a clean, specific message: the product name, the SKU, how many units are left, and how many to send. Nothing for you to type, and nothing for them to clarify.

Why it beats the default

Shopify can show you a low-stock figure in the admin, and the higher Shopify Plus tier can fire a Shopify Flow action, but neither gives you a true supplier reorder out of the box on a standard plan. Here is where the n8n version pulls ahead.

Approach Emails the supplier directly Per-SKU thresholds and quantities Stops duplicate requests Plan needed
Shopify admin low-stock view No, you read it yourself One global value Manual Any
Shopify Flow email action To staff, not a real PO Limited No Plus / Flow
This n8n workflow Yes, with quantities Yes, from a sheet Yes, 7-day log Any

The reorder rules live in a Google Sheet, so a warehouse assistant can change a threshold or a supplier email without ever opening n8n. And because the workflow writes a last-ordered date back to that sheet, the same SKU never triggers two reorders in the same week. That dedup step is the difference between a tool a supplier trusts and one they start ignoring.

What you need

  • An n8n instance, either n8n Cloud or a self-hosted setup.
  • A Shopify Admin API access token with read_products and read_inventory scopes. You create this from a custom app under Settings, Apps and sales channels, Develop apps.
  • A Gmail account connected to n8n through Google OAuth, used to send the purchase orders.
  • A Google Sheet with two tabs: one for reorder rules, one optional log. Column layout is in the data section below.

Build time is around 40 minutes from scratch the first time, most of which is creating the Shopify token and filling in your supplier rows. Once it runs, your involvement drops to zero.

Node-by-node list

Seven nodes, one straight line, a single trigger at the start. Here is the full canvas before we configure anything.

  Schedule Trigger (daily 08:00)
        |
  Get Shopify inventory  (HTTP Request, GET products.json)
        |
  Read reorder rules     (Google Sheets, read SKU -> supplier)
        |
  Match low stock        (Code: keep variants <= threshold)
        |
  Build PO email         (Edit Fields: to / subject / body)
        |
  Email supplier         (Gmail: send purchase order)
        |
  Log reorder            (Google Sheets: write last_ordered)
  
  • Schedule Trigger (n8n-nodes-base.scheduleTrigger) fires the run once a day.
  • Get Shopify inventory (n8n-nodes-base.httpRequest) pulls every product and its variants from the Shopify Admin API.
  • Read reorder rules (n8n-nodes-base.googleSheets) loads your SKU-to-supplier table.
  • Match low stock (n8n-nodes-base.code) flattens the variants and keeps only the ones that need reordering.
  • Build PO email (n8n-nodes-base.set) assembles the recipient, subject, and body.
  • Email supplier (n8n-nodes-base.gmail) sends the purchase order.
  • Log reorder (n8n-nodes-base.googleSheets) stamps today’s date against the SKU so it is not emailed again for a week.

Step-by-step build

  1. Add a Schedule Trigger. Set the rule to trigger at a fixed hour, for example 08:00, in your store timezone. Daily is the right cadence: it is frequent enough to catch a drop overnight and slow enough that no supplier feels pestered.
  2. Add an HTTP Request node named “Get Shopify inventory”. Set the method to GET and the URL to https://YOUR-STORE.myshopify.com/admin/api/2024-10/products.json. Turn on Send Query Parameters and add fields = id,title,variants and limit = 250. For authentication, choose Generic Credential Type, Header Auth, with header name X-Shopify-Access-Token and your token as the value. Because this is a GET, there is no request body to configure.
  3. Add a Google Sheets node named “Read reorder rules”. Operation Get Row(s), point it at your spreadsheet and the Reorder Rules tab. It returns one item per SKU row.
  4. Add a Code node named “Match low stock”. This is where the two data sources meet. Pull the inventory with $('Get Shopify inventory').all() and the rules with $input.all(), flatten every product into one entry per variant, look up each variant’s rule by SKU, and return only the variants whose inventory_quantity is at or below the threshold and whose last_ordered is empty or older than seven days. Variants with no matching rule are ignored.
  5. Add an Edit Fields node named “Build PO email”. Add three string assignments: emailTo set to {{ $json.supplier_email }}, subject set to Reorder request: {{ $json.title }} ({{ $json.sku }}), and body holding your purchase-order text with the SKU, units left, and reorder quantity merged in.
  6. Add a Gmail node named “Email supplier”. Operation Send. Set To to {{ $json.emailTo }}, Subject to {{ $json.subject }}, and the message to {{ $json.body }}. Connect your Gmail OAuth credential.
  7. Add a final Google Sheets node named “Log reorder”. Operation Append or Update Row, matching on the sku column, and set last_ordered to {{ $now.format('yyyy-MM-dd') }}. This is the dedup memory that keeps the next run from re-emailing the same product.
💡

Test it with the threshold set high, for example 9999, so every variant counts as low. You will see the exact emails that would go out without touching real stock levels. Drop the threshold back once you are happy.

The reorder-rules sheet

The whole workflow is driven by one tab. Keep the column names exactly as below, since the Code node and the log step reference them by name.

Column Example What it stores
sku MUG-CERAMIC-12OZ The variant SKU, used as the match key
supplier_name Riverside Ceramics For the email greeting
supplier_email orders@riversideceramics.com Where the purchase order is sent
threshold 20 Reorder when units left is at or below this
reorder_qty 100 How many units to request
last_ordered 2026-06-13 Written by the workflow for 7-day dedup

Common mistakes

  • Forgetting the read_inventory scope on the Shopify token. Without it, inventory_quantity comes back null and nothing ever matches. Add the scope, then reinstall the custom app.
  • Using the storefront API URL instead of the Admin API. Reorder logic needs /admin/api/.../products.json, not the public endpoint.
  • Leaving the schedule on an interval like every minute. That is what spams suppliers. Daily is the design, and the 7-day log is the backstop.
  • Mismatched SKUs between Shopify and the sheet. A trailing space or different case breaks the match. Trim and lowercase both sides inside the Code node to be safe.
  • Skipping the final log node. Without it there is no dedup, and a product that stays low for three days emails the supplier three times.

Cost at realistic volume

This is about as cheap as automation gets, because every service in the stack has a free tier that comfortably covers a normal store.

Service What it does here Cost at one run a day
n8n One scheduled execution per day Free self-hosted, or well within the Cloud starter plan
Shopify Admin API One products read per run Free, far below rate limits
Gmail Sends purchase orders Free, up to 500 sends a day on a standard account
Google Sheets Rules and dedup log Free

Even a catalog with hundreds of SKUs is a single API read and a handful of emails per day, so a typical store runs this for nothing. Compare that to the cost of one stockout on a product that sells 30 units a day, and the maths is not close.

🚀 Want this wired to your store for you?

We will connect the Shopify token, build your reorder-rules sheet from your real SKUs and suppliers, and hand you a tested workflow that emails the right supplier the day stock runs low.

See our done-for-you setup →

Built and tested on your own n8n, cloud or self-hosted

FAQ

Does this work on Shopify Basic, or do I need Shopify Plus?

It works on every Shopify plan, including Basic. The workflow reads inventory through the standard Admin API, which all plans expose. You do not need Shopify Plus or the Shopify Flow app, since n8n handles the logic and Gmail sends the email itself.

Will the supplier get spammed every time someone buys a unit?

No. The workflow runs once a day, not on every sale, and it writes a last-ordered date to your Google Sheet after each email. A SKU that was reordered in the last seven days is skipped, so each supplier gets at most one request per product per week.

Can different products go to different suppliers?

Yes. The Google Sheet maps every SKU to its own supplier email, threshold, and reorder quantity. The Code node matches each low-stock variant to the right row, so a single run can email five different suppliers about five different products in one pass.

What if I run several Shopify locations?

The products endpoint returns total inventory across locations. If you reorder per location, switch the HTTP Request to the inventory_levels endpoint with a location_id filter and add that column to your reorder-rules sheet so thresholds are evaluated per location.

Can I send from a real PO address instead of Gmail?

Yes. Swap the Gmail node for the SMTP Send Email node and point it at your business mailbox, or keep Gmail and set a reply-to of purchasing@yourstore.com. The rest of the workflow stays exactly the same.

Related guides

n8n
Shopify
Gmail
Google Sheets
inventory
automation