> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dmly.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Connect Shopify

> Connect your Shopify store so orders, customers and products sync into DMLY, and store events can start WhatsApp automations.

Connecting Shopify gives your automations eyes on the store: an order confirmation on
WhatsApp the moment someone buys, an abandoned-checkout nudge, a back-in-stock alert, and a
bot that answers *"where is my order?"* from real order data. DMLY syncs your products,
customers and recent orders, then listens to the store's events as they happen.

## Before you start

DMLY connects with a **custom app** token from your own Shopify admin. The panel's
**Setup guide** walks through it on the Shopify side:

1. In Shopify admin, go to **Settings → Apps and sales channels → Develop apps** and create
   an app.
2. Grant it Admin API scopes to read and write **orders**, **customers**, **products** and
   **price rules**, and to read **checkouts**.
3. Enable **Protected customer data access**; without it Shopify redacts customer names,
   emails and phone numbers from the API, and DMLY can't match orders to your contacts.
4. Install the app and copy its **Admin API access token** (you only see it once) and the
   **API secret key**.

## Connect it

<Steps>
  <Step title="Open the Shopify tile">
    On the Integrations page, open the **Commerce** tab and select **Connect** on
    **Shopify**.
  </Step>

  <Step title="Enter the store details">
    Under **Store connection**, fill in the **Store URL** (`your-store.myshopify.com`), the
    **Admin API access token** (starts `shpat_`) and the **API secret key**. The secret is
    what DMLY uses to verify that incoming events really came from your store, so it isn't
    optional.
  </Step>

  <Step title="Connect store">
    Select **Connect store**. DMLY immediately calls your store's API to prove the
    credentials. Wrong ones fail here, with Shopify's own error, rather than failing
    quietly later.
  </Step>

  <Step title="Let the first sync run">
    On success you'll see *"Store connected — syncing products, customers and recent
    orders…"*. As the form notes, *"Webhooks are registered automatically on connect."*
    There is nothing to paste into Shopify, unlike an SMS gateway or a payment provider.
  </Step>
</Steps>

To change credentials later, reopen the tile and **Save & reconnect**. **Test connection**
re-runs the credential check any time.

## What syncs, and where you see it

The first sync imports all your products, all your customers, and orders from the **last 90
days**; after that, the store's webhooks keep everything current. For each record DMLY keeps
what messaging needs: order numbers, totals, statuses and tracking links; customer names,
emails, phones and spend; product titles, prices and stock.

Where you see it is deliberately small:

* The tile's **Synced data** panel shows the **Products / Customers / Orders** counts, the
  last sync time, and a **Sync now** button.
* **Recent activity** on the same page lists the latest store events as they arrive.

**There is no store-order browser in DMLY.** Synced orders don't appear under
[Finance → Orders](/finance/orders) (that screen is for orders you create in DMLY), and
there's no list screen for store customers or products either. The synced data exists to
power automations: triggers, the product pickers in store steps, and in-chat order lookups.

<Note>
  **The initial sync never fires automations.** Backfilled orders don't trigger **Order
  placed**; only events that happen after you connect do. So connecting a store with ten
  thousand historical orders won't message anyone.
</Note>

Store customers are matched to your [Contacts](/contacts/overview) by phone number, then
email, at the moment an automation fires. See
[Store automations](/automation/store-automations#who-the-flow-actually-reaches) for how
that works per channel.

## The events DMLY listens for

Connecting registers webhooks on your store for orders (created, paid, fulfilled,
cancelled), refunds, checkouts, new customers, product changes and inventory levels. They
feed the ten **Store events** triggers (**Order placed**, **Order paid**, **Order
shipped**, **Order cancelled**, **Order refunded**, **Checkout abandoned**, **Product back
in stock**, **Inventory low**, **Customer milestone**) listed in
[Triggers](/automation/triggers#store-events), and the matching `store.*`
[webhook topics](/api-reference/webhooks) for your own integrations.

One gap to know: the **Payment failed** store trigger never fires from Shopify, because
Shopify doesn't report a failed checkout payment as an event. It works on
[WooCommerce](/integrations/woocommerce).

Every delivery from Shopify is signature-checked against your API secret key before DMLY
acts on it, so a forged event can't start your automations.

## Disconnecting

**Disconnect** removes the webhooks from your store and wipes the stored credentials. The
already-synced products, customers and orders stay in DMLY, so reconnecting later doesn't
start from zero, but nothing updates while disconnected.

## What to build with it

<Columns cols={2}>
  <Card title="Store automations" icon="robot" href="/automation/store-automations">
    Trigger filters, the store steps, and the order-status and COD templates.
  </Card>

  <Card title="Triggers" icon="bolt" href="/automation/triggers">
    The full store-event list alongside every other trigger.
  </Card>

  <Card title="Templates" icon="copy" href="/automation/templates">
    Install the abandoned-checkout and order-status flows in one click.
  </Card>

  <Card title="WhatsApp rules and limits" icon="whatsapp" href="/broadcasts/whatsapp-rules-and-limits">
    Why store-triggered messages should start with an approved template.
  </Card>
</Columns>
