Shopify CRM
Overview
The Shopify integration brings your store's orders, customers and abandoned carts into WaDesk, so you can recover carts, confirm orders, and support buyers over WhatsApp — with the order context right there in the chat and your pipeline. Pair it with the WhatsApp Catalog, Auto-Invoicing and Payment Links to sell, invoice and collect inside the conversation.
Where: Integrations → Shopify. It sits alongside WooCommerce and the general E-commerce & CRM integrations.
How the Integration Works
- WaDesk talks to your store through Shopify's Admin API, authenticated with an access token tied to a set of scopes (read permissions) you grant.
- On connect, WaDesk runs an initial sync of recent customers and orders so they're immediately usable as contacts and deals.
- Going forward, Shopify webhooks notify WaDesk of new orders, order updates, new customers and abandoned checkouts, keeping data fresh without polling.
- Everything is scoped to your workspace; each synced customer becomes a WaDesk contact you can message and segment.
Credentials: Admin Sets the App, Merchants Just Connect
Shopify in WaDesk uses OAuth, not a pasted token. The platform admin registers one Shopify app and stores its credentials once; each merchant then connects by entering only their store domain and approving Shopify's consent screen. There is no Admin API token to copy or paste anywhere in WaDesk.
Platform admin — one time
- Create a Shopify app. In the Shopify Partner Dashboard (
partners.shopify.com), create an app to get a Client ID (API key) and Client Secret (API secret key). - Set the redirect (callback) URL to WaDesk's Shopify OAuth callback (shown in WaDesk admin).
- Request the scopes your integration needs — at least
read_orders,read_customers,read_checkouts(abandoned carts) andread_products. - Add the mandatory GDPR compliance webhooks — via the Shopify CLI. See the step-by-step below. Shopify requires these before App Store approval, and the new Dev Dashboard has no UI field for them — they must be declared in the app's
shopify.app.tomland pushed once with the CLI. - Enter the credentials in WaDesk admin. Fill
shopify_client_id,shopify_client_secret,shopify_scopesandshopify_redirect_uri, then enable Shopify (shopify_enabled). Every workspace reuses these — merchants never see them.
Mandatory GDPR webhooks — Shopify CLI (one time)
Shopify requires three GDPR compliance webhooks, or the install silently fails and the app-review checks stay red. The new Dev Dashboard has no UI field for them — they are declared in the app's shopify.app.toml and pushed once with the Shopify CLI. This is a one-time setup, with no ongoing CLI use.
- Install the CLI:
npm i -g @shopify/cli@latest - Link your app — pick this app when prompted; it writes
shopify.app.toml:shopify app config link - Add this block to that file, replacing the URL with your own (copy it from WaDesk Admin → Settings → Shopify, step 5):
[webhooks] api_version = "2026-07" [[webhooks.subscriptions]] compliance_topics = [ "customers/data_request", "customers/redact", "shop/redact" ] uri = "https://YOUR-DOMAIN/shopify/compliance" - Push it:
shopify app deploy
All three topics point at that one fixed URL. Unlike the per-store order webhook, it carries no secret in the path — deliberately, so Shopify's automated review can reach it before any store has installed the app.
Every delivery is verified. Shopify signs each request with HMAC-SHA256 using your Client Secret. WaDesk checks theX-Shopify-Hmac-Sha256header and returns401on a mismatch,200on success — then honours the request (erasing the customer's or shop's stored data). This is what satisfies Shopify's “Verifies webhooks with HMAC signatures” check.
Skip this and the app cannot be approved. The automated checks fail on “Provides mandatory compliance webhooks” and “Verifies webhooks with HMAC signatures”, and installs fail silently with no visible error.
Merchant — per store
- Open Integrations → Shopify in WaDesk.
- Enter your store domain (
your-store.myshopify.com) — that's the only field. - Click Connect — you're sent to Shopify's consent screen; approve the requested scopes.
- Done. Shopify redirects back, WaDesk verifies the HMAC + state and exchanges the code for a permanent access token automatically, storing it against your integration. No token handling on your part.
Protected customer data. Orders, customers and abandoned checkouts include personal data. Shopify requires the app that accesses it to have protected customer data access approved — abandoned-checkout data in particular is gated behind this. This is configured on the Shopify app once, by the admin, not per merchant.
API Limits & Rules
| Rule | What it means |
|---|---|
| REST rate limit | Shopify's REST Admin API uses a leaky bucket — about 2 requests/second sustained (bucket of 40) on standard plans, higher on Shopify Plus. WaDesk paces sync calls to stay under it and backs off on 429. |
| GraphQL cost | If GraphQL is used, limits are cost-based (calculated query points/second) rather than a flat call count. |
| Webhook reliability | Shopify retries failed webhook deliveries for a period; WaDesk also reconciles on the initial sync so a missed webhook doesn't lose data permanently. |
| Scope changes | Adding a new capability (e.g. abandoned carts) may require adding a scope and re-installing/re-consenting the app. |
Connecting Your Store
- Open Integrations → Shopify and enter your store domain to start the connection.
- Approve the OAuth consent on Shopify — no token to paste; WaDesk receives the access token automatically on redirect back.
- WaDesk subscribes to store webhooks — orders create/update, customers create, and checkouts (abandoned).
- Initial sync pulls recent customers and orders so they're usable at once.
Embedded-app session note. If you open WaDesk embedded inside Shopify admin (in an iframe), browsers require the session cookie to be SameSite=None; Secure so it isn't dropped in the cross-site frame — otherwise you'd hit a 419 / login loop. WaDesk sets this for the embedded context so actions work without re-logging-in.
What Syncs
| From Shopify | In WaDesk |
|---|---|
| Customers | Become contacts (name, phone, email), ready to message, tag and segment. |
| Orders | Appear against the customer with line items, total and status; can create a deal in your pipeline. |
| Abandoned checkouts | Surface as recovery opportunities you can follow up on WhatsApp (requires checkout scope + protected-data access). |
Using It
- Order confirmations & updates. Send order/shipping updates over WhatsApp using approved templates.
- Cart recovery. Reach customers who left items behind — manually, with a flow, or as a broadcast to an eligible segment.
- Support in context. When a customer messages, their recent orders show in the thread so agents answer without switching tabs.
- Pipeline & revenue. Turn high-value orders or repeat buyers into deals, and let the AI CRM Copilot report on them.
Troubleshooting
| Symptom | Cause & fix |
|---|---|
| “Access denied” on connect | The app is missing a scope, or Shopify isn't enabled/approved. The admin adds the scope to the Shopify app and re-saves; the merchant clicks Connect again to re-consent. |
| “An administrator needs to add credentials” | The platform admin hasn't set shopify_client_id/shopify_client_secret yet. Complete the admin one-time step first. |
| Abandoned carts empty | Missing read_checkouts and/or protected customer data access. Grant the scope and complete the data-access consent. |
| Data stops updating | Webhooks were removed or the token was rotated. Reconnect to re-subscribe. |
| 419 inside Shopify admin | Embedded cross-site cookie was blocked. Open WaDesk directly, or ensure the embedded session cookie is SameSite=None; Secure. |
| Syncing is slow | Expected on large stores — WaDesk paces to Shopify's rate limit to avoid 429s. |