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

Shopify webhook key facts
Where to configure itDeclare subscriptions in shopify.app.toml or with the GraphQL Admin API.
Signature headerX-Shopify-Hmac-SHA256: base64-encoded HMAC-SHA256 of the raw body, keyed with your app's client secret (HTTPS deliveries only).
TimeoutOne-second connection timeout and five seconds for the whole request. Anything outside 2xx, including 3XX, is an error.
Retries8 retries over the next 4 hours. After 8 consecutive failures, subscriptions created with the Admin API are deleted.
Dedupe headersX-Shopify-Webhook-Id identifies a delivery; X-Shopify-Event-Id is shared by deliveries from the same merchant action.

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.