Connections
Get orders in seconds
This is optional, and everything still works without it
Shopdeck fetches your orders from Shopify on its own anyway. Without webhooks, a sale shows up within a few minutes instead of within a few seconds. If you never open the Live page, you will not notice the difference.
Why you have to do this by hand
If you connected Shopify with the Install button, you can skip this whole page — the webhooks were set up during the install and are already running.
If you connected by pasting a Client ID and Client secret, they cannot be. Shopify signs each message with the key of whatever created the subscription, and a private app’s key does not work for this — every message would arrive and be rejected. So the webhooks have to be made in the ordinary part of your Shopify admin, where Shopify signs them with a single shop-wide key that you then paste into Shopdeck.
That key is the whole trick. Six webhooks and one key, and it works.
First, get your address
Every webhook points at the same address, and it carries your workspace’s own identifier. Do not build it yourself — copy it from Shopdeck.
Open Setup and scroll to Live visitor tracking
In Shopdeck: Setup, then the card at the very bottom, Live visitor tracking. Under item 3 you will find Shopify order webhook URL with a copy button beside it.
Copy it and keep it somewhere
It looks like this, with your own identifier at the end:
The shape of the addresshttps://app.shopdeck.io/api/profit/webhooks/shopify?ws=00000000-0000-0000-0000-000000000000The part after ws= matters
That is which workspace the order belongs to. Copy the whole line including everything after the question mark. Truncate it and Shopify will deliver to nowhere.
Create the six webhooks in Shopify
Find the webhooks page
SettingsNotificationsWebhooksWebhooks is a section right at the bottom of the Notifications page — keep scrolling.
Add the first one
Press Create webhook. A small dialog appears with four things to fill in:
- Event — pick Order creation.
- Format — JSON.
- URL — paste the address you copied.
- Webhook API version — pick the latest stable version offered. If you are unsure, pick the one at the top that is not labelled as a release candidate.
Press Save.
Repeat for the other five
Same address, same format, same version, different event. Create one for each of these:
Event What it gives you Order creation A sale appears the moment it is placed. The important one. Order payment The order is marked paid without waiting for the next sync. Order update Edits, cancellations and status changes come straight through. Refund create A refund lands in your profit figure immediately instead of hours later. Checkout creation Somebody entering the checkout shows on Live. Optional. Checkout update Their progress through the checkout stays current. Optional. The first four are the ones that matter for money. The two checkout ones only feed the Live page, so skip them if you like.
Copy the signing secret
Underneath the list of webhooks, on that same page, Shopify shows a line reading something like “All your webhooks will be signed with …” followed by a long string of about 64 characters.
Copy it. That is the key Shopdeck needs to know the messages really come from your shop.
Paste the key into Shopdeck
Back to the Shopify card in Setup
Into the field called Webhook signing secret
Paste it there and press Save. Nothing else on the card changes.
Watch for a trailing space
This key is checked character by character. One invisible space copied along with it and every single message is rejected — with no visible error anywhere, because a rejected message simply does not arrive.
Checking that it works
There is no green light for this on the Setup page. You confirm it on the health screen instead.
Open the health screen
Profit Dashboard → Data health. Look at the table headed Sources.
Look for a row named shopify_webhook
After your next order — or your next visitor reaching the checkout, if you added those two — a row with that name appears, with a message like orders/create — 1 row(s) written.
If instead it says refused: signature does not match, the key is wrong or has a stray space. Copy it again from Shopify, paste, save.
You are done when
It is working when a sale shows up on the Live page within a few seconds of being placed, and the health screen shows shopify_webhook rows with no refusals.
When it does not work
Nothing named shopify_webhook ever appears on the health screen
Why: Shopify is not delivering — usually a wrong or truncated address.
Fix: Open the webhook in Shopify and compare the URL character for character with the one in Setup, especially everything after ?ws=. Shopify also shows delivery attempts and their results on that page.
Rows appear but say “refused: signature does not match”
Why: The signing secret in Shopdeck is not the one Shopify is signing with.
Fix: Re-copy the key from the bottom of Shopify’s webhooks page — it is per shop, not per webhook, so there is only one — and paste it into Webhook signing secret. Save. Watch for a trailing space.
Orders arrive, but refunds are still slow
Why: The Refund create webhook was not created.
Fix: Add it, same address, same format.