Skip to content
All articles
Setup

E-commerce (Shopify)

Sync customers and orders from your Shopify store to the CRM using your own store (BYO model).

The E-commerce integration uses YOUR Shopify store (BYO model: you bring your own store). It listens to your store's webhooks and syncs to the CRM: each customer becomes a Contact and each order becomes a Sales order. There is no cost, margin or intermediation on our side: the data comes straight from your store.

The integration starts inert: nothing happens until you fill in the fields and activate. The webhook secret and the admin token are stored encrypted in the CRM and are never displayed back.

Prerequisites

  • A Shopify store with administrator access (Shopify Admin) to create webhooks and view the signing secret.
  • The store's .myshopify.com domain.
  • In Sellio, administrator access to save the credentials and activate the integration in Settings → Integrations.

What you need to fill in

  • Store domain: your store's .myshopify.com address (e.g., mystore.myshopify.com).
  • Webhook secret (API secret): the secret Shopify uses to sign the webhooks. In Shopify Admin → Settings → Notifications the webhooks' "signing secret" appears (or, if you use your own app, its API secret). This is the value the CRM uses to verify the signature (HMAC) of each call.
  • Admin API access token (optional): only needed if, in the future, you want the CRM to read store data via the API. To only receive the webhooks, leave it blank.

How to configure

  1. Open Settings → Integrations and find the "E-commerce (Shopify)" card.
  2. Fill in the store domain and the webhook secret and click "Save credentials".
  3. Copy the "Webhook URL (Shopify)" that appears.
  4. In Shopify Admin → Settings → Notifications → Webhooks, create a webhook (JSON format) pointing to that URL for EACH of these topics: customers/create, customers/update, orders/create, orders/paid.
  5. Return to the CRM and click "Activate".

What happens on each event

  • customers/create and customers/update: the customer is created or updated as a Contact, matching by email. The CRM stores the Shopify customer id to avoid duplicating on redeliveries.
  • orders/create and orders/paid: the order is created or updated as a Sales order (number, amount, currency and status), linked to the corresponding Contact when it exists. The status becomes "invoiced" when the order is paid, "canceled" if it was canceled, or "confirmed" otherwise.
💡 The sync is idempotent: if Shopify resends the same webhook, the CRM updates the existing record instead of creating a new one (it identifies the record by the Shopify id). Only the fields coming from the store are updated, and what you edited by hand in the CRM is preserved.

Treat the webhook URL and the webhook secret as secret. The CRM verifies the X-Shopify-Hmac-Sha256 signature of each call with your webhook secret; invalid signatures are refused. If you try to activate without filling in the secret, the integration stays inert, and nothing is synced until everything is in place.

How to test

  1. With the integration activated and the webhooks created, in Shopify Admin → Settings → Notifications → Webhooks, use "Send test notification" on one of the webhooks (or create a test order/customer in the store).
  2. In the CRM, check the Contacts object (for customers) and Sales orders (for orders): the corresponding record should appear.
  3. Resend the same test and confirm it does NOT duplicate. The CRM identifies the record by the Shopify id.

Troubleshooting

  • Invalid signature (call refused): the webhook secret saved in the CRM differs from Shopify's signing secret. Copy the secret again (Settings → Notifications, or your app's API secret) and paste it into the CRM.
  • Nothing syncs: confirm you created a webhook (JSON format) for EACH topic: customers/create, customers/update, orders/create, orders/paid, all pointing to the "Webhook URL (Shopify)".
  • 404 on the URL: the integration is deactivated or the URL token changed. Reactivate and re-copy the URL to Shopify.
  • Order with no linked contact: the link matches by the customer's email; if the customer does not yet exist as a Contact, the order is created without a link and you associate it later.
  • Fields I edited were overwritten: only the fields coming from the store are updated; the rest is preserved. If a store field changed, it reflects the store by design.

Open this article inside the system

Read it and want to see it working?

The account is free and the whole manual is available inside the system, with an assistant that answers from this very content.

Create free account
E-commerce (Shopify) · Sellio