Shopify orders webhook not firing

Shopify Orders Webhook Not Firing

4 min read • install

Admaxxer is a DTC analytics platform with built-in Meta + Google ad ops. If Shopify order webhooks are not firing, Admaxxer cannot attribute revenue to ad spend and your blended MER, cohort LTV, and forecast pipes silently go wrong. TL;DR: verify the webhook subscriptions exist for orders/create, orders/paid, orders/updated, and orders/refunded; confirm HMAC verification on the receiving endpoint; and inspect Shopify's webhook delivery log for the last failed attempt.

Symptoms

Root cause

The Shopify install flow does two things: it finishes OAuth and it registers webhook subscriptions. Failures in either half break attribution. The common failure modes:

  1. Webhook registration silently failed during install (network error, app scope change, Shopify rate-limiting the install flow).
  2. HMAC verification is rejecting the request — either the webhook secret rotated on Shopify's side, or the body is being parsed before verification runs (Express needs the raw body to compute the HMAC).
  3. Outbound from Shopify is blocked by a firewall, CDN rule, or staging environment that does not accept public traffic.
  4. The event exists but is filtered out — test orders, draft orders, and orders with no line items are not always delivered on every topic.

Fix

Step 1: List current subscriptions

Shopify Admin -> Settings -> Notifications -> Webhooks. You should see four Admaxxer-owned webhooks: orders/create, orders/paid, orders/updated, orders/refunded. If any are missing, disconnect and reconnect Shopify from the Admaxxer connection card to re-register.

Step 2: Inspect delivery attempts

In Shopify, click a webhook and open the delivery log. If you see consistent 401 responses, HMAC is failing. 5xx means the Admaxxer endpoint errored; copy the request id and check the Admaxxer logs.

Step 3: Fix HMAC verification

Admaxxer verifies the X-Shopify-Hmac-Sha256 header against the raw request body. If you introduced any middleware that parses JSON before the verification runs, the hash will not match. In Express, the webhook route must use a raw-body parser exclusively.

Step 4: Re-test with a real order

Create a real-money test order (or a draft order that you then mark as paid). Shopify fires on paid transitions, not on draft creation, so a draft alone will not trigger orders/paid.

Step 5: Check your firewall or CDN

If you run Admaxxer behind Cloudflare or similar, allow the Shopify webhook IP ranges or configure a bypass rule for the webhook endpoint. Shopify does not guarantee a stable source IP range, so a path-based rule is safer.

Verify the fix

Prevent it next time

Related guides

FAQs

Q: Do I need all four webhook topics? A: orders/paid is the minimum for revenue attribution. orders/refunded is required to subtract refunds from MER and LTV. orders/create and orders/updated help catch edge cases like post-hoc cancellation.

Q: Will Shopify retry failed deliveries? A: Yes. Shopify retries failed webhooks for up to 48 hours with exponential backoff, then the webhook is removed and you must re-register.

Q: Can I use the Shopify pixel instead of webhooks? A: The Admaxxer pixel captures client-side events, but server-side webhooks are authoritative for revenue because they survive ad blockers and client-side bounces.

Frequently Asked Questions

Do I need all four webhook topics?

orders/paid is the minimum for revenue attribution. orders/refunded is required to subtract refunds. orders/create and orders/updated help catch edge cases like post-hoc cancellation.

Will Shopify retry failed deliveries?

Yes. Shopify retries failed webhooks for up to 48 hours with exponential backoff, then the webhook is removed and you must re-register.

Can I use the Shopify pixel instead of webhooks?

The Admaxxer pixel captures client-side events, but server-side webhooks are authoritative for revenue because they survive ad blockers and client-side bounces.

Put This Knowledge Into Action

Bring Meta and Google ads into one self-hosted workspace.

Get Started Free