Shopify webhooks
Test and debug Shopify webhookswith real order and inventory payloads
Inspect every webhook Shopify sends, forward it to localhost, and catch broken automations before merchants do. Hooklistener keeps each event from your store in one request history.
How Shopify webhooks work
| Where to configure it | Declare subscriptions in shopify.app.toml or with the GraphQL Admin API. |
|---|---|
| Signature header | X-Shopify-Hmac-SHA256: base64-encoded HMAC-SHA256 of the raw body, keyed with your app's client secret (HTTPS deliveries only). |
| Timeout | One-second connection timeout and five seconds for the whole request. Anything outside 2xx, including 3XX, is an error. |
| Retries | 8 retries over the next 4 hours. After 8 consecutive failures, subscriptions created with the Admin API are deleted. |
| Dedupe headers | X-Shopify-Webhook-Id identifies a delivery; X-Shopify-Event-Id is shared by deliveries from the same merchant action. |
Sources (checked November 2026)
Stop guessing what Shopify actually delivers
Shopify webhook payloads change as you add apps, channels and checkout flows. Hooklistener records each event as it arrives so you can review the exact body, headers and delivery order from one dashboard.
Use one signed-in endpoint in development and staging so the whole team works from the same payloads before code reaches customers. An account endpoint keeps its URL.
Why Shopify teams reach for a debugger
Hard-to-reproduce bugs
Order updates and inventory changes behave differently by sales channel. Without the original payload you cannot reproduce the bug.
Unclear retry behavior
Shopify retries failed webhooks, and each retry looks like a new event to your app. You need to see every attempt to know whether your handler is the problem.
Fragmented testing setup
Several developers each running their own `ngrok` URL leads to lost payloads and a webhook subscription that points at someone's laptop.
How Hooklistener helps with Shopify webhooks
Payload and header inspection
Read the full JSON and headers of each Shopify delivery, and diff two orders from different sales channels to find the field that made one of them fail.
Every retry in the history
Each Shopify retry lands as its own captured request in your history (by plan), so you can see how often an order webhook was resent and what your endpoint answered.
`hooklistener tunnel` for the whole team
Instead of one `ngrok` URL per developer, forward Shopify webhooks to localhost with `hooklistener tunnel --port 3000`, and use replay (Pro) to resend an order event after a fix.
Try it: point Shopify at a free webhook URL or run a test with the webhook tester.
Shopify webhooks worth instrumenting
Subscription renewals
Check that billing automation triggers on recurring orders and that renewal emails carry the right data.
Inventory updates
Sync inventory adjustments from Shopify to ERPs and warehouses, and confirm no event went missing during a flash sale.
Headless storefronts
Feed order data into a custom storefront or marketing tool and verify each event before it changes what customers see.
Replay a failed webhook without re-triggering the provider
Once a delivery is captured, you can resend its exact headers and body to localhost, staging or production from the dashboard or through your coding agent over MCP, so the provider never has to fire a new event. Replay is on Pro and above. Read the replay guide.
Comparing webhook debugging tools?
See how Hooklistener stacks up against webhook.site, RequestBin, Beeceptor, Hookdeck and ngrok in the best tools to capture and inspect webhook payloads, or read the head-to-head pages for Hooklistener vs ngrok and Hooklistener vs Beeceptor.
Frequently asked questions
Does Hooklistener support every Shopify webhook topic?
Yes. A Hooklistener endpoint accepts any HTTP request, so you can subscribe it to any Shopify topic and filter the history down to the events that matter for each workflow.
Can I share captured payloads with teammates?
Yes. Send a shareable debugger link for a captured request. Shared workspaces for several seats are on the Production plan.
How long are Shopify payloads kept?
History depends on your plan: 1 day on Free, 14 days on Pro, 30 days on Production and 90 days on Scale.
Will this replace my existing tunneling setup?
For webhooks, yes. Run `hooklistener tunnel --port 3000` to get a random hook.events subdomain on Free, and a static subdomain that survives restarts on Pro. Replay is on Pro and above.
Spin up your Shopify webhook lab in minutes
Point Shopify at Hooklistener, capture your first webhook and forward it to localhost. No credit card required.