TrenoxaHQ
Guides · Updated 2026-10-24

Why Shopify orders go missing from your n8n workflow (and how to catch them)

Your Shopify order workflow sends the alert, logs the order and emails the invoice. Then one day a buyer asks where their confirmation is, and you find the order in Shopify but nowhere in your log. There is no failed execution and no error email. This guide covers why that happens, how to check by hand, and how to catch missed orders automatically.

Short answer: a workflow that starts from a Shopify webhook only runs when the webhook arrives. If n8n is down when Shopify sends it, if the run dies before the order is logged, or if Shopify has removed the subscription, the order never reaches the workflow, so nothing can fail. To catch it you need a check from outside the webhook path: compare Shopify's own order list with your log every day, and check the webhook subscriptions themselves.

Why your error workflow doesn't catch it

An error workflow (or an error output on a node) runs when an execution fails. A missed webhook produces no execution at all. From n8n's side the day looks normal, just with one order fewer. That's why these gaps tend to come to light weeks later, from a buyer or from accounting.

Three ways an order goes missing

1. n8n wasn't there when Shopify called. n8n was restarting after an update, the server was out of memory, or the reverse proxy returned an error. Shopify retries failed deliveries, but only for a limited time (Shopify's docs give 8 attempts over about 4 hours). After a longer outage, those orders are gone from the webhook path for good.

2. The run started but stopped before the order was logged. An execution timed out, a lookup to the Admin API hit a rate limit, or a node errored halfway. If your error handling only covers some nodes, the order can vanish between "received" and "logged" without an alert.

3. The subscription itself is gone or wrong. Shopify removes a webhook subscription after deliveries keep failing, for example when the workflow behind the URL was deactivated. It can also point at an old n8n host after a move. A dead subscription is the worst case: no orders arrive, so nothing fails, and the workflow looks healthy.

A related trap is duplicate subscriptions. If you re-register a webhook (for example by deactivating and re-activating a Shopify Trigger) and the old subscription survives, which can happen after the app or token changed, every order arrives twice. Nothing errors, and every order gets processed twice.

How to check by hand

  1. Compare yesterday's orders. In Shopify admin, filter Orders to yesterday (and to B2B or a tag, if your workflow only handles those). Check each order number against your log, sheet or inbox.
  2. Look at the executions. In n8n, open Executions for the workflow and compare the count with the number of orders. Fewer executions than orders means webhooks were missed.
  3. List the subscriptions. Run the webhookSubscriptions query in the Admin GraphQL API (for example from a Shopify app's GraphiQL) with the same app the workflow uses. Check that each topic you expect, such as ORDERS_CREATE, appears exactly once, pointing at your current n8n URL.

This works, but nobody does it every day, and the gaps happen on the days you don't look.

How to catch missed orders automatically

Two checks do different jobs, and together they cover all three causes.

Layer 1: a daily order reconciliation

Every morning, ask Shopify for every order created yesterday and look each one up in your log (a Google Sheet, for example). Any order that isn't there is flagged and emailed to you, and can be appended so the log is complete.

Two details matter:

  • Match on a stable ID, not just the order name. Match the order ID as well as #1001, so a renamed or reformatted order isn't reported twice.
  • Don't count, compare. If the subscription is dead, orders keep arriving in Shopify and nothing reaches the log, so the next morning every order from yesterday shows as missed. One alert like that tells you the webhook is broken, not that one order slipped. A simple count can't tell the difference.

The reconciliation's limits: it is up to a day late, and on a day with no sales it can't tell "no webhook" from "no orders".

Layer 2: a webhook health check

Every few hours, list the store's webhookSubscriptions and compare them with the topics you expect. Flag a topic that is missing, pointing at the wrong host, or subscribed more than once. Then send a plain GET to each n8n webhook URL. A GET never runs the workflow, and n8n's 404 message tells "listening" apart from "workflow inactive". To avoid noise, email only when something changes.

One gotcha: the query only returns subscriptions owned by the app behind your token. Use the same Shopify app the trigger uses, or the list comes back empty and looks like everything is broken (or, worse, like a false all clear).

Even with both layers, deduplicate at the top of your order workflow by the order ID. Then a late retry, a duplicate subscription or a re-run can't process an order twice.

Free n8n templates for both layers

The free Missed Orders Check runs the daily reconciliation: it fetches yesterday's orders from Shopify, compares them with your Google Sheets order log, and emails and appends anything missing. It needs only the read_orders scope, and every Shopify, Sheets and email node has an error output, so a failed check alerts you instead of looking quiet.

The free Webhook Health Check runs every 3 hours. It checks your subscriptions against the topics you expect, tests each n8n webhook URL, flags duplicates, and emails you only when something changes.

Tutorial: why Shopify webhooks fail silently and how the daily check catches the orders. The video loads from YouTube when you press play.

FAQ

Does Shopify tell me when a webhook fails? Not in a way you'd notice. Delivery failures appear in the app's webhook metrics in the Partner or Dev Dashboard, and Shopify may email the app's developer before removing a subscription, but nothing shows in your store admin.

Is this only a problem when self-hosting n8n? No. n8n Cloud has less downtime than most self-hosted servers, but runs can still fail halfway and subscriptions can still be removed or duplicated.

Can't I just poll Shopify every few minutes instead of using webhooks? You can, but it uses many more executions and API calls, and on n8n Cloud executions count toward your plan. Webhooks for speed plus a daily check for completeness is cheaper and catches more.

Should the check re-run the missed orders automatically? Usually not at first. Flag them, check a few, and only then add automatic re-processing, with the order ID as the dedupe key so nothing runs twice.

Skip the setup

The free Missed Orders Check runs the daily reconciliation, and the free Webhook Health Check watches the subscriptions. Or have it installed and adapted for your store.

More guides